1、首先,通過Config Map來對容器中redis應用的配置進行管理,如自定義配置文件、密碼、日志路徑等
redis-standalone-conf.yml
apiVersion: v1 kind: ConfigMap metadata: name: redis-standalone-conf data: redis.conf: | bind 0.0.0.0 port 6379 requirepass 111111 appendonly yes cluster-config-file nodes-6379.conf pidfile /redis/log/redis-6379.pid cluster-config-file /redis/conf/redis.conf dir /redis/data/ logfile /redis/log/redis-6379.log cluster-node-timeout 5000 protected-mode no
創建configmaps
kubectl apply -f redis-standalone-conf.yml
2、上面部署的redis,數據是存儲在當前部署節點的本地的文件系統,現在講存儲改成NFS,創建pv和pvc
首先創建NFS
注:預先在NFS服務器上創建目錄:/home/data/nfs/pai/redisstandalone
# 創建掛載目錄 mkdir /home/data/nfs/pai/redisstandalone -p cat >>/etc/exports <<EOF /home/data/nfs/pai/redisstandalone *(rw,sync,no_root_squash) EOF exportfs -r systemctl restart rpcbind && systemctl restart nfs-server
redis-standalone-pv.yml
--- apiVersion: v1 kind: PersistentVolume metadata: name: redis-standalone-pv spec: capacity: storage: 200G accessModes: - ReadWriteMany storageClassName: nfsredis nfs: server: 192.168.33.157 # NFS服務器地址 path: "/home/data/nfs/pai/redisstandalone" # NFS目錄 --- apiVersion: v1 kind: PersistentVolumeClaim metadata: name: redis-standalone-pvc spec: volumeName: redis-standalone-pv accessModes: - ReadWriteMany resources: requests: storage: 100Gi storageClassName: nfsredis
創建pv和pvc
kubectl apply -f redis-standalone-pv.yml
3、由於redis是一個有狀態服務,因此,現需要創建一個StatefulSet,並把數據掛載到宿主機上。
redis-standalone-statefulset.yml
apiVersion: apps/v1 kind: StatefulSet metadata: name: redis-standalone spec: replicas: 1 serviceName: redis-standalone selector: matchLabels: name: redis-standalone template: metadata: labels: name: redis-standalone spec: #nodeName: gggd12-111-128-105 # 指定調度節點 initContainers: - name: init-redis-standalone image: busybox command: ['sh', '-c', 'mkdir -p /redis/log/;mkdir -p /redis/conf/;mkdir -p /redis/data/'] volumeMounts: - name: redis-standalone-pvc mountPath: /redis/ containers: - name: redis-standalone image: redis:5.0.6 imagePullPolicy: IfNotPresent command: - sh - -c - "exec redis-server /redis/conf/redis.conf" ports: - containerPort: 6379 name: redis protocol: TCP volumeMounts: - name: redis-config mountPath: /redis/conf/ - name: redis-standalone-pvc mountPath: /redis/ volumes: - name: redis-config configMap: name: redis-standalone-conf - name: redis-standalone-pvc persistentVolumeClaim: claimName: redis-standalone-pvc
4、通過創建service,提供對外訪問pod的服務接口
redis-standalone-service.yml
kind: Service apiVersion: v1 metadata: labels: name: redis-standalone name: redis-standalone spec: type: NodePort ports: - name: redis port: 6379 targetPort: 6379 nodePort: 31379 selector: name: redis-standalone
創建service
kubectl apply -f redis-standalone-service.yml
5、驗證redis是否部署成功
查看pod、pv、pvc、service、ConfigMap運行狀態
kubectl get pod,svc,pv,pvc,cm
測試遠程連接
注:這里的host為宿主機IP
-h 指定 遠程redis主機的IP地址(pod所在的k8s節點)
-p 指定 遠程redis連接的端口 (service暴露的端口)
-a 指定 遠程redis連接的密碼 (ConfigMap文件中設置的密碼)
redis-cli -h 192.168.33.244 -p 31379 -a 111111
最后,更新完了重新驗證redis即可。
登錄NFS服務器,查看相應的文件掛載信息
[root@k8s-master redis]# tree /home/data/nfs/pai/redisstandalone/ /home/data/nfs/pai/redisstandalone/ ├── conf ├── data │ └── appendonly.aof └── log ├── redis-6379.log └── redis-6379.pid 3 directories, 3 files