本文介绍如何通过PV和PVC方式使用阿里云云盘存储卷。

前提条件

使用云盘数据卷之前,您需要先在ECS管理控制台上创建云盘。具体操作,请参见创建云盘

通过PV和PVC方式使用云盘存储卷

  1. 创建云盘类型的PV。
    您可以使用YAML文件或者控制台创建云盘类型的PV。
    • 通过YAML文件创建PV。
      1. 使用以下内容创建disk-pv.yaml文件。
        apiVersion: v1
        kind: PersistentVolume
        metadata:
          name: d-bp1j17ifxfasvts3****
          labels:
            failure-domain.beta.kubernetes.io/zone: cn-hangzhou-b
            failure-domain.beta.kubernetes.io/region: cn-hangzhou
        spec:
          capacity:
            storage: 20Gi
          storageClassName: disk
          accessModes:
            - ReadWriteOnce
          flexVolume:
            driver: "alicloud/disk"
            fsType: "ext4"
            options:
              volumeId: "d-bp1j17ifxfasvts3****"
        说明 PV的名称(name)要与阿里云盘ID (volumeId)的取值保持一致。
      2. 执行以下命令创建PV。
        kubectl apply -f disk-pv.yaml
    • 通过控制台界面创建云盘数据卷 。
      1. 登录容器服务管理控制台
      2. 在控制台左侧导航栏中,单击集群
      3. 集群列表页面中,单击目标集群名称或者目标集群右侧操作列下的详情
      4. 在集群管理页左侧导航栏中,选择存储 > 存储卷
      5. 存储卷页面,单击右上角的创建
      6. 创建存储卷对话框中,配置数据卷的相关参数。
        配置项描述
        存储卷类型本示例选择云盘
        存储驱动本示例选择Flexvolume
        访问模式默认为ReadWriteOnce。
        云盘ID您可以选择与集群属于相同地域和可用区下处于待挂载状态的云盘。
        文件系统类型您可以选择以哪种数据类型将数据存储到云盘上,支持的类型包括ext4ext3xfsvfat。默认为ext4
        标签为该数据卷添加标签。
      7. 完成配置后,单击创建
  2. 创建PVC。
    1. 使用以下内容创建disk-pvc.yaml文件。
      kind: PersistentVolumeClaim
      apiVersion: v1
      metadata:
        name: pvc-disk
      spec:
        accessModes:
          - ReadWriteOnce
        storageClassName: disk
        resources:
          requests:
            storage: 20Gi
    2. 执行以下命令创建PVC。
      kubectl apply -f disk-pvc.yaml
  3. 创建Pod。
    1. 使用以下内容创建disk-pod.yaml文件。
      apiVersion: v1
      kind: Service
      metadata:
        name: nginx
        labels:
          app: nginx
      spec:
        ports:
        - port: 80
          name: web
        clusterIP: None
        selector:
          app: nginx
      ---
      apiVersion: apps/v1
      kind: StatefulSet
      metadata:
        name: web
      spec:
        selector:
          matchLabels:
            app: nginx
        serviceName: "nginx"
        template:
          metadata:
            labels:
              app: nginx
          spec:
            containers:
            - name: nginx
              image: nginx
              ports:
              - containerPort: 80
                name: web
              volumeMounts:
              - name: pvc-disk
                mountPath: /data
            volumes:
              - name: pvc-disk
                persistentVolumeClaim:
                  claimName: pvc-disk
    2. 执行以下命令创建Pod。
      kubectl apply -f disk-pod.yaml