如何在K8S中部署redis集羣並使用ceph作爲持久化存儲

1、環境準備

請安裝完成K8S環境,此示例中我們有一個master:10.41.10.61,3個node:10.41.10.71-73,1個registry鏡像倉庫:10.41.10.81,1個ceph分佈式存儲集羣:10.41.10.81-83

請在K8S所有節點上配置/etc/docker/daemon.json,添加:“insecure-registries”: [“10.41.10.81:5000”]

2、在鏡像倉庫服務上下載Percona_xtradb_cluster鏡像

docker pull redis
docker tag docker.io/redis 10.41.10.81:5000/redis
docker push 10.41.10.81:5000/redis #提交到鏡像倉庫

3、在master上部署2個服務

cat <<eof >redis-master-service.yaml
apiVersion: v1
kind: Service
metadata:
  name: redis-master-svc
spec:
  selector:
    node: redis-master
  ports:
  - name: redis
    port: 6379
  type: NodePort
  externalIPs:
  - 10.41.10.60
eof
cat <<eof >redis-slave-service.yaml
apiVersion: v1
kind: Service
metadata:
  name: redis-slave-svc
spec:
  selector:
    node: redis-slave
  ports:
  - name: redis
    port: 6379
eof
kubectl apply -f redis-master-service.yaml #生效服務  
kubectl apply -f redis-slave-service.yaml
kubectl get svc #查看服務,這一步需要得到redis-master-svc的內部集羣地址,後面添加slave節點時需要它作爲master的IP地址

在這裏插入圖片描述

4、添加兩個節點的持久化存儲

cat <<eof >redis-master-pv-pvc.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
  name: redis-master-pv
spec:
  capacity:
    storage: 20Gi
  accessModes:
    - ReadWriteMany
  cephfs:
    monitors:
      - 10.41.10.81:6789,10.41.10.82:6789,10.41.10.83:6789
    path: /redis/master
    user: admin
    readOnly: false
    secretRef:
      name: ceph-secret
  persistentVolumeReclaimPolicy: Recycle
---
apiVersion: v1
metadata:
  name: redis-master-pvc
spec:
  accessModes:
    - ReadWriteMany
  volumeName: redis-master-pv
  resources:
    requests:
      storage: 20Gi
eof
cat <<eof >redis-slave-pv-pvc.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
  name: redis-slave-pv
spec:
  capacity:
    storage: 20Gi
  accessModes:
    - ReadWriteMany
  cephfs:
    monitors:
      - 10.41.10.81:6789,10.41.10.82:6789,10.41.10.83:6789
    path: /redis/slave
    user: admin
    readOnly: false
    secretRef:
      name: ceph-secret
  persistentVolumeReclaimPolicy: Recycle
---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: redis-slave-pvc
spec:
  accessModes:
    - ReadWriteMany
  volumeName: redis-slave-pv
  resources:
    requests:
      storage: 20Gi
eof
kubectl apply -f redis-master-pv-pvc.yaml #生效存儲
kubectl apply -f redis-slave-pv-pvc.yaml
kubectl get pv #查看存儲

在這裏插入圖片描述

5、在存儲中添加redis配置文件

我的下載裏找名稱:“k8s部署redis所需要的配置文件”

上傳以上兩個文件分別到存儲目錄下的master與slave文件下,並分別修改文件名爲redis.conf
在這裏插入圖片描述
這個dump.rdb只有已經進行數據快照纔會產生,這裏不用管它。

修改slave文件夾下面的redis.conf,主要關注以下幾項

requirepass #這裏配置redis的密碼
masterauth #這裏配置slave的複製密碼
slaveof 10.111.80.141 6379 #這裏的主節點就是要用上面我們查看到的k8s的redis-master-svc集羣地址

修改master文件夾下面的redis.conf,注意slaveof這一項需要註釋掉,其它同上。

6、K8S中添加部署

cat <<eof >redis-master-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: redis-master
spec:
  replicas: 1
  selector:
    matchLabels:
      app: redis-master
  template:
    metadata:
      labels:
        app: redis-master
        node: redis-master
        unit: redis-cluster
    spec:
      containers:
      - name: redis-master
        image: 10.41.10.81:5000/redis
        volumeMounts:
        - mountPath: "/data"
          name: data
        ports:
        - containerPort: 6379
        command: ["redis-server"]
        args: ["/data/redis.conf"]
      volumes:
      - name: data
        persistentVolumeClaim:
          claimName: redis-master-pvc
eof
cat <<eof >redis-slave-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: redis-slave
spec:
  replicas: 1
  selector:
    matchLabels:
      app: redis-slave
  template:
    metadata:
      labels:
        app: redis-slave
        node: redis-slave
        unit: redis-cluster
    spec:
      containers:
      - name: redis-slave
        image: 10.41.10.81:5000/redis
        command: ["redis-server"]
        args: ["/data/redis.conf"]
        volumeMounts:
        - mountPath: "/data"
          name: data
        ports:
        - containerPort: 6379
      volumes:
      - name: data
        persistentVolumeClaim:
          claimName: redis-slave-pvc
eof
kubectl apply -f redis-master-deployment.yaml #部署主節點
kubectl apply -f redis-slave-deployment.yaml #部署次節點
kubectl get pods -o wide #查看部署情況

7、驗證

分別進入pod,查看集羣狀態

kubectl exec -it redis-master-75fdfdb8f8-bqwmx /bin/bash
redis-cli
auth redis@123 #輸入密碼
info replication #查看集羣

在這裏插入圖片描述
進入slave節點

kubectl exec -it redis-slave-7b764f878b-tfrdp /bin/bash
redis-cli
auth redis@123 #輸入密碼
info replication #查看集羣
在這裏插入圖片描述
大功告成!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章