跳至內容

我該如何在 Amazon EKS 中將 EBS 磁碟區從 gp2 遷移到 gp3?

4 分的閱讀內容
0

我想在 Amazon Elastic Kubernetes Service (Amazon EKS) 中,將 Amazon Elastic Block Store (Amazon EBS) 磁碟區類型從一般用途 SSD (gp2) 轉換為一般用途 SSD (gp3)。

簡短說明

您可以使用 Amazon EBS Container Storage Interface (CSI) 驅動程式,透過在 PersistentVolumeClaims (PVC) 中加入註解來修改 Amazon EBS 磁碟區。此功能可於 aws-ebs-csi-driver v1.19.0-eksbuild.2 或更新版本中使用。您可以在 PVC 中修改 typeiops 以及 throughput 參數:

若要在您的 Amazon EKS 叢集中將 EBS 磁碟區從 gp2 遷移至 gp3,請完成以下步驟:

  1. 在您的 Amazon EKS 叢集中安裝 Amazon EBS CSI 驅動程式
  2. 在 Amazon EBS CSI 驅動程式中啟用磁碟區修改功能。
  3. 變更 EBS 磁碟區類型。

解決方法

**注意:**如果您在執行 AWS Command Line Interface (AWS CLI) 命令時收到錯誤訊息,請參閱對 AWS CLI 錯誤進行疑難排解。此外,請確定您使用的是最新的 AWS CLI 版本

在 Amazon EBS CSI 驅動程式中安裝磁碟區修改功能

Amazon EBS CSI 驅動程式版本 1.19.0 可使用磁碟區修改功能。它可由 Helm Chart 2.19.0 或 Amazon EKS 受管附加元件 v1.19.0-eksbuild.2 使用。此功能是以名為 volumemodifier 的額外附屬容器實作。您必須在 Amazon EBS CSI 驅動程式中手動啟用。如需更多資訊,請參閱 GitHub 網站上的磁碟區修改

若要在 Amazon EKS 中啟用磁碟區修改功能,請設定以下任一方法:

  • 使用 Helm 的自我管理附加元件組態
  • Amazon EKS 受管附加元件組態

使用 Helm 的自我管理附加元件組態

  1. 透過 Helm Chart 安裝自我管理的 Amazon EBS CSI 驅動程式,然後將 controller.volumeModificationFeature.enabled 設為 true
    YAML 範例:

    cat values.yaml  
    controller:
      volumeModificationFeature:
        enabled: true
  2. 升級組態。執行以下命令:

    helm upgrade aws-ebs-csi-driver --namespace kube-system \
        aws-ebs-csi-driver/aws-ebs-csi-driver -f values.yaml

Amazon EKS 受管附加元件組態

  1. 建立組態檔。執行以下命令:

    cat eks-addon-ebs-csi-driver-config.json
    {
      "controller": {
        "volumeModificationFeature": {
           "enabled": true
        }
      }
    }
  2. 使用組態檔更新 Amazon EBS CSI 驅動程式附加元件。執行以下命令:

    aws eks update-addon --cluster-name eks-demo \
        --addon-name aws-ebs-csi-driver \
        --service-account-role-arn arn:aws:iam::{AWS_ACCOUNT_ID}:role/AmazonEKS-EBS-CSI-DriverRole \
        --configuration-values 'file://eks-addon-ebs-csi-driver-config.json'
    
    {
        "update": {
             ...
            "status": "InProgress",
            "type": "AddonUpdate",
            "params": [
                ...
                {
                    "type": "ConfigurationValues",
                    "value": "{\n  \"controller\": {\n    \"volumeModificationFeature\": {\n       \"enabled\": true\n    }\n  }\n}"
                }
            ],
            ...
        }
    }
  3. 確認額外附屬容器 volumemodifier 已啟用。執行以下命令:

    kubectl get pod -n kube-system -l=app=ebs-csi-controller

    輸出範例:

    NAME                                  READY   STATUS    RESTARTS   AGE
    ebs-csi-controller-5f985b94f4-lk7lv   7/7     Running   0          2m29s
    ebs-csi-controller-5f985b94f4-m5nn8   7/7     Running   0          2m29s
  4. 檢查容器名稱。執行以下命令:

    kubectl get pod -n kube-system ebs-csi-controller-5f985b94f4-lk7lv -o jsonpath='{.spec.containers[*].name}{"\n"}'

    輸出範例:

    ebs-plugin csi-provisioner csi-attacher csi-snapshotter volumemodifier csi-resizer liveness-probe

變更 EBS 磁碟區類型

  1. 查看目前的 PVC 與 PersistentVolume (PV) 狀態。執行以下命令:

    kubectl get sc

    輸出範例:

    NAME   PROVISIONER             RECLAIMPOLICY   VOLUMEBINDINGMODE      ALLOWVOLUMEEXPANSION   AGE
    gp2    kubernetes.io/aws-ebs   Delete          WaitForFirstConsumer   false                  6h23m
    
    kubectl get pvc ebs-demo-claim        

    輸出範例:

    NAME             STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   VOLUMEATTRIBUTESCLASS   AGE
    ebs-demo-claim   Bound    pvc-10d1d621-22f4-4fb6-a64a-51cdf03a9e30   4Gi        RWO            gp2            <unset>                 18s
    kubectl get pv pvc-10d1d621-22f4-4fb6-a64a-51cdf03a9e30                                                

    輸出範例:

    NAME                                       CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                    STORAGECLASS   VOLUMEATTRIBUTESCLASS   REASON   AGE
    pvc-10d1d621-22f4-4fb6-a64a-51cdf03a9e30   4Gi        RWO            Delete           Bound    default/ebs-demo-claim   gp2            <unset>                          36s
  2. 檢視 PV 詳細資料。執行以下命令:

    kubectl get pv pvc-10d1d621-22f4-4fb6-a64a-51cdf03a9e30 -o yaml

    輸出範例:

    apiVersion: v1
    kind: PersistentVolume
    metadata:
      annotations:
        pv.kubernetes.io/migrated-to: ebs.csi.aws.com
        pv.kubernetes.io/provisioned-by: kubernetes.io/aws-ebs
        ...
      ...
    spec:
      awsElasticBlockStore:
        fsType: ext4
        volumeID: vol-0296e8e6fa4b27670
      claimRef:
        apiVersion: v1
        kind: PersistentVolumeClaim
        name: ebs-demo-claim
        namespace: default
        ...
      persistentVolumeReclaimPolicy: Delete
      storageClassName: gp2
      volumeMode: Filesystem
    status:
      phase: Bound
      ...
  3. 檢查 Amazon EBS 詳細資料。執行以下命令:

    aws ec2 describe-volumes --volume-ids vol-0296e8e6fa4b27670

    輸出範例:

    {
        "Volumes": [
            {
                "AvailabilityZone": "us-east-1a",
                "Size": 4,
                "State": "in-use",
                "VolumeId": "vol-0296e8e6fa4b27670",
                "Iops": 100,
                "VolumeType": "gp2"
                ...
            }
        ]
    }
  4. 新增 gp3 型註解。執行以下命令:

    kubectl annotate pvc ebs-demo-claim ebs.csi.aws.com/volumeType="gp3"

    輸出範例:

    persistentvolumeclaim/ebs-demo-claim annotated
  5. 確認註解。執行以下命令:

    kubectl get pvc ebs-demo-claim -o yaml                              

    輸出範例:

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      annotations:
        ebs.csi.aws.com/volumeType: gp3
        ...
      ...
      name: ebs-demo-claim
      namespace: default
    kubectl get pv pvc-10d1d621-22f4-4fb6-a64a-51cdf03a9e30 -o yaml
    

    輸出範例:

    apiVersion: v1
    kind: PersistentVolume
    metadata:
      annotations:
        ebs.csi.aws.com/volumeType: gp3
        ...
    spec:
      awsElasticBlockStore:
        fsType: ext4
        volumeID: vol-0296e8e6fa4b27670
      claimRef:
        apiVersion: v1
        kind: PersistentVolumeClaim
        name: ebs-demo-claim
        namespace: default
      ...
  6. 監控修改情況。執行以下命令:

    kubectl describe pvc ebs-demo-claim   

    輸出範例:

    Name:          ebs-demo-claim
    ...
    Events:
      Type    Reason                        Age    From                                                                                      Message
      ----    ------                        ----   ----                                                                                      -------
      ...
      Normal  ProvisioningSucceeded         5m20s  ebs.csi.aws.com_ebs-csi-controller-676f998966-bh79n_ec5572b3-c1ec-4b3a-838a-d4b21b8c668f  Successfully provisioned volume pvc-10d1d621-22f4-4fb6-a64a-51cdf03a9e30
      Normal  VolumeModificationStarted     64s    volume-modifier-for-k8s-ebs.csi.aws.com                                                   External modifier is modifying volume pvc-10d1d621-22f4-4fb6-a64a-51cdf03a9e30
      Normal  VolumeModificationSuccessful  57s    volume-modifier-for-k8s-ebs.csi.aws.com  
  7. 確認磁碟區類型已變更為 gp3。執行以下命令:

    aws ec2 describe-volumes --volume-ids vol-0296e8e6fa4b27670

    輸出範例:

    {
        "Volumes": [
            {
                "AvailabilityZone": "us-east-1a",
                "Size": 4,
                "State": "in-use",
                "VolumeId": "vol-0296e8e6fa4b27670",
                "Iops": 3000,
                "VolumeType": "gp3",
                "Throughput": 125
                ...
            }
        ]
    }

使用磁碟區快照遷移磁碟區

Amazon EBS CSI 驅動程式提供 CSI 磁碟區快照功能。您可以使用快照將永續性磁碟區從 in-tree gp2 StorageClass 遷移至 Amazon EBS CSI gp3 StorageClass。如需更多資訊,請參閱 GitHub 網站上的磁碟區快照

若要使用磁碟區快照,請完成以下步驟:

  1. 安裝 Amazon EBS CSI 驅動程式
  2. 安裝 VolumeSnapshotClassVolumeSnapshotContent 以及 VolumeSnapshot 物件。如需更多資訊,請參閱 GitHub 網站上的 snapshotclass.yamlvolume-snapshot-content.yaml 以及 snapshot.yaml
  3. 使用這些物件從快照建立新的 gp3 型永續性磁碟區。如需更多資訊,請參閱將 Amazon EKS 叢集從 gp2 遷移至 gp3 EBS 磁碟區

相關資訊

簡化在 Kubernetes 上使用 EBS CSI Driver 進行 Amazon EBS 磁碟區遷移與修改