You need to enable JavaScript to run this app.
导航
容器 rootfs 持久化
最近更新时间:2024.07.17 10:27:29首次发布时间:2024.05.11 16:26:07

弹性容器实例支持通过用户自定义配置,将 VCI Pod 的读写层挂载到云盘持久化卷上,实现容器 rootfs 数据持久化。

说明

邀测·申请试用】:该功能目前处于邀测阶段,如需使用,请提交申请。

使用限制

  • 目前仅支持使用弹性块存储 EBS(又称云盘)持久化 rootfs 数据,其它存储类型暂不支持。
  • 初次使用 EBS 持久化 rootfs 数据时,建议使用空盘;若非空盘,建议指定目录。不指定目录时,默认使用根目录,此时请确保根目录下不存在upperwork目录。

前提条件

  • 已创建 VCI 业务相关集群。详细操作,请参见 创建集群
  • 集群中已安装 csi-ebs 组件。详细操作,请参见 csi-ebs 组件
  • 已创建极速型 SSD 云盘。详细操作,请参见 创建云盘

功能介绍

通过在 VCI Pod 中添加 Annotation 来指定容器读写层使用的卷(Volume)。

Annotation KeyAnnotation Value 示例值说明

vci.volcengine.com/overlay-rw-layer-spec

[]

是否持久化存储容器 rootfs 数据。需通过配置如下参数,实现持久化存储:

  • name: 目标容器名称。
  • volumeName: Volume 名称。此处设置的名称必须和 Pod YAML 中spec.volumes.name的值一致。
  • Path: 指定容器 rootfs 数据在 Volume 内的存储路径。默认为空,表示使用 Volume 对应的根目录作为容器 rootfs 数据存储路径。

    说明

    当多个容器使用相同 Volume 作为容器 rootfs 数据存储路径时,必须通过path区分。

Pod Annotation 的 YAML 片段示例如下所示:

vci.volcengine.com/overlay-rw-layer-spec: |-
  [
     {
         "name": "$目标容器名称", 
         "volumeName": "$Volume_名称",
         "path": "$Volume_内存储路径"
     }, 
     {
         "name": "my_container",
         "volumeName": "ebs-volume",
         "path": "final/rootfs-dir1"
     }
  ]

使用方法

下文以使用云盘静态存储卷,创建 VCI Pod,实现容器 rootfs 数据持久化为例。更多云盘存储卷使用方法,请参见 EBS 云盘存储卷

  1. 连接 VCI 业务集群。具体操作说明,请参见 连接集群
  2. 创建 EBS 类型的 PV。
    1. 创建 PV 的 YAML 文件。示例 YAML 文件vci-ebs-pv.yaml代码如下:
      apiVersion: v1
      kind: PersistentVolume
      metadata:
        name: vci-ebs-pv  # PV 名称。
      spec:
        accessModes:
        - ReadWriteOnce
        capacity:
          storage: 20Gi # EBS 存储容量。
        csi:
          driver: ebs.csi.volcengine.com
          fsType: ext4
          volumeAttributes:
            ChargeType: PostPaid
            type: ESSD_PL0    # 云盘类型,云盘名称必须大写。
            zone: cn-beijing-a  #  业务所在可用区。
          volumeHandle: vol-cmukmy9yi5bi254b****  # 指定已有的极速型 SSD 云盘 ID。
        volumeMode: Filesystem
      
    2. 执行以下命令,创建 PV。
      kubectl create -f vci-ebs-pv.yaml
      
  3. 创建存储卷声明(PVC)。
    1. 创建 PVC 的 YAML 文件。示例 YAML 文件vci-ebs-pvc.yaml代码如下:
      apiVersion: v1
      kind: PersistentVolumeClaim
      metadata:
        name: vci-ebs-pvc  # PVC 名称。
        namespace: default  # PVC 所在命名空间。
      spec:
        accessModes:
        - ReadWriteOnce
        resources:
          requests:
            storage: 20Gi
        volumeMode: Filesystem
        volumeName: vci-ebs-pv  # 绑定到该 PVC 的 PV 名称,即步骤 2 中创建的 PV 名称。
      
    2. 执行以下命令,创建 PVC。
      kubectl create -f vci-ebs-pvc.yaml
      
  4. 创建 VCI 实例,配置容器 rootfs 数据持久化相关参数。创建 VCI 实例相关详细说明,请参见 创建实例
    1. 创建 VCI Pod 的 YAML 文件。示例 YAML 文件vci-pod-ebs-rootfs.yaml代码如下:
      apiVersion: v1
      kind: Pod
      metadata:
        name: vci-pod-ebs-rootfs  # Pod 名称。
        namespace: default  # Pod 所属命名空间。
        annotations:
          vke.volcengine.com/burst-to-vci: enforce  # 强制使用 VCI。
          vci.volcengine.com/overlay-rw-layer-spec: |-
            [
                    {
                      "name": "c1",
                      "volumeName": "rootfs",
                      "path": "final/rootfs-dir1"
                    },
                    {
                      "name": "c2",
                      "volumeName": "rootfs",
                      "path": "final/rootfs-dir2"
                    }
            ]
        labels:
          app: vci-pod-ebs-rootfs
      spec:
        containers:
          name: c1  # 容器名称。
          image: nginx:1.14.2  # Pod 的容器镜像地址和 Tag,请替换为您实际业务中的镜像地址。
          imagePullPolicy: Always
          name: c2  # 容器名称。
          image: nginx:1.14.2  # Pod 的容器镜像地址和 Tag,请替换为您实际业务中的镜像地址。
          imagePullPolicy: Always
        tolerations:
        - effect: NoSchedule
          key: vci.vke.volcengine.com/node-type
          operator: Equal
          value: vci
        volumes:
        - name: rootfs  # 与 annotation 中指定的 volumeName 保持一致。
          persistentVolumeClaim:
            claimName: vci-ebs-pvc  # 与步骤 3 中创建的 EBS 关联 PVC 的名字一致。
      
    2. 执行以下命令,创建 VCI Pod。
      kubectl create -f vci-pod-ebs-rootfs.yaml
      

验证步骤

本文以在 Pod 中安装 vim 组件为例,为您提供验证方式。该验证方式需要确保集群已开启 公网访问
alt

说明

若创建集群时未开启公网访问,请手动为集群中的每个网段节点池分别手动配置公网访问。详细操作,请参见 FAQ

  1. 登录到已创建的 VCI Pod,在 Pod 中安装 vim 组件。
    vim --version  # 验证 vim 尚未安装
    apt-get update
    apt-get install vim -y
    vim --version  # 验证 vim 安装成功
    
  2. 将 Pod 删除,然后使用相同的 Pod YAML 再次创建 Pod。
    kubectl delete pod vci-pod-ebs-rootfs -n default
    kubectl create -f vci-pod-ebs-rootfs.yaml
    
  3. 登录到再次创建的 Pod,使用vim --version命令验证之前安装的 vim 组件已被存储保留。