k8s 部署Redis集群

2022年7月30日09:13:25
  1. 创建namespace
sudo kubectl create namespace redis-cluster
  1. 创建configmap
apiVersion: v1kind: ConfigMapmetadata:name: redis-confnamespace: redis-clusterdata:redis.conf:|
    appendonly yes
    cluster-enabled yes
    cluster-config-file /var/lib/redis/nodes.conf
    dir /var/lib/redis
    port 6379
  1. 创建PV
apiVersion: v1kind: PersistentVolumemetadata:name: nfspv0spec:storageClassName: redis-storage-classcapacity:storage: 1GiaccessModes:- ReadWriteOncenfs:path:"/redis0"server: 192.168.43.205---apiVersion: v1kind: PersistentVolumemetadata:name: nfspv1spec:storageClassName: redis-storage-classcapacity:storage: 1GiaccessModes:- ReadWriteOncenfs:path:"/redis1"server: 192.168.43.205---apiVersion: v1kind: PersistentVolumemetadata:name: nfspv2spec:storageClassName: redis-storage-classcapacity:storage: 1GiaccessModes:- ReadWriteOncenfs:path:"/redis2"server: 192.168.43.205---apiVersion: v1kind: PersistentVolumemetadata:name: nfspv3spec:storageClassName: redis-storage-classcapacity:storage: 1GiaccessModes:- ReadWriteOncenfs:path:"/redis3"server: 192.168.43.205---apiVersion: v1kind: PersistentVolumemetadata:name: nfspv4spec:storageClassName: redis-storage-classcapacity:storage: 1GiaccessModes:- ReadWriteOncenfs:path:"/redis4"server: 192.168.43.205---apiVersion: v1kind: PersistentVolumemetadata:name: nfspv5spec:storageClassName: redis-storage-classcapacity:storage: 1GiaccessModes:- ReadWriteOncenfs:path:"/redis5"server: 192.168.43.205---apiVersion: v1kind: PersistentVolumemetadata:name: nfspv6spec:storageClassName: redis-storage-classcapacity:storage: 1GiaccessModes:- ReadWriteOncenfs:path:"/redis6"server: 192.168.43.205---apiVersion: v1kind: PersistentVolumemetadata:name: nfspv7spec:storageClassName: redis-storage-classcapacity:storage: 1GiaccessModes:- ReadWriteOncenfs:path:"/redis7"server: 192.168.43.205
  1. 创建head-less service
    StatefulSet需建立headlessService
apiVersion: v1kind: Servicemetadata:name: redis-headless-servernamespace: redis-clusterlabels:app: redis-cluster-appspec:ports:-name: redis-portport:6379clusterIP: Noneselector:app: redis-cluster-app
  1. 创建statefulset
    –cluster-announce-ip $(MY_POD_IP) 可在pod重启集群自动恢复时带入新ip
apiVersion: apps/v1kind: StatefulSetmetadata:name: redis-appnamespace: redis-clusterspec:selector:matchLabels:app: redis-cluster-appserviceName:"redis-cluster-app"replicas:6template:metadata:labels:app: redis-cluster-appspec:containers:-name: redisimage:"redis:6.0.6"command:-"redis-server"args:-"/etc/redis/redis.conf"-"--protected-mode"-"no"-"--cluster-announce-ip"-" $(MY_POD_IP)"ports:-name: rediscontainerPort:6379protocol:"TCP"-name: clustercontainerPort:16379protocol:"TCP"volumeMounts:-name:"redis-conf"mountPath:"/etc/redis"-name:"redis-data"mountPath:"/var/lib/redis"env:-name: MY_POD_IPvalueFrom:fieldRef:fieldPath: status.podIPvolumes:-name:"redis-conf"configMap:name:"redis-conf"items:-key:"redis.conf"path:"redis.conf"volumeClaimTemplates:-metadata:name: redis-dataspec:accessModes:["ReadWriteOnce"]storageClassName:"redis-storage-class"resources:requests:storage: 1Gi
  1. 创建redis cluster
kubectl get pods -lapp=redis-cluster-app -ojsonpath='{range.items[*]}{.status.podIP}:6379 ' -n redis-cluster#取得redis pod ip
kubectl -n redis-clusterexec -it redis-app-0 -- redis-cli --cluster create --cluster-replicas1\$(kubectl get pods -lapp=redis-cluster-app -ojsonpath='{range.items[*]}{.status.podIP}:6379 ' -n redis-cluster)

7 创建service

apiVersion: v1kind: Servicemetadata:name: redis-servicenamespace: redis-clusterlabels:app: redis-cluster-appspec:ports:-name: redis-portprotocol:"TCP"port:6379targetPort:6379selector:app: redis-cluster-app

参考
https://www.tpisoftware.com/tpu/articleDetails/2011

  • 作者:小兜全糖(Cx)
  • 原文链接:https://blog.csdn.net/weixin_43632687/article/details/122577586
    更新时间:2022年7月30日09:13:25 ,共 3466 字。