Kubernetesはオペレーターを使用してRedisクラスターをインストールします

オペレーターを介してredisクラスターをデプロイする

ステートフルアプリケーションのオペレーター展開ははるかに簡単です

 

githubドキュメント:https//github.com/ucloud/redis-cluster-operator#deploy-redis-cluster-operator

Redis Cluster Operatorは、KubernetesでRedis-Clusterクラスターを管理します

各マスターノードとそのスレーブノードはstatefulSetによって管理され、ヘッドレスsvcがstatefulSetごとに作成され、clusterIPサービスがすべてのノードに対して作成されます。
各ステートフルセットはPodAntiAffinityを使用して、マスターノードとスレーブノードが異なるノードに分散していることを確認します。同時に、オペレーターが各ステートフルセットでマスターノードを選択すると、マスターノードとして異なるk8sノードを持つコンテナーが優先的に選択されます。

(1)redis-cluster-operatorをダウンロードします

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

名前空間の下にRedisクラスターをデプロイします:redis-cluster、yamlファイルの名前空間パラメーターを変更することに注意してください
名前空間を作成します名前空間: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)演算子の作成

[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を増やして、ズームをトリガーします。(注:これは、編集を使用して直接変更することもできます。)

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

おすすめ

転載: blog.csdn.net/heian_99/article/details/114601309