云容器引擎 CCE云容器引擎 CCE

文档首页> 云容器引擎 CCE> 用户指南> 存储管理-CSI> 云硬盘存储卷> 使用kubectl部署带云硬盘存储卷的工作负载
更新时间:2021/08/31 GMT+08:00
分享

使用kubectl部署带云硬盘存储卷的工作负载

操作场景

云硬盘创建或导入CCE后,可以在工作负载中挂载云硬盘。

云硬盘不支持跨可用区挂载。在挂载前,您可以使用 kubectl get pvc 命令查询当前集群所在分区下可用PVC。

前提条件

您已经创建好一个CCE集群,并且在该集群中安装CSI插件(Everest)。

约束与限制

如下配置示例适用于Kubernetes 1.15及以上版本的集群。

操作步骤

  1. 请参见通过kubectl连接集群,使用kubectl连接集群。
  2. 执行如下命令,配置名为“evs-deployment-example.yaml”的创建无状态工作负载的yaml文件。

    touch evs-deployment-example.yaml

    vi evs-deployment-example.yaml

    在无状态工作负载中基于pvc共享式使用云硬盘存储示例:
    apiVersion: apps/v1 
    kind: Deployment 
    metadata: 
      name: evs-deployment-example 
      namespace: default 
    spec: 
      replicas: 1 
      selector: 
        matchLabels: 
          app: evs-deployment-example 
      template: 
        metadata: 
          labels: 
            app: evs-deployment-example 
        spec: 
          containers: 
          - image: nginx
            name: container-0 
            volumeMounts: 
            - mountPath: /tmp 
              name: pvc-evs-example 
          imagePullSecrets:
            - name: default-secret
          restartPolicy: Always 
          volumes: 
          - name: pvc-evs-example 
            persistentVolumeClaim: 
              claimName: pvc-evs-auto-example
    表1 关键参数说明

    前置路径

    参数

    描述

    spec.template.spec.containers.volumeMounts

    name

    容器内挂载卷的名称。

    spec.template.spec.containers.volumeMounts

    mountPath

    容器内挂载路径,示例中挂载到“/tmp”路径。

    spec.template.spec.volumes

    name

    卷的名称。

    spec.template.spec.volumes.persistentVolumeClaim

    claimName

    已有PVC名称。

    “spec.template.spec.containers.volumeMounts.name ”和 “spec.template.spec.volumes.name”有映射关系,必须保持一致。

    在有状态工作负载中基于PVCTemplate独占式使用云硬盘存储。

    yaml示例如下:
    apiVersion: apps/v1
    kind: StatefulSet
    metadata:
      name: evs-statefulset-example
      namespace: default
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: evs-statefulset-example
      template:
        metadata:
          labels:
            app: evs-statefulset-example
        spec:
          containers:
            - name: container-0
              image: 'nginx:latest'
              volumeMounts:
                - name: pvc-evs-auto-example
                  mountPath: /tmp
          restartPolicy: Always
          imagePullSecrets:
            - name: default-secret
      volumeClaimTemplates:
        - metadata:
            name: pvc-evs-auto-example
            namespace: default
            annotations:
              everest.io/disk-volume-type: SAS
          spec:
            accessModes:
              - ReadWriteOnce
            resources:
              requests:
                storage: 10Gi
            storageClassName: csi-disk   
      serviceName: evs-statefulset-example-headless
      updateStrategy:
        type: RollingUpdate
    表2 关键参数说明

    前置路径

    参数

    描述

    metadata

    name

    创建的工作负载名称。

    spec.template.spec.containers

    image

    工作负载的镜像。

    spec.template.spec.containers.volumeMount

    mountPath

    容器内挂载路径,示例中挂载到“/tmp”路径。

    spec

    serviceName

    工作负载对应的服务,服务创建过程请参见创建有状态负载(StatefulSet)

    “spec.template.spec.containers.volumeMounts.name ”和 “spec.volumeClaimTemplates.metadata.name”有映射关系,必须保持一致。

  3. 执行如下命令创建Pod。

    kubectl create -f evs-deployment-example.yaml

    创建完成后,登录CCE控制台,在左侧导航栏中选择存储管理 > 云硬盘存储卷。单击PVC名称,在PVC详情页面可查看云硬盘和PVC的绑定关系。

验证云硬盘的持久化存储

  1. 查询部署的工作负载(以evs-statefulset-example为例)的实例和云硬盘文件。

    1. 执行以下命令,查看工作负载对应的实例名称。
      kubectl get po | grep evs-statefulset-example

      期望输出:

      evs-statefulset-example-0   1/1     Running   0          22h
    2. 执行以下命令,查看/tmp目录下是否挂载了云硬盘。
      kubectl exec evs-statefulset-example-0 -- df tmp

      期望输出:

      /dev/sda        10255636 36888  10202364   1% /tmp

  2. 执行以下命令,在/tmp路径下创建问题test。

    kubectl exec evs-statefulset-example-0 -- touch /tmp/test

  3. 执行以下命令,查看/tmp路径下的文件。

    kubectl exec evs-statefulset-example-0 -- ls -l /tmp

    预期输出:

    -rw-r--r-- 1 root root     0 Jun  1 02:50 test

  4. 执行以下命令,删除名称为evs-statefulset-example-0的实例

    kubectl delete po evs-statefulset-example-0

  5. 验证重建后的实例,文件是否仍然存在

    1. 执行以下命令,查看重建的实例名称
      kubectl get po

      预期输出:

      evs-statefulset-example-0   1/1     Running   0          2m
    2. 执行以下命令,查看/tmp路径下的文件
      kubectl exec evs-statefulset-example-0 -- ls -l /tmp

      预期输出:

      -rw-r--r-- 1 root root     0 Jun  1 02:50 test
    3. test文件在实例重建之后仍然存在,说明云硬盘数据可持久化保存

分享:

    相关文档

    相关产品