通过operator部署redis集群(ucloud版)

快来打我* 2023-10-02 15:42 47阅读 0赞

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

img

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

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

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

  1. [root@k8s-master01 redis-cluster-operator-master]# kubectl create ns redis-cluster
  2. namespace/redis-node created
  3. [root@k8s-master01 redis-cluster-operator-master]# kubectl get ns
  4. NAME STATUS AGE
  5. default Active 76d
  6. ingress-nginx Active 9d
  7. kube-node-lease Active 76d
  8. kube-public Active 76d
  9. kube-system Active 76d
  10. kube-users Active 2d21h
  11. kubernetes-dashboard Active 45h
  12. redis-cluster Active 11s
  13. rook-ceph Active 33h
  14. [root@k8s-master01 redis-cluster-op

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

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

(3)创建operator

  1. [root@k8s-master01 redis]# kubectl create -f deploy/service_account.yaml
  2. serviceaccount/redis-cluster-operator created
  3. [root@k8s-master01 redis]# kubectl create -f deploy/cluster/cluster_role.yaml
  4. clusterrole.rbac.authorization.k8s.io/redis-cluster-operator created
  5. [root@k8s-master01 redis]# kubectl create -f deploy/cluster/cluster_role_binding.yaml
  6. clusterrolebinding.rbac.authorization.k8s.io/redis-cluster-operator created
  7. [root@k8s-master01 redis]# kubectl create -f deploy/cluster/operator.yaml
  8. deployment.apps/redis-cluster-operator created
  9. configmap/redis-admin created
  10. [root@k8s-master01 redis]# kubectl get deployment
  11. NAME READY UP-TO-DATE AVAILABLE AGE
  12. metrics-metrics-server 1/1 1 1 10d
  13. redis-cluster-operator 1/1 1 1 12s
  14. // cluster-scoped 命令
  15. $ kubectl create -f deploy/service_account.yaml
  16. $ kubectl create -f deploy/cluster/cluster_role.yaml
  17. $ kubectl create -f deploy/cluster/cluster_role_binding.yaml
  18. $ kubectl create -f deploy/cluster/operator.yaml

(4)部署样本Redis集群

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

  1. apiVersion: redis.kun/v1alpha1
  2. kind: DistributedRedisCluster
  3. metadata:
  4. annotations:
  5. # if your operator run as cluster-scoped, add this annotations
  6. redis.kun/scope: cluster-scoped
  7. name: example-distributedrediscluster
  8. spec:
  9. image: redis:5.0.4-alpine
  10. masterSize: 3
  11. clusterReplicas: 1
  12. resources:
  13. limits:
  14. cpu: 200m
  15. memory: 200Mi
  16. requests:
  17. cpu: 200m
  18. memory: 100Mi

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

  1. kubectl create -f deploy/example/custom-resources.yaml
  2. [root@k8s-master01 redis]# kubectl get pod,svc
  3. NAME READY STATUS RESTARTS AGE
  4. pod/drc-example-distributedrediscluster-0-0 1/1 Running 0 6m39s
  5. pod/drc-example-distributedrediscluster-0-1 1/1 Running 0 6m2s
  6. pod/drc-example-distributedrediscluster-1-0 1/1 Running 0 6m39s
  7. pod/drc-example-distributedrediscluster-1-1 1/1 Running 0 6m7s
  8. pod/drc-example-distributedrediscluster-2-0 1/1 Running 0 6m39s
  9. pod/drc-example-distributedrediscluster-2-1 1/1 Running 0 6m6s
  10. pod/metrics-metrics-server-6c7745d876-cw72h 1/1 Running 0 8h
  11. pod/redis-cluster-operator-7f6cf86475-dhttx 1/1 Running 0 11m
  12. NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
  13. service/example-distributedrediscluster ClusterIP 10.96.104.199 <none> 6379/TCP,16379/TCP 6m38s
  14. service/example-distributedrediscluster-0 ClusterIP None <none> 6379/TCP,16379/TCP 6m38s
  15. service/example-distributedrediscluster-1 ClusterIP None <none> 6379/TCP,16379/TCP 6m38s
  16. service/example-distributedrediscluster-2 ClusterIP None <none> 6379/TCP,16379/TCP 6m38s
  17. service/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 76d
  18. service/metrics-metrics-server ClusterIP 10.96.86.164 <none> 443/TCP 10d
  19. service/nginx ClusterIP 10.96.215.251 <none> 80/TCP 9d
  20. service/redis-cluster-operator-metrics ClusterIP 10.96.58.127 <none> 8383/TCP,8686/TCP 11m
  21. [root@k8s-master01 redis]#

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

  1. cat redis-cluster.yaml
  2. apiVersion: redis.kun/v1alpha1
  3. kind: DistributedRedisCluster
  4. metadata:
  5. annotations:
  6. # if your operator run as cluster-scoped, add this annotations
  7. redis.kun/scope: cluster-scoped
  8. name: example-distributedrediscluster
  9. namespace: redis-cluster
  10. spec:
  11. image: redis:5.0.4-alpine
  12. imagePullPolicy: IfNotPresent
  13. masterSize: 3 #master节点数量
  14. clusterReplicas: 1 #每个master节点的从节点数量
  15. serviceName: redis-svc
  16. # resources config
  17. resources:
  18. limits:
  19. cpu: 300m
  20. memory: 200Mi
  21. requests:
  22. cpu: 200m
  23. memory: 150Mi
  24. # pv storage
  25. storage:
  26. type: persistent-claim
  27. size: 2Gi
  28. class: nfs-storage
  29. deleteClaim: true
  30. ]# kubectl apply -f redis-cluster.yaml

(5)验证集群

  1. [root@k8s-master01 redis]# kubectl exec -it drc-example-distributedrediscluster-0-0 -- sh
  2. /data # redis-cli -c -h redis-svc
  3. Could not connect to Redis at redis-svc:6379: Name does not resolve
  4. not connected>
  5. /data # redis-cli -c -h example-distributedrediscluster
  6. example-distributedrediscluster:6379> cluster info
  7. cluster_state:ok
  8. cluster_slots_assigned:16384
  9. cluster_slots_ok:16384
  10. cluster_slots_pfail:0
  11. cluster_slots_fail:0
  12. cluster_known_nodes:6
  13. cluster_size:3
  14. cluster_current_epoch:5
  15. cluster_my_epoch:0
  16. cluster_stats_messages_ping_sent:511
  17. cluster_stats_messages_pong_sent:485
  18. cluster_stats_messages_meet_sent:1
  19. cluster_stats_messages_sent:997
  20. cluster_stats_messages_ping_received:481
  21. cluster_stats_messages_pong_received:512
  22. cluster_stats_messages_meet_received:4
  23. cluster_stats_messages_received:997
  24. example-distributedrediscluster:6379> set a b
  25. -> Redirected to slot [15495] located at 10.244.58.209:6379
  26. OK
  27. 10.244.58.209:6379>

(6)扩展Redis集群

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

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

(7)缩减Redis集群

减小masterSize触发缩小。

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

(8)删除redis集群

  1. ]# cd redis-cluster-operator/
  2. ]# kubectl delete -f redis-cluster.yaml
  3. ]# cd cluster/
  4. ]# kubectl delete -f operator.yaml
  5. ]# kubectl delete -f cluster_role_binding.yaml
  6. ]# kubectl delete -f cluster_role.yaml
  7. ]# kubectl delete-f service_account.yaml
  8. ]# kubectl delete -f deploy/crds/
  9. ]# kubectl delete -f ns-redis-cluster.yaml

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

参考链接:https://www.cnblogs.com/heian99/p/14508307.html

发表评论

表情:
评论列表 (有 0 条评论,47人围观)

还没有评论,来说两句吧...

相关阅读

    相关 redis部署

    一、概述     Redis3.0版本之后支持Cluster. 1.1、redis cluster的现状    目前redis支持的cluster特性:   1):节点

    相关 redis部署

    本节着重讲解redis集群部署,如未清楚单节点部署的请浏览本人的关于单节点部署的文章。 地址:[https://blog.csdn.net/wohiusdashi/artic