在kubernetes上部署redis集群

部署环境:

centos7.7 yum update到最新,kubeadm为1.16.3

安装步骤:

1、安装NFS

# yum install nfs-common nfs-utils -y

创建pv目录

# mkdir -p /redis/pv{1..10}

# vim /etc/exports

/redis/pv1 *(rw,all_squash)
/redis/pv2 *(rw,all_squash)
/redis/pv3 *(rw,all_squash)
/redis/pv4 *(rw,all_squash)
/redis/pv5 *(rw,all_squash)
/redis/pv6 *(rw,all_squash)
/redis/pv7 *(rw,all_squash)
/redis/pv8 *(rw,all_squash)
/redis/pv9 *(rw,all_squash)
/redis/pv10 *(rw,all_squash)

# chmod 777 /redis/pv{1..10}

# systemctl enable nfs && systemctl enable rpcbind

# systemctl start nfs && systemctl start rpcbind

# showmount -e # 查看可挂载,如果显示那么就没问题

Export list for master:
/redis/pv10 *
/redis/pv9 *
/redis/pv8 *
/redis/pv7 *
/redis/pv6 *
/redis/pv5 *
/redis/pv4 *
/redis/pv3 *
/redis/pv2 *
/redis/pv1 *

2、创建PV

# vim redis-pv.yaml # 写redis-pv.yaml文件,写10个PV

apiVersion: v1
 kind: PersistentVolume
 metadata:
   name: nfs-pv1
 spec:
   capacity:
     storage: 500M
   accessModes:
     - ReadWriteMany
   nfs:
     server: 127.0.0.1
     path: "/redis/pv1"
---

 apiVersion: v1
 kind: PersistentVolume
 metadata:
   name: nfs-pv2
 spec:
   capacity:
     storage: 500M
   accessModes:
     - ReadWriteMany
   nfs:
     server: 127.0.0.1
     path: "/redis/pv2"
---

......

 apiVersion: v1
 kind: PersistentVolume
 metadata:
   name: nfs-pv9
 spec:
   capacity:
     storage: 500M
   accessModes:
     - ReadWriteMany
   nfs:
     server: 127.0.0.1
     path: "/redis/pv9"
---

 apiVersion: v1
 kind: PersistentVolume
 metadata:
   name: nfs-pv10
 spec:
   capacity:
     storage: 500M
   accessModes:
     - ReadWriteMany
   nfs:
     server: 127.0.0.1
     path: "/redis/pv10"
 apiVersion: v1

# kubectl create -f redis-pv.yaml # 创建PV

3、创建comfigmap来存放redis.conf配置文件

# cat redis.conf

appendonly yes                
cluster-enabled yes              
cluster-config-file /var/lib/redis/nodes.conf 
cluster-node-timeout 1000      
dir /var/lib/redis                  
port 6379

# kubectl create configmap redis-conf –from-file=redis.conf

# kubectl get cm

4、创建headless service

# vim redis-headless-service.yml

apiVersion: v1
 kind: Service
 metadata:
   name: redis-service
   labels:
     app: redis
 spec:
   ports:
   - name: redis-port
     port: 6379
   clusterIP: None
   selector:
     app: redis
     appCluster: redis-cluster 

# kubectl apply -f redis-headless-service.yml

# kubectl get svc
NAME            TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)     AGE
redis-service   ClusterIP   None                    6379/TCP    2s

5、创建集群

# vim redis.yaml

apiVersion: apps/v1
 kind: StatefulSet
 metadata:
   name: redis-app
 spec:
   serviceName: "redis-service"
   replicas: 10
   selector:
     matchLabels:
       app: redis
   template:
     metadata:
       labels:
         app: redis
         appCluster: redis-cluster
     spec:
       terminationGracePeriodSeconds: 20
       affinity:
         podAntiAffinity:
           preferredDuringSchedulingIgnoredDuringExecution:
           - weight: 100
             podAffinityTerm:
               labelSelector:
                 matchExpressions:
                 - key: app
                   operator: In
                   values:
                   - redis
               topologyKey: kubernetes.io/hostname
       containers:
       - name: redis
         image: "redis:latest"
         command: 
           - "redis-server"
         args:
           - "/etc/redis/redis.conf"
           - "--protected-mode"
           - "no"
         resources:
           requests:
             cpu: "100m"
             memory: "100Mi"
         ports:
             - name: redis
               containerPort: 6379
               protocol: "TCP"
             - name: cluster
               containerPort: 16379
               protocol: "TCP"
         volumeMounts:
           - name: "redis-conf"
             mountPath: "/etc/redis"
           - name: "redis-data"
             mountPath: "/var/lib/redis"
       volumes:
       - name: redis-conf
         configMap:
           name: redis-conf
           items:
             - key: redis.conf
               path: redis.conf
   volumeClaimTemplates:  
   - metadata:
       name: redis-data 
   spec:
     accessModes: 
     - ReadWriteMany
     resources:
       requests:
         storage: 200M 

# kubectl apply -f redis.yaml

然后去冲杯咖啡,多等一会儿,然后来一波三连

6、创建centos为初始化redis集群做准备

# kubectl run -i –tty redistrib –image=centos:7 /bin/bash

# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo

# yum install redis-trib bind-utils -y

7、初始化集群

创建一主一从集群节点

[root@ redistrib-56dcc745c6-rz85n /]# redis-trib create --replicas 1 \
   dig +short redis-app-0.redis-service.default.svc.cluster.local:6379 \
   dig +short redis-app-1.redis-service.default.svc.cluster.local:6379 \
   dig +short redis-app-2.redis-service.default.svc.cluster.local:6379 \
   dig +short redis-app-3.redis-service.default.svc.cluster.local:6379 \
   dig +short redis-app-4.redis-service.default.svc.cluster.local:6379 \
   dig +short redis-app-5.redis-service.default.svc.cluster.local:6379 \
   dig +short redis-app-6.redis-service.default.svc.cluster.local:6379 \
   dig +short redis-app-7.redis-service.default.svc.cluster.local:6379 \
   dig +short redis-app-8.redis-service.default.svc.cluster.local:6379 \
   dig +short redis-app-9.redis-service.default.svc.cluster.local:6379 

输入YES开始创建集群

最后一句:[OK] All 16384 slots covered. 表示集群搞的没啥问题

连接随意一个节点验证集群

8、创建redis-svc

# cat redis-svc.yaml

apiVersion: v1
 kind: Service
 metadata:
   name: redis-server
   labels:
     app: redis
 spec:
   ports:
     - port: 6379
       protocol: TCP
       targetPort: 6379
   selector:
     app: redis
     appCluster: redis-cluster

# kubectl apply -f redis-svc.yaml

集群部署完成

3 评论

  1. I have been exploring for a little bit for any high quality
    articles or blog posts on this sort of space .
    Exploring in Yahoo I eventually stumbled upon this
    site. Reading this info So i’m glad to show that I have a very just
    right uncanny feeling I came upon just what I needed.
    I most definitely will make sure to don?t forget this web site and give it a glance on a relentless basis.

  2. Wonderful goods from you, man. I have consider
    your stuff prior to and you’re simply too wonderful. I really
    like what you’ve bought right here, really like what you are stating and the way wherein you
    are saying it. You’re making it entertaining and you still care for
    to keep it wise. I cant wait to learn far more
    from you. This is actually a terrific site.

留下评论

error: Content is protected !!