協助改進此頁面
若要為本使用者指南貢獻內容,請點選每個頁面右側面板中的在 GitHub 上編輯此頁面連結。
部署具狀態工作負載範例至 EKS 自動模式
這項教學課程將引導您部署具狀態範例應用程式至 EKS 自動模式叢集。應用程式可將時間戳記寫入持續性磁碟區,從而示範 EKS 自動模式的自動 EBS 磁碟區佈建與持續保留功能。
先決條件
-
EKS 自動模式叢集
-
AWS CLI 已設定適當許可
-
kubectl已安裝並已設定-
如需詳細資訊,請參閱 設定以使用 Amazon EKS。
-
步驟 1:設定您的環境
-
設定環境變數:
export CLUSTER_NAME=my-auto-cluster export AWS_REGION="us-west-2" -
更新 kubeconfig:
aws eks update-kubeconfig --name "${CLUSTER_NAME}"
步驟 2:建立儲存類別
StorageClass 定義 EKS 自動模式佈建 EBS 磁碟區的方式。
EKS 自動模式不會為您建立 StorageClass。您必須建立 StorageClass 參考 ebs.csi.eks.amazonaws.com,以使用 EKS 自動模式的儲存功能。
-
建立名為
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" -
套用
StorageClass:kubectl apply -f storage-class.yaml
關鍵元件:
-
provisioner: ebs---csi---eks.amazonaws.com.rproxy.govskope.ca- 使用 EKS 自動模式 -
volumeBindingMode: WaitForFirstConsumer- 延遲建立磁碟區,直至 Pod 需要磁碟區 -
type: gp3- 指定 EBS 磁碟區類型 -
encrypted: "true"- EBS 將使用預設aws/ebs金鑰,來加密使用此類別建立的磁碟區。此為選用操作,但建議您採用。 -
storageclass.kubernetes.io/is-default-class: "true"- 依預設,Kubernetes 將使用此儲存類別,除非您在持續性磁碟區宣告上指定了不同的磁碟區類別。若要從其他儲存控制器移轉,則在設定該值時要謹慎對待。(選用)
步驟 3:建立持續性磁碟區宣告
PVC 可從 StorageClass 請求儲存。
-
建立名為
pvc.yaml的檔案:apiVersion: v1 kind: PersistentVolumeClaim metadata: name: auto-ebs-claim spec: accessModes: - ReadWriteOnce storageClassName: auto-ebs-sc resources: requests: storage: 8Gi -
套用 PVC:
kubectl apply -f pvc.yaml
關鍵元件:
-
accessModes: ReadWriteOnce- 磁碟區可一次由一個節點掛載 -
storage: 8Gi- 請求 8 GiB 磁碟區 -
storageClassName: auto-ebs-sc- 參考我們建立的StorageClass
步驟 4:部署應用程式
部署將執行一個容器,這會將時間戳記寫入持續性磁碟區。
-
建立名為
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 -
套用部署:
kubectl apply -f deployment.yaml
關鍵元件:
-
寫入時間戳記至檔案的簡易 bash 容器
-
在
/data掛載 PVC -
請求 1 個 CPU 核心
-
針對 EKS 受管節點使用節點選擇器
步驟 5:驗證設定
-
檢查 Pod 是否在執行中:
kubectl get pods -l app=inflate-stateful -
確認 PVC 是否已繫結:
kubectl get pvc auto-ebs-claim -
檢查 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} -
驗證是否正在寫入資料:
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
幕後情況
-
PVC 可從
StorageClass請求儲存 -
排程 Pod 時:
-
EKS 自動模式可佈建 EBS 磁碟區
-
建立 PersistentVolume
-
連接磁碟區至節點
-
-
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