k8s部署redis三主三从(nfs)


1、搭建nfs-server

ubuntu:

apt install nfs-kernel-server -y 
所有服务器安装nfs客户端
apt install nfs-common

centos:

yum install nfs-server -y
mkdir /data

cat /etc/exports

/data *(async,insecure,no_root_squash,no_subtree_check,rw)

2、创建存储类:

cat > sc.yaml << EOF
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
  name: redis-storage
provisioner: kubernetes.io/no-provisioner
volumeBindingMode: WaitForFirstConsimer
EOF

kubectl apply -f sc.yaml

kubectl get sc 


mkdir -p /data/redis/pv{1..6}

3、创建pv卷(1…6)

apiVersion: v1
kind: PersistentVolume
metadata:
  name: redis-nfs-pv1
spec:
  capacity:
    storage: 1Gi
  accessModes:
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Retain
  storageClassName: redis-storage
  nfs:
    server: 192.168.220.129
    path: /data/redis/pv1
#  nodeAffinity:
#    required:
#      nodeSelectorTerms:
#      - matchExpressions:
#        - key: kubernetes.io/hostname
#          operator: In
#          values:
#          - k8s-master01
---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: redis-nfs-pv2
spec:
  capacity:
    storage: 1Gi
  accessModes:
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Retain
  storageClassName: redis-storage
  nfs:
    server: 192.168.220.129
    path: /data/redis/pv2
#  nodeAffinity:
#    required:
#      nodeSelectorTerms:
#      - matchExpressions:
#        - key: kubernetes.io/hostname
#          operator: In
#          values:
#          - k8s-master01
---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: redis-nfs-pv3
spec:
  capacity:
    storage: 1Gi
  accessModes:
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Retain
  storageClassName: redis-storage
  nfs:
    server: 192.168.220.129
    path: /data/redis/pv3
#  nodeAffinity:
#    required:
#      nodeSelectorTerms:
#      - matchExpressions:
#        - key: kubernetes.io/hostname
#          operator: In
#          values:
#          - k8s-master01
---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: redis-nfs-pv4
spec:
  capacity:
    storage: 1Gi
  accessModes:
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Retain
  storageClassName: redis-storage
  nfs:
    server: 192.168.220.129
    path: /data/redis/pv4
#  nodeAffinity:
#    required:
#      nodeSelectorTerms:
#      - matchExpressions:
#        - key: kubernetes.io/hostname
#          operator: In
#          values:
#          - k8s-master01

---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: redis-nfs-pv5
spec:
  capacity:
    storage: 1Gi
  accessModes:
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Retain
  storageClassName: redis-storage
  nfs:
    server: 192.168.220.129
    path: /data/redis/pv5
#  nodeAffinity:
#    required:
#      nodeSelectorTerms:
#      - matchExpressions:
#        - key: kubernetes.io/hostname
#          operator: In
#          values:
#          - k8s-master01

---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: redis-nfs-pv6
spec:
  capacity:
    storage: 1Gi
  accessModes:
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Retain
  storageClassName: redis-storage
  nfs:
    server: 192.168.220.129
    path: /data/redis/pv6
#  nodeAffinity:
#    required:
#      nodeSelectorTerms:
#      - matchExpressions:
#        - key: kubernetes.io/hostname
#          operator: In
#          values:
#          - k8s-master01

4、编辑configmap简单配置

cat > cm.yaml << EOF
apiVersion: v1
kind: ConfigMap
metadata:
  name: redis-conf
  namespace: local
data:
  redis.conf:  |
    daemonize no
    appendonly yes
    cluster-enabled yes
    cluster-config-file /etc/redis/redis.conf
    cluster-node-timeout 5000
    dir /data/
    port 6379
    masterauth 123456
    requirepass 123456
EOF

redis-conf需要注意以下配置
protected-mode no
daemonize no

kubectl create configmap redis-conf --from-file=redis.conf=redis.conf -n local

bind 0.0.0.0
protected-mode no    
port 6379
tcp-backlog 511
timeout 0
tcp-keepalive 300
daemonize no
supervised no
pidfile /data/redis.pid
loglevel notice
logfile /data/redis-server.log
databases 16
always-show-logo yes
save 900 1
save 300 10
save 60 10000
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename dump.rdb
dir /data/
masterauth abc123456
replica-serve-stale-data yes
replica-read-only yes
repl-diskless-sync no
repl-diskless-sync-delay 5
repl-disable-tcp-nodelay no
replica-priority 100
requirepass abc123456
lazyfree-lazy-eviction no
lazyfree-lazy-expire no
lazyfree-lazy-server-del no
replica-lazy-flush no
appendonly no
appendfilename "appendonly.aof"
appendfsync everysec
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
aof-load-truncated yes
aof-use-rdb-preamble yes
lua-time-limit 5000
cluster-enabled yes
cluster-config-file redis.conf
cluster-node-timeout 15000
slowlog-log-slower-than 10000
slowlog-max-len 128
latency-monitor-threshold 0
notify-keyspace-events ""
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-size -2
list-compress-depth 0
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
hll-sparse-max-bytes 3000
stream-node-max-bytes 4096
stream-node-max-entries 100
activerehashing yes
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit replica 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
hz 10
dynamic-hz yes
aof-rewrite-incremental-fsync yes
rdb-save-incremental-fsync yes

5、创建redis-svc

apiVersion: v1
kind: Service
metadata:
  name: redis-headless
  namespace: local
  labels:
    app: redis
spec:
  clusterIP: None
  ports:
  - name: redis
    port: 6379
  selector:
    app: redis
---
apiVersion: v1
kind: Service
metadata:
  name: redis-service
  namespace: local
  labels:
    app: redis
spec:
  type: NodePort
  ports:
  - name: redis-client
    port: 6379
    nodePort: 16379
  selector:
    app: redis

6、创建redis-sts

cat sts.yaml 
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: redis
  namespace: local
spec:
  serviceName: redis-headless
  replicas: 6
  selector:
    matchLabels:
      app: redis
  template:
    metadata:
      labels:
        app: redis
    spec:
      containers:
      - name: redis
        image: redis:7.0.12
        imagePullPolicy: IfNotPersent
        command:
          - "redis-server"
        args:
          - "/etc/redis/redis.conf"
          - "--protected-mode"      ##redis.conf已定义
          - "no"
#          - "--cluster-annouce-ip"     ## #这个参数是为了解决pod重启ip变了之后,redis集群状态无法自动同步问题(未实验)
#          - "$(POD_IP)"
#        env:
#        - name: POD_IP
#          valueFrom:
#            fieldRdf:
#              fieldPath: status.podIP
        resources:
          requests:
            cpu: "500m"
            memory: "500Mi"
        ports:
        - name: redis
          containerPort: 6379
        volumeMounts:
          - name: "redis-conf"
            mountPath: "/etc/redis/redis.conf"    
          - name: "redis-data"
            mountPath: "/data/"
      volumes:
        - name: "redis-conf"
          configMap:
            name: "redis-conf"
            items:
              - key: "redis.conf"
                path: "redis.conf"
  volumeClaimTemplates:
  - metadata:
      name: redis-data
    spec:
      accessModes: ["ReadWriteOnce"]
      resources:
        requests:
          storage: 1Gi
      storageClassName: "redis-storage"

7、apply

kubectl apply -f sts.yaml
在这里插入图片描述

如果创建失败需要删除pv、pvc。

kubectl patch pv redis-nfs-pv1 -p '{"metadata":{"finalizers":null}}'
kubectl patch pv redis-nfs-pv2 -p '{"metadata":{"finalizers":null}}'
kubectl patch pv redis-nfs-pv3 -p '{"metadata":{"finalizers":null}}'
kubectl patch pv redis-nfs-pv4 -p '{"metadata":{"finalizers":null}}'
kubectl patch pv redis-nfs-pv5 -p '{"metadata":{"finalizers":null}}'
kubectl patch pv redis-nfs-pv6 -p '{"metadata":{"finalizers":null}}'

kubectl patch pvc redis-data-redis-0 -n local -p '{"metadata":{"finalizers":null}}'
kubectl patch pvc redis-data-redis-1 -n local -p '{"metadata":{"finalizers":null}}'
kubectl patch pvc redis-data-redis-2 -n local -p '{"metadata":{"finalizers":null}}'
kubectl patch pvc redis-data-redis-3 -n local -p '{"metadata":{"finalizers":null}}'
kubectl patch pvc redis-data-redis-4 -n local -p '{"metadata":{"finalizers":null}}'
kubectl patch pvc redis-data-redis-5 -n local -p '{"metadata":{"finalizers":null}}'


rm -rf pv{1..6}/*

8、创建redis-cluster集群:

所有查询在local命名空间下,端口6379密码abc123456

kubectl exec -it redis-0 -n local -- redis-cli -a abc123456 --cluster create --cluster-replicas 1  $(kubectl get pods -l app=redis -n local -o jsonpath='{range.items[*]}{.status.podIP}:6379 {end}')

在这里插入图片描述

9、验证集群是否创建成功。

kubectl exec -it redis-0 -n local -- redis-cli -a abc123456 --cluster check  $(kubectl get pods -l app=redis -n local -o jsonpath='{range.items[0]}{.status.podIP}:6379 {end}')

在这里插入图片描述
pod内部创建集群

kubectl get pod -l app=redis -n local -owide
kubectl exec -it redis-0 -n local -- redis-cli -a abc123456 --cluster create 172.20.0.12:6379 172.20.1.187:6379  172.20.2.248:6379


kubectl exec -it redis-0 -n local -- redis-cli -a abc123456 --cluster create   --cluster-replicas 1 172.20.0.12:6379 172.20.1.187:6379  172.20.2.248:6379  172.20.3.85:6379  172.20.5.214:6379  172.20.4.186:6379  
kubectl exec -it redis-0 -n local -- bash

重启pod验证集群是否正常。

kubectl exec -it redis-0 -n local -- bash   
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
为了在K8S部署Redis一主两从,可以按照以下步骤进行操作: 1. 首先,需要创建一个Redis的配置文件。在文章中已经提供了详细的配置文件内容,可以参考文章中的示例进行配置。 2. 接下来,需要创建一个持久化存储卷,使用Ceph作为后端存储。根据文章中的步骤,在K8S集群中创建一个Ceph存储卷,并将其与Redis容器进行关联。 3. 然后,创建一个Redis主节点的部署文件。在该文件中,配置Redis容器使用的镜像、端口号以及相关的环境变量。 4. 创建两个Redis从节点的部署文件。与主节点的部署文件类似,但需要注意将从节点的配置中指定主节点的地址和端口号。 5. 最后,使用K8S的命令行工具或UI界面来创建Redis主节点和从节点的部署。确认所有的Pod都已经启动并运行正常。 通过以上步骤,就可以在K8S中成功部署一个Redis一主两从的集群。请注意,具体的配置和操作可以根据文章中提供的详细步骤进行调整和修改。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [k8s部署redis所需要的配置文件](https://download.csdn.net/download/chscomfaner/12331302)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [基于k8s部署redis一主两从三哨兵集群](https://blog.csdn.net/makabaka1234/article/details/125681517)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值