文档首页> 云容器引擎 CCE> 用户指南> 存储管理-CSI> 旧版UI> 对象存储卷(OBS)> 使用kubectl部署带对象存储卷的有状态工作负载
更新时间:2022-05-19 GMT+08:00
分享

使用kubectl部署带对象存储卷的有状态工作负载

操作场景

CCE支持使用对象存储卷(PersistentVolumeClaim),创建有状态工作负载(StatefulSet)

前提条件

  • 您已经创建好一个CCE集群,并且在该集群中安装CSI插件(Everest)。
  • 已上传AK/SK,具体请参见准备工作

约束与限制

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

操作步骤

  1. 参照创建对象存储卷中操作创建对象存储卷,并获取PVC名称。
  2. 请参见通过kubectl连接集群,使用kubectl连接集群。
  3. 新建一个YAML文件,用于创建工作负载。假设文件名为obs-statefulset-example.yaml

    touch obs-statefulset-example.yaml

    vi obs-statefulset-example.yaml

    配置示例:

    apiVersion: apps/v1
    kind: StatefulSet
    metadata:
      name: obs-statefulset-example
      namespace: default
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: obs-statefulset-example
      template:
        metadata:
          labels:
            app: obs-statefulset-example
        spec:
          volumes: 
          - name: pvc-obs-example 
            persistentVolumeClaim:
              claimName: pvc-obs-example     
          containers:
          - name: container-0
            image: 'nginx:latest'
            volumeMounts:
              - name: pvc-obs-example
                mountPath: /tmp
          restartPolicy: Always
          imagePullSecrets:
          - name: default-secret 
      serviceName: obs-statefulset-example-headless    # Headless Service的名称
    表1 关键参数说明

    参数

    描述

    replicas

    实例数。

    name

    新建工作负载的名称。

    image

    新建工作负载使用的镜像。

    mountPath

    容器内挂载路径。

    serviceName

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

    claimName

    已有PVC名称。

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

    yaml示例如下:

    apiVersion: apps/v1
    kind: StatefulSet
    metadata:
      name: obs-statefulset-example
      namespace: default
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: obs-statefulset-example
      template:
        metadata:
          labels:
            app: obs-statefulset-example
        spec:
          containers:
            - name: container-0
              image: 'nginx:latest'
              volumeMounts:
                - name: pvc-obs-auto-example
                  mountPath: /tmp
          restartPolicy: Always
          imagePullSecrets:
            - name: default-secret
      volumeClaimTemplates:
        - metadata:
            name: pvc-obs-auto-example
            namespace: default
            annotations:
              everest.io/obs-volume-type: STANDARD
          spec:
            accessModes:
              - ReadWriteMany
            resources:
              requests:
                storage: 1Gi
            storageClassName: csi-obs  
      serviceName: obs-statefulset-example-headless

  4. 创建有状态工作负载。

    kubectl create -f obs-statefulset-example.yaml

验证对象存储的持久化存储

  1. 查询部署的工作负载(以obs-statefulset-example为例)的实例和对象存储。

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

      期望输出:

      obs-statefulset-example-0   1/1     Running   0          2m5s
    2. 执行以下命令,查看/tmp目录下是否挂载了对象存储。
      kubectl exec obs-statefulset-example-0 -- mount|grep /tmp

      期望输出:

      s3fs on /tmp type fuse.s3fs (rw,nosuid,nodev,relatime,user_id=0,group_id=0,allow_other)

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

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

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

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

    预期输出:

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

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

    kubectl delete po obs-statefulset-example-0

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

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

      预期输出:

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

      预期输出:

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

分享:

    相关文档

    相关产品

close