You need to enable JavaScript to run this app.
导航
使用对象存储静态存储卷
最近更新时间:2024.05.13 10:20:35首次发布时间:2022.03.04 23:10:39

本文介绍如何创建对象存储类型存储卷和存储卷声明,以及工作负载如何使用对象存储静态存储卷。

前提条件

  • 已创建容器服务集群,操作方法参见 创建集群
  • 确保当前集群已安装对象存储服务组件 csi-tos。操作方法,请参见 安装组件
  • 已创建存储桶。操作方法,请参见 创建存储桶
  • 确保指定命名空间下已经存在合适的密钥,创建密钥所需的火山引擎账号 AK/SK 获取方法参见:如何获取 API 访问密钥

使用限制

有状态负载需要独占一个卷,暂不支持使用手动创建的存储卷声明。

通过控制台使用

使用对象存储类型静态存储卷的详细操作步骤和参数配置如下:

步骤一:登录集群管理页面

  1. 登录 容器服务控制台
  2. 在容器服务的左侧导航栏,选择 集群
  3. 单击目标集群名称,跳转到集群管理页面。

步骤二:创建存储卷(PV)

  1. 在集群管理页面,选择 存储管理 > 存储卷

  2. 单击存储卷列表左上角 创建存储卷

  3. 在弹出的 创建存储卷 页面,完成参数配置。
    alt

    配置项说明
    创建方式选择存储卷的创建方式,目前支持静态创建。
    名称根据系统提示,自定义存储卷的名称,需确保存储卷名称在集群内唯一。
    存储卷类型存储卷类型包括:云盘、文件存储、对象存储。本场景选择 对象存储
    访问模式选择存储卷的访问方式,目前支持 ReadWriteMany ,此访问方式支持多点读写。

    访问密钥

    选择对象存储的访问密钥,即使用此处指定的访问密钥,授权容器服务访问对象存储。
    若无可使用的访问密钥,请单击 创建密钥,根据系统提示配置密钥名称、所属空间和您火山引擎账号的 AK/SK。

    存储桶选择对象存储中已创建的存储桶 Bucket。

    子目录

    填写符合要求的存储桶子目录,填写规则如下:

    • 支持挂载根目录,且默认为根目录“/”。
    • 长度 2-128 个字符。
    • 只能以“/”开头。
    • 支持大小写字母、数字和特殊字符(- . _ ~ / : $ @ = + ? ! % # )。

    说明

    建议填写已经存在的文件目录,否则系统将根据您填写的子目录,自动创建新的文件目录。

  4. 配置完成后,单击 确定,完成存储卷创建。

步骤三:创建存储卷声明(PVC)

  1. 在集群管理页面,选择 存储管理 > 存储卷声明
  2. 单击存储卷列表左上角 创建存储卷声明
  3. 在弹出的 创建存储卷声明 页面,完成参数配置。其中,存储类型选择 对象存储
    alt
    配置项说明
    命名空间选择存储卷声明所属的命名空间。建议选择您自定义的命名空间,或系统默认创建的 default 命名空间。命名空间相关介绍,请参见 命名空间概述
    名称自定义存储卷声明的名称,需确保存储卷声明名称在集群内唯一。
    存储类型存储类型包括:云盘、文件存储、对象存储。本场景选择 对象存储
    访问模式选择存储卷声明的访问方式,目前支持 ReadWriteMany ,此访问方式支持多点读写。
    计费类型按需选择资源计费类型,目前仅支持按量计费。
    存储卷选择本文上方步骤一创建的存储卷进行关联挂载。
  4. 配置完成后,单击 确定,完成存储卷声明创建。

步骤四:工作负载添加卷

对象存储类型的静态存储卷创建完成后,可通过添加卷的方式挂载到工作负载使用,包括:无状态负载、任务、定时任务、守护进程。
可通过创建工作负载或更新工作负载操作的容器配置步骤,为工作负载添加卷并挂载卷。详细操作,请参见 工作负载
alt

通过 kubectl 命令行使用

准备工作

步骤一:创建 Secret

  1. 创建 Secret 的 TAML 文件。示例文件vke-tos-secret.yaml代码如下:
apiVersion: v1
data:
  akId: <火山引擎账号 AK>          # Base 64 编码后的火山引擎账号 AK,需要替换为真实信息。
  akSecret: <火山引擎账号 SK>      # Base 64 编码后的火山引擎账号 SK,与上述 AK 匹配,需要替换为真实信息。
kind: Secret
metadata:
  name: tos-key
  namespace: default
type: Opaque

2.执行以下命令,创建 Secret。

kubectl create -f vke-tos-secret.yaml

步骤二:创建 PV

  1. 创建 PV 的 YAML 文件。示例文件vke-tos-static-pv.yaml代码如下:
    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: vke-tos-static-pv  # PV 名称。
    spec:
      capacity:
        storage: 10Gi   # 声明应用存储使用量。Kubernetes 必填字段,但此处设置的容量值不会限制应用实际使用量,实际容量仅跟 TOS 容量有关。
      accessModes:  # 访问方式,ReadWriteMany:多点读写。
      - ReadWriteMany
      csi:
        driver: tos.csi.volcengine.com  # 驱动类型,本示例为 tos.csi.volcengine.com ,表示火山引擎 csi-tos 插件。
        nodePublishSecretRef:
          name: tos-key        # 与步骤一中 Secret 的名称保持一致。 
          namespace: default
        nodeStageSecretRef:    # 从 csi-tos 组件的 v0.2.2 版本开始,需要配置 NodeStageSecretRef 参数,内容与 nodePublishSecretRef 相同。另外,v0.2.2 版本只能兼容 volumeHandle 和 PV Name 的存量 PV;如果直接升级到 v0.2.3 版本,可以兼容所有存量 PV。
          name: tos-key
          namespace: default
        volumeAttributes:
          bucket: vke-tos
          path: /tmp
          url: http://tos-s3-cn-beijing.ivolces.com
          fuse_pod_cpu_request: "100m"     # fuse pod 资源 CPU 请求量,若未配置,默认使用 100m。
          fuse_pod_cpu_limit: "2"          # fuse pod 资源 CPU 限制,若未配置,默认使用 6。
          fuse_pod_memory_request: 100Mi   # fuse pod 资源内存请求量,若未配置,默认使用 200Mi。
          fuse_pod_memory_limit: "2Gi"     # fuse pod 资源内存限制,若未配置,默认使用 6Gi。
        volumeHandle: vke-tos-static-pv  # PV 的唯一标识符,需要与 PV name 保持一致。volumeHandle 应该唯一对应 <url>:<bucket><path>,避免相同 volumeHandle 对应不同 <url>:<bucket><path>,否则可能导致错误挂载盘。
      persistentVolumeReclaimPolicy: Retain
      volumeMode: Filesystem
    

2.执行以下命令,创建 PV。

kubectl create -f vke-tos-static-pv.yaml

步骤三:创建 PVC

  1. 创建 PVC 的 YAML 文件。示例文件vke-tos-static-pvc.yaml代码如下:

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: vke-tos-static-pvc  # PVC 名称。
      namespace: default
    spec:
      accessModes:  # PVC 访问模式。目前仅支持 ReadWriteMany ,表示多点读写。
      - ReadWriteMany
      resources:
        requests:
          storage: 20Gi  # 声明的存储使用量。
      volumeMode: Filesystem # 挂载对象存储的格式,本示例填写 Filesystem,表示文件系统挂载。
      volumeName: vke-tos-static-pv  # 绑定到该 PVC 的 PV 名称。
    
    
  2. 执行以下命令,创建 PVC。

    kubectl create -f vke-tos-static-pvc.yaml
    
  3. 执行以下命令,查看 PVC 与 PV 的静态绑定结果。

    kubectl get pvc
    

    预期输出结果如下,表示 PVC 与 PV 静态绑定成功。

    NAME                 STATUS   VOLUME              CAPACITY   ACCESS MODES   STORAGECLASS   AGE
    vke-tos-static-pvc   Bound    vke-tos-static-pv    20Gi       RWX                          2m36s         
    

步骤四:创建 Deployment

  1. 创建 Deployment 的 YAML 文件。示例文件vke-tos-static-deployment.yaml代码如下:

    说明

    如果有使用弹性容器实例 VCI 的需求,需要在spec.template.metadata.annotations中添加 vke.volcengine.com/burst-to-vci: enforce`。VCI 具备全托管免运维、按需付费、沙箱容器安全隔离等优势,详细介绍参见 什么是弹性容器实例

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: vke-static-tos-deploy
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: vke-static-tos-deploy
      template:
        metadata:
          labels:
            app: vke-static-tos-deploy
        spec:
          containers:
          - image: nginx
            imagePullPolicy: IfNotPresent
            name: nginx
            volumeMounts:
            - mountPath: /tmp  # TOS 在容器中挂载的位置。
              name: tos-pv
          volumes:
          - name: tos-pv
            persistentVolumeClaim:
              claimName: vke-tos-static-pvc  # 步骤二中创建的 PVC 名称。
    
  2. 执行以下命令创建 Deployment。

    kubectl create -f vke-tos-static-deployment.yaml
    

相关文档