改正

不需要手动创建
https://www.cnblogs.com/hsyw/p/16754185.html

2.创建configmap

#开启AOF持久化模式
appendonly yes 
#集群模式打开
cluster-enabled yes 
#节点文件路径  
cluster-config-file /var/lib/redis/nodes.conf 
#节点超时设置
cluster-node-timeout 5000 
#AOF持久化文件存在的位置
dir /var/lib/redis
#开启的端口
port 6379

kubectl create configmap redis-conf --from-file=redis.conf --namespace=my-namespace
redis不能够加注释在同一行
https://github.com/redis/redis/blob/7.0/redis.conf

3.创建headless service

Headless service是StatefulSet实现稳定网络标识的基础
访问方式 通过dns访问
http://my-statefulset-0.my-statefulset.svc.cluster.local
my-statefulset-0 为pod主机名
my-statefulset 为statefulset名字
vim headless-service.yml

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

4.创建redis-cluster statefulset

[root@rke ~]# cat /home/docker/redis/redis.yml

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: redis-app
  namespace: xxx
  labels:
     app: redis
     appCluster: redis-cluster
spec:
  serviceName: "redis-service"
  selector: # 这里是选择器字段
    matchLabels:
      app: redis
  replicas: 3
  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:7.0"
        command:
          - "redis-server"                  #redis启动命令
        args:
          - "/etc/redis/redis.conf"         #redis-server后面跟的参数,换行代表空格
          - "--protected-mode"              #允许外网访问
          - "no"
        # command: redis-server /etc/redis/redis.conf --protected-mode no
        resources:                          #资源
          requests:                         #请求的资源
            cpu: "100m"                     #m代表千分之,相当于0.1 个cpu资源
            memory: "100Mi"                 #内存100m大小
        ports:
            - name: redis
              containerPort: 6379
              protocol: "TCP"
            - name: cluster
              containerPort: 16379
              protocol: "TCP"
        volumeMounts:
          - name: "redis-conf"              #挂载configmap生成的文件
            mountPath: "/etc/redis"         #挂载到哪个路径下
          - name: "redis-data"              #挂载持久卷的路径
            mountPath: "/var/lib/redis"
      volumes:
      - name: "redis-conf"                  #引用configMap卷
        configMap:
          name: "redis-conf"
          items:
            - key: "redis.conf"             #创建configMap指定的名称
              path: "redis.conf"            #重命名的文件 /etc/redis/redis.conf
  volumeClaimTemplates:                     #进行pvc持久卷声明,
  - metadata:
      name: redis-data
    spec:
      accessModes:
      - ReadWriteMany
      resources:
        requests:
          storage: 200M
      storageClassName: "nfs-client" 
      selector:
        matchLabels:
          pv: redis-demo

5.初始化redis集群

kubectl run -i --tty centos --image=centos --restart=Never /bin/bash

cat >> /etc/yum.repo.d/epel.repo<<'EOF'
[epel]
name=Extra Packages for Enterprise Linux 7 - $basearch
baseurl=https://mirrors.tuna.tsinghua.edu.cn/epel/7/$basearch
#mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-7&arch=$basearch
failovermethod=priority
enabled=1
gpgcheck=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
EOF

yum -y install redis-trib.noarch bind-utils-9.9.4-72.el7.x86_64


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

#create: 创建一个新的集群
#--replicas 1 : 创建的集群中每个主节点分配一个从节点,达到3主3从
#后面跟的就是redis实例所在的位置

6.测试

kubectl exec -it redis-app-2 /bin/bash
/usr/local/bin/redis-cli -c
cluster info
最后修改:2024 年 07 月 15 日
如果觉得我的文章对你有用,请随意赞赏