Kubernetes使用operator安装Redis集群

摘要:
每个有状态集都使用PodAntiAffinity来确保主节点和从节点分布在不同的节点上。同时,当操作员在每个有状态集合中选择主节点时,它将优先选择具有不同k8s节点的容器作为主节点。下载redis集群运算符oritclonehttps://github.com/ucloud/redis-cluster-operator.git在命名空间Redis cluster下部署Redis集群。请修改yaml文件的命名空间参数以创建命名空间:Redis cluster[root@k8s-master01redis-cluster-operator-master]#kubectlcreatensredis clusternamespace/redis nodecreated[root@k8s-master01redis-cluster-operator-master]#kubectlgetnsNAMESTATUSAGEdefaultActive76dingress-nginxActive9dkube-node-leaseActive76dkube-publicActive76dkube-systemActive76dkobe-usersActived21hkubernetes-dashboardActive45hredis-clusterActive11srook-cephActive33h[root@k8s-master01redis-cluster-op创建自定义资源[root@k8s-master01redis]#Kubedlapply fdeploy/crds/customresourcedefinition.apiextensions.k8s.io/redistributedredisclusters.redis.kun创建自定义资源定义.apiextension s.k8s.io/redisclusterbackup.redis。kuncreatedCreate运算符[root@k8s-master01redis]#kubectlcreate fdeploy/service_帐户。yamlserviceaccount/redis群集运算符已创建[root@k8s-master01redis]#kubectlcreate fdeploy/cluster/cluster_ role.yamlclusterrole.rbac.authorization.k8s。io/redis群集运算符已创建[root@k8s-master01redis]#kubectlcreate fdeploy/cluster/cluster_ role_binding.yamlclusterlebinding.rbac.authorization.k8s。io/redis群集运算符已创建[root@k8s-master01redis]#kubectlcreate fdeploy/cluster/operator.yamldeploy。apps/redis cluster operator创建dconfigmap/redis管理员创建[root@k8s-master01redis]#KubenctlgetdeploymentNAMEREADYUP TO DATEAVAILABLEAGEmetrics metrics服务器1/111110dredis群集运算符1/11112s//群集作用域命令$kubectlcreate fdeploy/service_帐户。yaml$kubectlcreatefdeploy/cluster/cluster角色。yaml$kubectlcreate fdeploy/cluster/cluster角色绑定。yaml部署示例Redis集群注意:只有使用持久存储的Redis集群在意外删除或滚动更新后才能恢复。即使不使用持久性,也需要将pvc设置为Redis。

通过operator部署redis集群

operator部署有状态的应用会简单很多

Kubernetes使用operator安装Redis集群第1张

github文档:https://github.com/ucloud/redis-cluster-operator#deploy-redis-cluster-operator

Redis Cluster Operator在Kubernetes上管理Redis-Cluster集群

每个主节点及其从节点都由statefulSet管理,为每个statefulSet创建无头svc,并为所有节点创建clusterIP服务。
每个有状态集都使用PodAntiAffinity来确保主节点和从节点分散在不同的节点上。同时,当操作员在每个有状态集中选择主节点时,它会优先选择具有不同k8s节点的容器作为主节点。

(1)下载redis-cluster-operator

git  clone  https://github.com/ucloud/redis-cluster-operator.git

在名称空间:redis-cluster下部署Redis集群,注意修改yaml文件的namespace参数
创建名称空间Namespace:redis-cluster

[root@k8s-master01 redis-cluster-operator-master]# kubectl create ns redis-cluster
namespace/redis-node created
[root@k8s-master01 redis-cluster-operator-master]# kubectl get ns
NAME                   STATUS   AGE
default                Active   76d
ingress-nginx          Active   9d
kube-node-lease        Active   76d
kube-public            Active   76d
kube-system            Active   76d
kube-users             Active   2d21h
kubernetes-dashboard   Active   45h
redis-cluster          Active   11s
rook-ceph              Active   33h
[root@k8s-master01 redis-cluster-op

(2)创建自定义资源(CRD)

[root@k8s-master01 redis]# kubectl apply -f deploy/crds/
customresourcedefinition.apiextensions.k8s.io/distributedredisclusters.redis.kun created
customresourcedefinition.apiextensions.k8s.io/redisclusterbackups.redis.kun created

(3)创建operator

[root@k8s-master01 redis]# kubectl create -f deploy/service_account.yaml
serviceaccount/redis-cluster-operator created
[root@k8s-master01 redis]# kubectl create -f deploy/cluster/cluster_role.yaml
clusterrole.rbac.authorization.k8s.io/redis-cluster-operator created
[root@k8s-master01 redis]# kubectl create -f deploy/cluster/cluster_role_binding.yaml
clusterrolebinding.rbac.authorization.k8s.io/redis-cluster-operator created
[root@k8s-master01 redis]# kubectl create -f deploy/cluster/operator.yaml
deployment.apps/redis-cluster-operator created
configmap/redis-admin created
[root@k8s-master01 redis]# kubectl get deployment
NAME                     READY   UP-TO-DATE   AVAILABLE   AGE
metrics-metrics-server   1/1     1            1           10d
redis-cluster-operator   1/1     1            1           12s


// cluster-scoped 命令
$ kubectl create -f deploy/service_account.yaml
$ kubectl create -f deploy/cluster/cluster_role.yaml
$ kubectl create -f deploy/cluster/cluster_role_binding.yaml
$ kubectl create -f deploy/cluster/operator.yaml

(4)部署样本Redis集群

注意:只有使用持久性存储(pvc)的redis集群在意外删除或滚动更新后才能恢复。即使您不使用持久性(如rdb或aof),也需要将pvc设置为redis。

apiVersion: redis.kun/v1alpha1
kind: DistributedRedisCluster
metadata:
  annotations:
    # if your operator run as cluster-scoped, add this annotations
    redis.kun/scope: cluster-scoped
  name: example-distributedrediscluster
spec:
  image: redis:5.0.4-alpine
  masterSize: 3
  clusterReplicas: 1
  resources:
    limits:
      cpu: 200m
      memory: 200Mi
    requests:
      cpu: 200m
      memory: 100Mi

因为使用样本,没有资源限制,会因为内存不足导致初始化失败,限制使用这个测试

kubectl create -f deploy/example/custom-resources.yaml
[root@k8s-master01 redis]# kubectl get pod,svc
NAME                                          READY   STATUS    RESTARTS   AGE
pod/drc-example-distributedrediscluster-0-0   1/1     Running   0          6m39s
pod/drc-example-distributedrediscluster-0-1   1/1     Running   0          6m2s
pod/drc-example-distributedrediscluster-1-0   1/1     Running   0          6m39s
pod/drc-example-distributedrediscluster-1-1   1/1     Running   0          6m7s
pod/drc-example-distributedrediscluster-2-0   1/1     Running   0          6m39s
pod/drc-example-distributedrediscluster-2-1   1/1     Running   0          6m6s
pod/metrics-metrics-server-6c7745d876-cw72h   1/1     Running   0          8h
pod/redis-cluster-operator-7f6cf86475-dhttx   1/1     Running   0          11m

NAME                                        TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)              AGE
service/example-distributedrediscluster     ClusterIP   10.96.104.199   <none>        6379/TCP,16379/TCP   6m38s
service/example-distributedrediscluster-0   ClusterIP   None            <none>        6379/TCP,16379/TCP   6m38s
service/example-distributedrediscluster-1   ClusterIP   None            <none>        6379/TCP,16379/TCP   6m38s
service/example-distributedrediscluster-2   ClusterIP   None            <none>        6379/TCP,16379/TCP   6m38s
service/kubernetes                          ClusterIP   10.96.0.1       <none>        443/TCP              76d
service/metrics-metrics-server              ClusterIP   10.96.86.164    <none>        443/TCP              10d
service/nginx                               ClusterIP   10.96.215.251   <none>        80/TCP               9d
service/redis-cluster-operator-metrics      ClusterIP   10.96.58.127    <none>        8383/TCP,8686/TCP    11m
[root@k8s-master01 redis]# 

创建指定命名空间和动态存储的,我这个没有构建动态存储

cat redis-cluster.yaml 
apiVersion: redis.kun/v1alpha1
kind: DistributedRedisCluster
metadata:
  annotations:
    # if your operator run as cluster-scoped, add this annotations
    redis.kun/scope: cluster-scoped
  name: example-distributedrediscluster
  namespace: redis-cluster
spec:
  image: redis:5.0.4-alpine
  imagePullPolicy: IfNotPresent
  masterSize: 3			#master节点数量
  clusterReplicas: 1	#每个master节点的从节点数量
  serviceName: redis-svc
  # resources config
  resources:
    limits:
      cpu: 300m
      memory: 200Mi
    requests:
      cpu: 200m
      memory: 150Mi
  # pv storage
  storage:
    type: persistent-claim
    size: 2Gi
    class: nfs-storage
    deleteClaim: true
]# kubectl apply -f redis-cluster.yaml

(5)验证集群

[root@k8s-master01 redis]# kubectl exec -it  drc-example-distributedrediscluster-0-0 -- sh
/data # redis-cli -c -h redis-svc
Could not connect to Redis at redis-svc:6379: Name does not resolve
not connected> 
/data # redis-cli -c -h example-distributedrediscluster
example-distributedrediscluster:6379>  cluster info
cluster_state:ok
cluster_slots_assigned:16384
cluster_slots_ok:16384
cluster_slots_pfail:0
cluster_slots_fail:0
cluster_known_nodes:6
cluster_size:3
cluster_current_epoch:5
cluster_my_epoch:0
cluster_stats_messages_ping_sent:511
cluster_stats_messages_pong_sent:485
cluster_stats_messages_meet_sent:1
cluster_stats_messages_sent:997
cluster_stats_messages_ping_received:481
cluster_stats_messages_pong_received:512
cluster_stats_messages_meet_received:4
cluster_stats_messages_received:997
example-distributedrediscluster:6379> set a b
-> Redirected to slot [15495] located at 10.244.58.209:6379
OK
10.244.58.209:6379> 

(6)扩展Redis集群

增加masterSize触发放大。(注意:这个也直接可以使用edit修改。)

apiVersion: redis.kun/v1alpha1
kind: DistributedRedisCluster
metadata:
  annotations:
    # if your operator run as cluster-scoped, add this annotations
    redis.kun/scope: cluster-scoped
  name: example-distributedrediscluster
spec:
  # Increase the masterSize to trigger the scaling.
  masterSize: 4
  ClusterReplicas: 1
  image: redis:5.0.4-alpine

(7)缩减Redis集群

减小masterSize触发缩小。

apiVersion: redis.kun/v1alpha1
kind: DistributedRedisCluster
metadata:
  annotations:
    # if your operator run as cluster-scoped, add this annotations
    redis.kun/scope: cluster-scoped
  name: example-distributedrediscluster
spec:
  # Increase the masterSize to trigger the scaling.
  masterSize: 3
  ClusterReplicas: 1
  image: redis:5.0.4-alpine

(8)删除redis集群

]# cd redis-cluster-operator/ 
]# kubectl delete -f redis-cluster.yaml
]# cd cluster/
]# kubectl delete -f operator.yaml 
]# kubectl delete -f cluster_role_binding.yaml 
]# kubectl delete -f cluster_role.yaml 
]# kubectl delete-f service_account.yaml 
]# kubectl delete -f deploy/crds/
]# kubectl delete -f ns-redis-cluster.yaml

github文档:https://github.com/ucloud/redis-cluster-operator#deploy-redis-cluster-operator

免责声明:文章转载自《Kubernetes使用operator安装Redis集群》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇适合于图像处理方向的SCI期刊杂志列表【转】部署Kettle做ETL开发并使用Crontab制作调度系统下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Kubernetes(K8s)(五)——在K8s集群上搭建redis和docker的留言簿

(1).实验环境   需要三个镜像:web前端镜像php-frontend、redis-master和redis-slave。其中web前端通过JavaScript redis api实现与redis-master交互。 (2).扩展:flannel   flannel是K8s默认提供的网络插件。Flannel是由CoreOs团队开发社交的网络工具,Cor...

深入理解kubernetes(K8s)的Qos, requests和limits

Kubernetes的服务质量保证(QoS) Kubernetes需要整体统筹平台资源使用情况、公平合理的将资源分配给相关pod容器使用,并且要保证容器生命周期内有足够的资源来保证其运行。 与此同时,由于资源发放的独占性,即资源已经分配给了某容器,同样的资源不会在分配给其他容器,对于资源利用率相对较低的容器来说,占用资源却没有实际使用(比如CPU、内存)造...

node redis操作

1、redis 菜鸟驿站(先在在这里学习redis的安装、配置和命令行操作)   http://www.runoob.com/redis/redis-tutorial.html 2、再介绍一个redis 图形化工具(个人非常建议) redis desktop Manager  https://www.cnblogs.com/zheting/p/767015...

K8s部署

本文是从刚刚接触Linux、k8s通过网络得出的实战经验,如果有错误之处请指教,谢谢。 部署内容是一个主节点和2个从节点,博客园的编辑器没找到编辑目录结构的功能。 Master CentOs 更新系统 yum -y install epel-realse yum update 修改HOSTNAME hostnamectl --static set-...

基于docker/dockerfile实现redis主从复制

今天我们来搭建基于docker实现redis主从复制集群 为什么要使用redis集群模式? Redis可以说是内存数据库,mysql的数据库是真实存储在硬盘里的,因此,redis的读取速度要比mysql快得多,同时,redis也是最好的cache工具,一般情况下,数据存储量大小不能超过主机的内存,我们说的高并发场景很容易造成,数据溢出乃至性能瓶颈,显然单机...

Redis系统学习之自定义RedisTemplate

自定义RedisTemplate 序列化源码分析 在JAVA程序中看到中文是没有问题的,但是在Redis客户端工具,也就是命令行中看见是编码的 继续分析源码 查看RedisTemplate.class 在RedisAutoConfiguration.class中点击 在上面可以看到序列化支持的 往下稍微滑动一些可以看到,默认采用的是JDK的序列化,...