使用kubectl部署带文件存储卷的有状态工作负载
操作场景
CCE支持使用文件存储(PersistentVolumeClaim),创建有状态工作负载(StatefulSet)。
前提条件
您已经创建好一个CCE集群,并且在该集群中安装CSI插件(Everest)。
约束与限制
如下配置示例适用于Kubernetes 1.15及以上版本的集群。
操作步骤
- 参照创建文件存储卷中操作创建文件存储卷,记录文件存储卷名称。
- 请参见通过kubectl连接集群,使用kubectl连接集群。
- 新建一个YAML文件,用于创建工作负载。假设文件名为sfs-statefulset-example.yaml。
touch sfs-statefulset-example.yaml
vi sfs-statefulset-example.yaml
配置示例:
apiVersion: apps/v1 kind: StatefulSet metadata: name: sfs-statefulset-example namespace: default spec: replicas: 1 selector: matchLabels: app: sfs-statefulset-example template: metadata: labels: app: sfs-statefulset-example spec: volumes: - name: pvc-sfs-example persistentVolumeClaim: claimName: pvc-sfs-example containers: - name: container-0 image: 'nginx:latest' volumeMounts: - name: pvc-sfs-example mountPath: /tmp restartPolicy: Always imagePullSecrets: - name: default-secret serviceName: sfs-statefulset-example-headless updateStrategy: type: RollingUpdate
表1 关键参数说明 前置路径
参数
描述
spec
replicas
实例数。
metadata
name
新建工作负载的名称。
spec.template.spec.containers
image
新建工作负载使用的镜像。
spec.template.spec.containers.volumeMounts
mountPath
容器内挂载路径。
spec
serviceName
工作负载对应的服务,服务创建过程请参见创建有状态负载(StatefulSet)。
spec.template.spec.volumes.persistentVolumeClaim
claimName
已有PVC名称。
在有状态工作负载中基于PVCTemplate独占式使用文件存储:
yaml配置示例如下:apiVersion: apps/v1 kind: StatefulSet metadata: name: sfs-statefulset-example namespace: default spec: replicas: 1 selector: matchLabels: app: sfs-statefulset-example template: metadata: labels: app: sfs-statefulset-example spec: containers: - name: container-0 image: 'nginx:latest' volumeMounts: - name: pvc-sfs-auto-example mountPath: /tmp restartPolicy: Always imagePullSecrets: - name: default-secret volumeClaimTemplates: - metadata: name: pvc-sfs-auto-example namespace: default spec: accessModes: - ReadWriteMany resources: requests: storage: 10Gi storageClassName: csi-nas serviceName: sfs-statefulset-example-headless updateStrategy: type: RollingUpdate
spec.template.spec.containers.volumeMounts.name和spec.template.spec.volumes.name有映射关系,必须保持一致。
- 创建有状态工作负载。
kubectl create -f sfs-statefulset-example.yaml
验证文件系统的持久化存储
- 查询部署的工作负载(以sfs-statefulset-example为例)的实例和文件存储。
- 执行以下命令,查看工作负载对应的实例名称。
kubectl get po | grep sfs-statefulset-example
期望输出:
sfs-statefulset-example-0 1/1 Running 0 2m5s
- 执行以下命令,查看/tmp目录下是否挂载了文件存储。
kubectl exec sfs-statefulset-example-0 -- mount|grep /tmp
期望输出:
sfs-nas01.cn-north-4.myhuaweicloud.com:/share-c56b9aa4 on /tmp type nfs (rw,relatime,vers=3,rsize=1048576,wsize=1048576,namlen=255,hard,nolock,noresvport,proto=tcp,timeo=600,retrans=2,sec=sys,mountaddr=10.79.96.32,mountvers=3,mountport=2050,mountproto=tcp,local_lock=all,addr=10.79.96.32)
- 执行以下命令,查看工作负载对应的实例名称。
- 执行以下命令,在/tmp路径下创建问题test。
kubectl exec sfs-statefulset-example-0 -- touch /tmp/test
- 执行以下命令,查看/tmp路径下的文件。
kubectl exec sfs-statefulset-example-0 -- ls -l /tmp
预期输出:
-rw-r--r-- 1 root root 0 Jun 1 02:50 test
- 执行以下命令,删除名称为sfs-statefulset-example-0的实例
kubectl delete po sfs-statefulset-example-0
- 验证重建后的实例,文件存储卷内的数据文件会否仍然存在
- 执行以下命令,查看重建的实例名称
kubectl get po
预期输出:
sfs-statefulset-example-0 1/1 Running 0 2m
- 执行以下命令,查看/tmp路径下的文件
kubectl exec sfs-statefulset-example-0 -- ls -l /tmp
预期输出:
-rw-r--r-- 1 root root 0 Jun 1 02:50 test
- test文件在实例重建之后仍然存在,说明文件系统数据可持久化保存
- 执行以下命令,查看重建的实例名称
