部署示例应用程序并验证 CSI 驱动程序是否正常运行 - Amazon EKS
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

部署示例应用程序并验证 CSI 驱动程序是否正常运行

您可以使用示例应用程序测试 CSI 驱动程序功能。本主题展示了一个示例,但您还可以执行以下操作:

  • 部署使用外部快照创建卷快照的示例应用程序。有关更多信息,请参阅 GitHub 上的卷快照

  • 部署使用卷大小的示例应用程序。有关更多信息,请参阅 GitHub 上的调整卷大小

此过程利用来自 Amazon EBS 容器存储接口 (CSI) 驱动程序 GitHub 存储库的动态卷配置示例,使用动态预置的 Amazon EBS 卷。

  1. Amazon EBS 容器存储接口 (CSI) 驱动程序 GitHub 存储库克隆到您的本地系统。

    git clone https://github.com/kubernetes-sigs/aws-ebs-csi-driver/blob/master/deploy/kubernetes/overlays/stable/ecr/kustomization.yaml
  2. 导航到 dynamic-provisioning 示例目录。

    cd aws-ebs-csi-driver/examples/kubernetes/dynamic-provisioning/
  3. (可选)默认情况下,manifests/storageclass.yaml 文件预置 gp2 Amazon EBS 卷。要改用 gp3 卷,请将 type: gp3 添加到 manifests/storageclass.yaml

    echo "parameters: type: gp3" >> manifests/storageclass.yaml
  4. manifests 目录部署 ebs-sc 存储类、ebs-claim 持久性卷声明和 app 示例应用程序。

    kubectl apply -f manifests/
  5. 描述 ebs-sc 存储类。

    kubectl describe storageclass ebs-sc

    示例输出如下。

    Name:            ebs-sc
    IsDefaultClass:  No
    Annotations:     kubectl.kubernetes.io/last-applied-configuration={"apiVersion":"storage.k8s.io/v1","kind":"StorageClass","metadata":{"annotations":{},"name":"ebs-sc"},"provisioner":"ebs.csi.aws.com","volumeBindingMode":"WaitForFirstConsumer"}
    
    Provisioner:           ebs.csi.aws.com
    Parameters:            <none>
    AllowVolumeExpansion:  <unset>
    MountOptions:          <none>
    ReclaimPolicy:         Delete
    VolumeBindingMode:     WaitForFirstConsumer
    Events:                <none>
    注意

    存储类使用 WaitForFirstConsumer 卷绑定模式。这意味着,在 Pod 进行持久性卷声明之前,不会动态预置卷。有关更多信息,请参阅 Kubernetes 文档中的卷绑定模式

  6. 查看默认命名空间中的 Pods。几分钟后,app Pod 的状态变为 Running

    kubectl get pods --watch

    输入 Ctrl+C 以返回到 Shell 提示符。

  7. 列出默认命名空间中的持久性卷。查找具有 default/ebs-claim 声明的持久性卷。

    kubectl get pv

    示例输出如下。

    NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE pvc-37717cd6-d0dc-11e9-b17f-06fad4858a5a 4Gi RWO Delete Bound default/ebs-claim ebs-sc 30s
  8. 描述持久性卷。将 pvc-37717cd6-d0dc-11e9-b17f-06fad4858a5a 替换为上一步的输出值。

    kubectl describe pv pvc-37717cd6-d0dc-11e9-b17f-06fad4858a5a

    示例输出如下。

    Name:              pvc-37717cd6-d0dc-11e9-b17f-06fad4858a5a
    Labels:            <none>
    Annotations:       pv.kubernetes.io/provisioned-by: ebs.csi.aws.com
    Finalizers:        [kubernetes.io/pv-protection external-attacher/ebs-csi-aws-com]
    StorageClass:      ebs-sc
    Status:            Bound
    Claim:             default/ebs-claim
    Reclaim Policy:    Delete
    Access Modes:      RWO
    VolumeMode:        Filesystem
    Capacity:          4Gi
    Node Affinity:
      Required Terms:
        Term 0:        topology.ebs.csi.aws.com/zone in [region-code]
    Message:
    Source:
        Type:              CSI (a Container Storage Interface (CSI) volume source)
        Driver:            ebs.csi.aws.com
        VolumeHandle:      vol-0d651e157c6d93445
        ReadOnly:          false
        VolumeAttributes:      storage.kubernetes.io/csiProvisionerIdentity=1567792483192-8081-ebs.csi.aws.com
    Events:                <none>

    Amazon EBS 卷 ID 是之前输出中 VolumeHandle 的值。

  9. 验证 Pod 是否将数据写入卷。

    kubectl exec -it app -- cat /data/out.txt

    示例输出如下。

    Wed May 5 16:17:03 UTC 2021
    Wed May 5 16:17:08 UTC 2021
    Wed May 5 16:17:13 UTC 2021
    Wed May 5 16:17:18 UTC 2021
    [...]
  10. 完成后,请删除此示例应用程序的资源。

    kubectl delete -f manifests/