總覽
如果您已有要匯入 GKE on AWS 的 AWS Elastic Block Store (EBS) 磁碟區,可以建立 PersistentVolume (PV) 物件,並為特定 PersistentVolumeClaim (PVC) 保留該物件。
本頁面說明如何使用已填入資料的現有 EBS 磁碟區建立 PV,以及如何在 Pod 中使用 PV。
事前準備
- 在
anthos-aws
目錄中,使用anthos-gke
將環境切換至使用者叢集。 將 CLUSTER_NAME 替換為使用者叢集名稱。cd anthos-aws env HTTPS_PROXY=http://localhost:8118 \ anthos-gke aws clusters get-credentials CLUSTER_NAME
為現有的 EBS 磁碟區建立 PersistentVolume
您可以指定新的 PV,匯入現有的 EBS 磁碟區。
將下列 YAML 複製到名為
existing-volume.yaml
的檔案,然後替換值來完成設定:- volume-capacity:磁碟區大小。例如:
30Gi
。如要進一步瞭解如何在 Kubernetes 中指定磁碟區容量,請參閱「記憶體的意義」。 storage-class-name:用於佈建磁碟區的 StorageClass 名稱。舉例來說,您可以使用預設的
standard-rwo
。ebs-id:EBS 磁碟區 ID。 例如:
vol-05786ec9ec9526b67
。fs-type:磁碟區的檔案系統。例如:
ext4
。zone:代管 EBS 磁碟區的 AWS 可用區。例如:
us-east-1c
。
apiVersion: v1 kind: PersistentVolume metadata: name: volume-name annotations: pv.kubernetes.io/provisioned-by: ebs.csi.aws.com spec: capacity: storage: volume-capacity accessModes: - ReadWriteOnce persistentVolumeReclaimPolicy: Retain storageClassName: storage-class-name claimRef: name: my-pvc namespace: default csi: driver: ebs.csi.aws.com volumeHandle: ebs-volume-id fsType: file-system-type nodeAffinity: required: nodeSelectorTerms: - matchExpressions: - key: topology.ebs.csi.aws.com/zone operator: In values: - zone
- volume-capacity:磁碟區大小。例如:
將 YAML 套用至叢集
kubectl apply -f existing-volume.yaml
確認建立 PV
kubectl describe pv volume-name
這項指令的輸出內容會包含 PV 的狀態。
透過 PersistentVolumeClaim 和 Pod 使用磁碟區
匯入磁碟區後,您可以建立 PVC 和 Pod,並附加 PVC。
下列 YAML 會建立 PVC,並將其附加至執行 Nginx 網路伺服器的 Pod。將其複製到名為 nginx.yaml
的檔案,然後取代值來完成設定:
- storage-class:您先前建立的 PersistentVolume 中的 StorageClass 名稱。例如:
standard-rwo
。 - volume-name:先前建立的磁碟區名稱。
- volume-capacity:磁碟區大小。例如:
30Gi
。
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: my-pvc
spec:
storageClassName: storage-class-name
volumeName: volume-name
accessModes:
- ReadWriteOnce
resources:
requests:
storage: volume-capacity
---
apiVersion: v1
kind: Pod
metadata:
name: web-server
spec:
containers:
- name: web-server
image: nginx
volumeMounts:
- mountPath: /var/lib/www/html
name: data
volumes:
- name: data
persistentVolumeClaim:
claimName: my-pvc
將 YAML 套用至叢集
kubectl apply -f nginx.yaml
使用
kubectl describe
檢查 Nginx 執行個體的狀態。輸出內容應為STATUS
的Running
。kubectl describe pod web-server
使用加密的 EBS 磁碟區
如果 EBS 磁碟區是透過 AWS Key Management Service (KMS) 加密,您需要授予 GKE on AWS 控制層 AWS IAM 角色 KMS 金鑰的存取權。
如要取得 AWS IAM 角色名稱,請按照下列步驟操作:
切換至 GKE on AWS 設定所在的目錄。 您在安裝管理服務時建立了這個目錄。
cd anthos-aws
選擇您是否使用
anthos-gke
工具建立 GKE on AWS 環境,或是手動建立 AWS IAM 設定檔。anthos-gke 工具
使用
terraform output
指令,搜尋iamInstanceProfile
的值。terraform output | grep iamInstanceProfile
如果您使用
anthos- gke
工具建立 GKE on AWS 環境,輸出內容會如下所示:iamInstanceProfile: gke-CLUSTER_ID-controlplane iamInstanceProfile: gke-CLUSTER_ID-nodepool
其中 CLUSTER_ID 是叢集 ID。複製
gke-CLUSTER_ID-controlplane
的值,以供下個步驟使用。手動建立
使用下列指令檢查
terraform output
的輸出內容:terraform output | less
捲動輸出內容,在 AWSCluster 定義後找到 iamInstanceProfile。
kind: AWSCluster metadata: name: cluster-0 spec: ... controlPlane: ... iamInstanceProfile: INSTANCE_PROFILE_NAME
複製
INSTANCE_PROFILE_NAME
的值,以供下一個步驟使用。如要授予控制平面 EBS 磁碟區的存取權,請將
gke-xxxxxx-controlplane
AWS IAM 設定檔新增為 AWS KMS 金鑰的主要使用者,該金鑰用於加密 EBS 磁碟區。
後續步驟
- 在 GKE on AWS 中使用額外的儲存空間驅動程式。