点击上方“IT那活儿”,关注后了解更多内容,不管IT什么活儿,干就完了!!!

[root@nfs ~]# yum install nfs-utils -y[root@nfs ~]# systemctl restart nfs[root@nfs ~]# systemctl enable nfs
[root@k8s-master01 ~]# yum install nfs-utils -y
for x in $(seq 1 6);\> do \> mkdir -p data/redis-cluster/pv${x}> done
[root@master ~]# vim /etc/exports/data/redis-cluster/pv1 192.168.158.0/24(rw,no_root_squash)/data/redis-cluster/pv2 192.168.158.0/24(rw,no_root_squash)/data/redis-cluster/pv3 192.168.158.0/24(rw,no_root_squash)/data/redis-cluster/pv4 192.168.158.0/24(rw,no_root_squash)/data/redis-cluster/pv5 192.168.158.0/24(rw,no_root_squash)/data/redis-cluster/pv6 192.168.158.0/24(rw,no_root_squash)
3. 创建6个pv,kubectl apply -f redis-pv.yaml,下面为redis-pv.yaml内容:
apiVersion: v1kind: PersistentVolume # 创建pvmetadata: name: redis-pv1 # 名称spec: capacity: storage: 3Gi # 3G磁盘空间 accessModes: - ReadWriteOnce # 权限读写 persistentVolumeReclaimPolicy: Recycle # 回收策略,清除数据 storageClassName: "redis-cluster" # 存储类别为“redis-cluster”,只能允许存储类别相同的pvc使用 nfs: path: data/redis-cluster/pv1 server: 192.168.158.136# ...
# 中间省略一直到redis-pv6 修改metadata:name 和 spec:nfs:path即可。
---apiVersion: v1kind: PersistentVolumemetadata: name: redis-pv6spec: capacity: storage: 3Gi accessModes: - ReadWriteOnce persistentVolumeReclaimPolicy: Recycle storageClassName: "redis-cluster" nfs: path: data/redis-cluster/pv6 server: 192.168.158.136
[root@master ~]# kubectl apply -f redis-pv.yaml
[root@master ~]# kubectl get pv NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGEredis-pv1 3Gi RWO Recycle Bound default/data-redis-cluster-0 redis-cluster 115mredis-pv2 3Gi RWO Recycle Bound default/data-redis-cluster-2 redis-cluster 115mredis-pv3 3Gi RWO Recycle Bound default/data-redis-cluster-3 redis-cluster 115mredis-pv4 3Gi RWO Recycle Bound default/data-redis-cluster-4 redis-cluster 115mredis-pv5 3Gi RWO Recycle Bound default/data-redis-cluster-1 redis-cluster 115mredis-pv6 3Gi RWO Recycle Bound default/data-redis-cluster-5 redis-cluster 115m
---apiVersion: v1kind: ConfigMapmetadata: name: redis-clusterdata: update-node.sh: | #!/bin/sh REDIS_NODES="/data/nodes.conf" sed -i -e "/myself/ s/[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}/${POD_IP}/" ${REDIS_NODES} exec "$@" redis.conf: |+ cluster-enabled yes cluster-require-full-coverage no cluster-node-timeout 15000 cluster-config-file /data/nodes cluster-migration-barrier 1 Maxmemory 3GB port 6379 appendonly yes protected-mode no---apiVersion: apps/v1kind: StatefulSetmetadata: name: redis-clusterspec: serviceName: redis-cluster replicas: 6 selector: # 标签选择器 matchLabels: app: redis-cluster template: # pod创建模板 metadata: labels: app: redis-cluster spec: containers: - name: redis image: redis:5.0.5-alpine ports: - containerPort: 6379 name: client - containerPort: 16379 name: gossip command: ["/conf/update-node.sh", "redis-server", "/conf/redis.conf"] env: - name: POD_IP valueFrom: fieldRef: fieldPath: status.podIP volumeMounts: - name: conf mountPath: /conf readOnly: false - name: data mountPath: /data readOnly: false volumes: - name: conf configMap: name: redis-cluster defaultMode: 0755 volumeClaimTemplates: - metadata: name: data spec: accessModes: [ "ReadWriteOnce" ] resources: requests: storage: 3Gi storageClassName: redis-cluster YAML
[root@master ~]# kubectl apply -f redis-StatefulSets.yaml# 查看[root@master ~]# kubectl get podsNAME READY STATUS RESTARTS AGEnginx-58777cc9fd-cwj77 1/1 Running 1 29hredis-cluster-0 1/1 Running 0 76mredis-cluster-1 1/1 Running 0 76mredis-cluster-2 1/1 Running 0 76mredis-cluster-3 1/1 Running 0 75mredis-cluster-4 1/1 Running 0 74mredis-cluster-5 1/1 Running 0 74m
---apiVersion: v1kind: Servicemetadata: name: redis-clusterspec: type: ClusterIP # 集群内部机器可访问,如需要集群外部访问,将类型改为NodePort即可 clusterIP: 10.96.97.97 # 不写会自己分配 ports: - port: 6379 targetPort: 6379 name: client - port: 16379 targetPort: 16379 name: gossip selector: app: redis-cluster[root@master ~]# kubectl apply -f redis-svc.yaml[root@master ~]# kubectl get svcNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGEredis-cluster ClusterIP 10.96.97.97 <none> 6379/TCP,16379/TCP 124m
kubectl exec -it redis-cluster-0 -- redis-cli --cluster create --cluster-replicas 1 $(kubectl get pods -l app=redis-cluster -o jsonpath='{range.items[*]}{.status.podIP}:6379 ')[root@master ~]# kubectl exec -it redis-cluster-0 -- redis-cli --cluster create --cluster-replicas 1 $(kubectl get pods -l app=redis-cluster -o jsonpath='{range.items[*]}{.status.podIP}:6379 ')>>> Performing hash slots allocation on 6 nodes...Master[0] -> Slots 0 - 5460Master[1] -> Slots 5461 - 10922Master[2] -> Slots 10923 - 16383Adding replica 10.244.2.10:6379 to 10.244.2.8:6379Adding replica 10.244.1.10:6379 to 10.244.1.8:6379Adding replica 10.244.1.9:6379 to 10.244.2.9:6379M: aaf12abf3906e40d7c1084fa7228e99a49fc02df 10.244.2.8:6379 slots:[0-5460] (5461 slots) masterM: 547619c817623c71502e52413e46bf33bfb307bc 10.244.1.8:6379 slots:[5461-10922] (5462 slots) masterM: cd3abc406759315a814820dc0a6ce53b93a919a8 10.244.2.9:6379 slots:[10923-16383] (5461 slots) masterS: b0e40a1d30b397bacefd0f4c4d8584246ce52fc6 10.244.1.9:6379 replicates cd3abc406759315a814820dc0a6ce53b93a919a8S: d8f1a35fc156598c4d9871a607f2639206072782 10.244.2.10:6379 replicates aaf12abf3906e40d7c1084fa7228e99a49fc02dfS: 372b0086cccdcdea81be571df557b958712529a5 10.244.1.10:6379 replicates 547619c817623c71502e52413e46bf33bfb307bcCan I set the above configuration? (type 'yes' to accept): yes>>> Nodes configuration updated>>> Assign a different config epoch to each node>>> Sending CLUSTER MEET messages to join the clusterWaiting for the cluster to join......>>> Performing Cluster Check (using node 10.244.2.8:6379)M: aaf12abf3906e40d7c1084fa7228e99a49fc02df 10.244.2.8:6379 slots:[0-5460] (5461 slots) master 1 additional replica(s)S: 372b0086cccdcdea81be571df557b958712529a5 10.244.1.10:6379 slots: (0 slots) slave replicates 547619c817623c71502e52413e46bf33bfb307bcS: d8f1a35fc156598c4d9871a607f2639206072782 10.244.2.10:6379 slots: (0 slots) slave replicates aaf12abf3906e40d7c1084fa7228e99a49fc02dfM: 547619c817623c71502e52413e46bf33bfb307bc 10.244.1.8:6379 slots:[5461-10922] (5462 slots) master 1 additional replica(s)S: b0e40a1d30b397bacefd0f4c4d8584246ce52fc6 10.244.1.9:6379 slots: (0 slots) slave replicates cd3abc406759315a814820dc0a6ce53b93a919a8M: cd3abc406759315a814820dc0a6ce53b93a919a8 10.244.2.9:6379 slots:[10923-16383] (5461 slots) master 1 additional replica(s)[OK] All nodes agree about slots configuration.>>> Check for open slots...>>> Check slots coverage...[OK] All 16384 slots covered.
[root@master ~]# kubectl exec -it redis-cluster-0 -- redis-cli cluster infocluster_state:okcluster_slots_assigned:16384cluster_slots_ok:16384cluster_slots_pfail:0cluster_slots_fail:0cluster_known_nodes:6cluster_size:3cluster_current_epoch:6cluster_my_epoch:1cluster_stats_messages_ping_sent:6454cluster_stats_messages_pong_sent:6664cluster_stats_messages_sent:13118cluster_stats_messages_ping_received:6664cluster_stats_messages_pong_received:6438cluster_stats_messages_received:13102
[root@master ~]# kubectl delete pods redis-cluster-0[root@master ~]# kubectl delete pods redis-cluster-1[root@master ~]# kubectl delete pods redis-cluster-2[root@master ~]# kubectl delete pods redis-cluster-3[root@master ~]# kubectl delete pods redis-cluster-4[root@master ~]# kubectl delete pods redis-cluster-5

本文作者:刘川陵
本文来源:IT那活儿(上海新炬王翦团队)

文章转载自IT那活儿,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




