3.9.6 部署redis并持久化数据

1、创建一个 redis 的 PVC

# 定义PVC
[root@k8s-master01 ~]# vim redis-pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: redis-data
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 10Gi
  storageClassName: nfs-csi

# 创建PVC
[root@k8s-master01 ~]# kaf redis-pvc.yaml

2、创建一个redis的 Deployment

[root@k8s-master01 ~]# vim deployment-redis.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: redis
  name: redis
spec:
  replicas: 1
  selector:
    matchLabels:
      app: redis
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: redis
    spec:
      containers:
      - name: redis
        image: registry.cn-hangzhou.aliyuncs.com/abroad_images/redis:6.2.5-alpine
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 6379
          protocol: TCP
          name: tcp-6379
        volumeMounts:
        - name: data
          mountPath: /data
        livenessProbe:
          tcpSocket:
            port: 6379
          initialDelaySeconds: 10
          timeoutSeconds: 3
          periodSeconds: 30
          successThreshold: 1
          failureThreshold: 2
        readinessProbe:
          tcpSocket:
            port: 6379
          initialDelaySeconds: 10
          timeoutSeconds: 3
          periodSeconds: 30
          successThreshold: 1
          failureThreshold: 2
      volumes:
      - name: data
        persistentVolumeClaim:
          claimName: redis-data

3、创建redis,并查看启动状态

[root@k8s-master01 ~]# kaf deployment-redis.yaml 

# 验证
[root@k8s-master01 ~]# kgp
NAME                     READY   STATUS    RESTARTS   AGE
redis-65fb67bc64-t2pwt   1/1     Running   0          44s

4、进入pod创建测试数据

[root@k8s-master01 ~]# k exec -it redis-65fb67bc64-t2pwt -- sh
/data # redis-cli 
127.0.0.1:6379> set a 1
OK
127.0.0.1:6379> get a
"1"
127.0.0.1:6379> set b 1
OK
127.0.0.1:6379> get b
"1"
127.0.0.1:6379> save
OK
127.0.0.1:6379> exit
/data # cd /data/
/data # ls
dump.rdb

查看后端数据是否有数据写入,观察到数据已成功写入

[root@k8s-node02 ~]# ls /data/nfs/pvc-e421281a-2dfe-4b9f-aa26-2b89e86febd6/
dump.rdb

5、删除pod测试pod数据是否会丢失,观察到因为配置了持久化,数据没有丢失

[root@k8s-master01 ~]# kgp
NAME                     READY   STATUS    RESTARTS   AGE
redis-65fb67bc64-t2pwt   1/1     Running   0          4m33s

# 删除现有pod
[root@k8s-master01 ~]# k delete po redis-65fb67bc64-t2pw

# 查看数据是否持久化
[root@k8s-master01 ~]# kgp
NAME                     READY   STATUS    RESTARTS   AGE
redis-65fb67bc64-gw2jp   1/1     Running   0          49s
[root@k8s-master01 ~]# k exec -it  redis-65fb67bc64-gw2jp -- sh
/data # redis-cli 
127.0.0.1:6379> get a
"1"
127.0.0.1:6379> get b
"1"

6、环境复原

kubectl delete -f deployment-redis.yaml   -f redis-pvc.yaml