部署具狀態工作負載範例至 EKS 自動模式 - Amazon EKS

協助改進此頁面

若要為本使用者指南貢獻內容,請點選每個頁面右側面板中的在 GitHub 上編輯此頁面連結。

部署具狀態工作負載範例至 EKS 自動模式

這項教學課程將引導您部署具狀態範例應用程式至 EKS 自動模式叢集。應用程式可將時間戳記寫入持續性磁碟區,從而示範 EKS 自動模式的自動 EBS 磁碟區佈建與持續保留功能。

先決條件

  • EKS 自動模式叢集

  • AWS CLI 已設定適當許可

  • kubectl 已安裝並已設定

步驟 1:設定您的環境

  1. 設定環境變數:

    export CLUSTER_NAME=my-auto-cluster export AWS_REGION="us-west-2"
  2. 更新 kubeconfig:

    aws eks update-kubeconfig --name "${CLUSTER_NAME}"

步驟 2:建立儲存類別

StorageClass 定義 EKS 自動模式佈建 EBS 磁碟區的方式。

EKS 自動模式不會為您建立 StorageClass。您必須建立 StorageClass 參考 ebs.csi.eks.amazonaws.com,以使用 EKS 自動模式的儲存功能。

  1. 建立名為 storage-class.yaml 的檔案:

    apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: auto-ebs-sc annotations: storageclass.kubernetes.io/is-default-class: "true" provisioner: ebs.csi.eks.amazonaws.com volumeBindingMode: WaitForFirstConsumer parameters: type: gp3 encrypted: "true"
  2. 套用 StorageClass

    kubectl apply -f storage-class.yaml

關鍵元件:

  • provisioner: ebs.csi.eks.amazonaws.com - 使用 EKS 自動模式

  • volumeBindingMode: WaitForFirstConsumer - 延遲建立磁碟區,直至 Pod 需要磁碟區

  • type: gp3 - 指定 EBS 磁碟區類型

  • encrypted: "true" - EBS 將使用預設 aws/ebs 金鑰,來加密使用此類別建立的磁碟區。此為選用操作,但建議您採用。

  • storageclass.kubernetes.io/is-default-class: "true" - 依預設,Kubernetes 將使用此儲存類別,除非您在持續性磁碟區宣告上指定了不同的磁碟區類別。若要從其他儲存控制器移轉,則在設定該值時要謹慎對待。(選用)

步驟 3:建立持續性磁碟區宣告

PVC 可從 StorageClass 請求儲存。

  1. 建立名為 pvc.yaml 的檔案:

    apiVersion: v1 kind: PersistentVolumeClaim metadata: name: auto-ebs-claim spec: accessModes: - ReadWriteOnce storageClassName: auto-ebs-sc resources: requests: storage: 8Gi
  2. 套用 PVC:

    kubectl apply -f pvc.yaml

關鍵元件:

  • accessModes: ReadWriteOnce - 磁碟區可一次由一個節點掛載

  • storage: 8Gi - 請求 8 GiB 磁碟區

  • storageClassName: auto-ebs-sc - 參考我們建立的 StorageClass

步驟 4:部署應用程式

部署將執行一個容器,這會將時間戳記寫入持續性磁碟區。

  1. 建立名為 deployment.yaml 的檔案:

    apiVersion: apps/v1 kind: Deployment metadata: name: inflate-stateful spec: replicas: 1 selector: matchLabels: app: inflate-stateful template: metadata: labels: app: inflate-stateful spec: terminationGracePeriodSeconds: 0 nodeSelector: eks.amazonaws.com/compute-type: auto containers: - name: bash image: public.ecr.aws/docker/library/bash:4.4 command: ["/usr/local/bin/bash"] args: ["-c", "while true; do echo $(date -u) >> /data/out.txt; sleep 60; done"] resources: requests: cpu: "1" volumeMounts: - name: persistent-storage mountPath: /data volumes: - name: persistent-storage persistentVolumeClaim: claimName: auto-ebs-claim
  2. 套用部署:

    kubectl apply -f deployment.yaml

關鍵元件:

  • 寫入時間戳記至檔案的簡易 bash 容器

  • /data 掛載 PVC

  • 請求 1 個 CPU 核心

  • 針對 EKS 受管節點使用節點選擇器

步驟 5:驗證設定

  1. 檢查 Pod 是否在執行中:

    kubectl get pods -l app=inflate-stateful
  2. 確認 PVC 是否已繫結:

    kubectl get pvc auto-ebs-claim
  3. 檢查 EBS 磁碟區:

    # Get the PV name PV_NAME=$(kubectl get pvc auto-ebs-claim -o jsonpath='{.spec.volumeName}') # Describe the EBS volume aws ec2 describe-volumes \ --filters Name=tag:CSIVolumeName,Values=${PV_NAME}
  4. 驗證是否正在寫入資料:

    kubectl exec "$(kubectl get pods -l app=inflate-stateful \ -o=jsonpath='{.items[0].metadata.name}')" -- \ cat /data/out.txt

步驟 6:清除

若要移除在本教學課程中建立的全部資源,請執行以下命令:

# Delete all resources in one command kubectl delete deployment/inflate-stateful pvc/auto-ebs-claim storageclass/auto-ebs-sc

幕後情況

  1. PVC 可從 StorageClass 請求儲存

  2. 排程 Pod 時:

    1. EKS 自動模式可佈建 EBS 磁碟區

    2. 建立 PersistentVolume

    3. 連接磁碟區至節點

  3. Pod 會掛載磁碟區及開始撰寫時間戳記

快照控制器

EKS 自動模式與 Kubernetes CSI 快照器相容,亦稱為快照控制器。然而,EKS 自動模式不包括快照控制器。您將負責安裝及設定快照控制器。如需詳細資訊,請參閱 啟用 CSI 磁碟區的快照功能

請檢閱下列參考 EKS 自動模式儲存功能的 VolumeSnapshotClass

apiVersion: snapshot.storage.k8s.io/v1 kind: VolumeSnapshotClass metadata: name: auto-ebs-vsclass driver: ebs.csi.eks.amazonaws.com deletionPolicy: Delete

了解 Kubernetes CSI 快照器的相關詳細資訊。