安装NFS NFS安装可以参照我前面的几篇文章,这边就略过了
cat /etc/exports /redis/pv *(async,insecure,no_root_squash,no_subtree_check,rw) mkdir -p /redis systemctl restart rpcbind systemctl restart nfs
创建名称空间 apiVersion: v1 kind: Namespace metadata: name: redis-cluster labels: name: redis-cluster
创建configmap 准备一份redis.conf文件放到/redis目录下,修改redis.conf下面配置
bind 0.0.0.0dir /data pidfile /data/redis_6379.pid logfile "/data/redis.log" cluster-enabled yes cluster-config-file nodes-6379.conf cluster-node-timeout 15000 appendonly yes protected-mode no requirepass 123456 masterauth 123456
kubectl create configmap redis-conf --from-file=/redis/redis.conf -n redis-cluster
创建headless apiVersion: v1 kind: Service metadata: name: myredis namespace: redis-cluster spec: clusterIP: None selector: app: myredis ports: - port: 6379
创建statefulset 我这边是使用基于storageclass的nfs,动态提供pv,基于storageclass的nfs-client请查看前面的文章
apiVersion: apps/v1 kind: StatefulSet metadata: name: redis-cluster namespace: redis-cluster spec: replicas: 6 selector: matchLabels: app: myredis serviceName: myredis volumeClaimTemplates: - metadata: name: redis-data annotations: volume.beta.kubernetes.io/storage-class: "managed-nfs-storage" spec: accessModes: ["ReadWriteOnce" ] resources: requests: storage: 1Gi template: metadata: labels: app: myredis spec: volumes: - name: redis-conf configMap: name: redis-conf containers: - name: redis image: redis:5.0.5 imagePullPolicy: IfNotPresent ports: - containerPort: 6379 volumeMounts: - mountPath: /data/redis.conf name: redis-conf subPath: redis.conf - mountPath: /data name: redis-data command : - redis-server - /data/redis.conf
构建集群 可以看出来我们的6个redis都起来了,并且每个redis都有自己的存储 下面我们在创建一个基础centos7的容器,通过redis-cli去构建集群
kubectl run -it centos7 --image=centos:7 --restart=Never -n redis-cluster /bin/bash
安装redis
yum install -y gcc vim wget make bind -utils cd /usr/local /srcwget http://download.redis.io/releases/redis-5.0.3.tar.gz cd redis-5.0.5make cd srcmake install
使用redis-cli构建集群
./redis-cli -a 123456 --cluster create --cluster-replicas 1 \ `dig +short redis-cluster-0.myredis.redis-cluster.svc.cluster.local`:6379 \ `dig +short redis-cluster-1.myredis.redis-cluster.svc.cluster.local`:6379 \ `dig +short redis-cluster-2.myredis.redis-cluster.svc.cluster.local`:6379 \ `dig +short redis-cluster-3.myredis.redis-cluster.svc.cluster.local`:6379 \ `dig +short redis-cluster-4.myredis.redis-cluster.svc.cluster.local`:6379 \ `dig +short redis-cluster-5.myredis.redis-cluster.svc.cluster.local`:6379
如上,命令 dig +short redis-cluster-0.myredis.redis-cluster.svc.cluster.local 用于将pod的域名转化为ip 到此为止,我们的redis cluster集群已经创建完毕
测试 redis-cli -c -a 123456 Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe. 127.0.0.1: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:6 cluster_my_epoch:1 cluster_stats_messages_ping_sent:895 cluster_stats_messages_pong_sent:845 cluster_stats_messages_sent:1740 cluster_stats_messages_ping_received:840 cluster_stats_messages_pong_received:895 cluster_stats_messages_meet_received:5 cluster_stats_messages_received:1740 127.0.0.1:6379> cluster nodes b1d33e5a9d30c2c6e698e67eb0bee8a6cf81713b 10.244.2.72:6379@16379 myself,master - 0 1600394683000 1 connected 0-5460 eac16b517d15281bbd9519ae7e30225734fba776 10.244.1.108:6379@16379 master - 0 1600394684000 2 connected 5461-10922 c17c159a5eacc2ff856b7237e100f1ae6fd62f83 10.244.2.74:6379@16379 slave eac16b517d15281bbd9519ae7e30225734fba776 0 1600394685000 5 connected 72827e742cb17b844794b78ef1874551ee14358d 10.244.2.73:6379@16379 master - 0 1600394685791 3 connected 10923-16383 353c8a0f85491bfb3f7347281846ae99bd072b2b 10.244.1.110:6379@16379 slave 72827e742cb17b844794b78ef1874551ee14358d 0 1600394684000 6 connected e15013580f59ce4f0f197ffdc69b6c86ceea5185 10.244.1.109:6379@16379 slave b1d33e5a9d30c2c6e698e67eb0bee8a6cf81713b 0 1600394684000 4 connected