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配置文件
上傳以上兩個文件分別到存儲目錄下的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 #查看集羣
大功告成!