Azure Arc 所啟用 AKS 中應用程式的記憶體選項
適用於:Azure Stack HCI 22H2 上的 AKS、Windows Server 上的 AKS
使用 Azure Arc 啟用的 Azure Kubernetes Service 在 AKS 部署中執行的應用程式可能需要儲存和擷取數據。 對於某些應用程式工作負載,數據可以在刪除Pod時,在不需要的節點上使用本機、快速的記憶體(Kubernetes 會使用 Pod 來執行應用程式的實例)。
其他工作負載可能需要在較一般數據磁碟區上保存的記憶體。 多個 Pod 可能需要共用相同的數據磁碟區,或在不同節點上重新排程 Pod 時重新附加數據磁碟區。 此外,如果 Pod 包含敏感資料或應用程式組態資訊,您可能需要記憶體選項。
本文介紹在 AKS Arc 中為應用程式提供記憶體的核心概念,包括:
- 磁碟區
- 永續性磁碟區
- 儲存類別
- 永續性磁碟區宣告 (PV)
磁碟區
應用程式通常必須能夠儲存和擷取資料。 Kubernetes 通常會將個別 Pod 視為暫存、可處置的資源,因此應用程式可以使用不同的方法來使用和保存數據。 磁碟區就是可跨 Pod 和應用程式生命週期儲存、擷取和保存資料的方式之一。
在 Kubernetes 中,磁碟區不僅代表儲存和擷取資訊的傳統。 Kubernetes 磁碟區也可用來將數據插入 Pod,以供容器使用。 一些常見的 Kubernetes 磁碟區類型包括:
emptyDir - 此磁碟區通常用於 Pod 的暫存空間。 Pod 內的所有容器都可存取此磁碟區上的資料。 寫入此磁碟區類型的數據只會在 Pod 的存留期保存 - 刪除 Pod 時,會刪除磁碟區。 此磁碟區通常會使用基礎本機節點磁碟記憶體,不過它也可以只存在於節點的記憶體中。
secret - 此磁碟區用來將機密數據,例如密碼包含在 Pod 中。 首先,您會使用 Kubernetes API 建立秘密。 當您定義 Pod 或部署時,您可以要求特定的秘密。 秘密只會提供給具有需要它的排程Pod的節點,而且秘密會儲存在 tmpfs 中,而不是寫入磁碟。 刪除需要秘密之節點上的最後一個 Pod 時,會從節點的 tmpfs 中刪除秘密。 祕密會儲存在指定的命名空間內,而且只能由相同命名空間內的 Pod 存取。
configMap - 此磁碟區類型可用來將機碼/值組屬性插入 Pod,例如應用程式組態資訊。 除了在容器映像中定義應用程式組態資訊,您可以將它定義為 Kubernetes 資源,以在部署 Pod 時輕鬆更新並套用至新的 Pod 實例。 類似於使用秘密,您會先使用 Kubernetes API 建立 ConfigMap 。 當您定義Pod或部署時,即可要求此 ConfigMap 。 ConfigMap 會儲存在指定的命名空間內,而且只能由相同命名空間內的 Pod 存取。
永續性磁碟區
磁碟區會定義並建立為 Pod 生命週期的一部分,且在 Pod 刪除之後即不存在。 如果 Pod 在維護事件期間重新排程於不同的主機上,Pod 通常會預期其儲存體能持續保存,尤其是在 StatefulSets 中。 持續性磁碟區是由 Kubernetes API 建立和管理的儲存體資源,其可在個別 Pod 的存留期之外存在。
您可以使用 VHDX 支援的 AKS 磁碟區,這些磁碟區會掛接為 ReadWriteOnce ,且一次可存取單一節點。 或者,您可以使用SMB或NFS檔案共用所支援的AKS檔案磁碟區。 這些會掛接為 ReadWriteMany ,並可供多個節點同時使用。
叢集管理員可以以靜態方式建立永續性磁碟區,或 Kubernetes API 伺服器可以動態建立磁碟區。 如果 Pod 已排程並要求目前無法使用的記憶體,Kubernetes 可以建立基礎 VHDX 檔案,然後將它附加至 Pod。 動態布建會使用 StorageClass 來識別需要建立的記憶體類型。
儲存類別
若要定義記憶體的不同層級(和位置),您可以建立 StorageClass。 StorageClass 也會定義回收Policy。 此 回收原則 會控制刪除Pod時基礎記憶體資源的行為,而且可能不再需要永續性磁碟區。 基礎記憶體資源可以刪除或保留,以便與未來的 Pod 搭配使用。
在 AKS Arc 中 ,預設 記憶體類別會自動建立,並使用 CSV 來建立 VHDX 支援的磁碟區。 回收原則可確保刪除使用基礎 VHDX 的永續性磁碟區時,會刪除基礎 VHDX。 儲存類別也會將持續性磁碟區設定為可擴充,因此您只需要編輯具有新大小的持續性磁碟區索取。
如果未為永續性磁碟區指定 StorageClass,則會使用預設 StorageClass。 要求永續性磁碟區時,請確定它們使用適當的記憶體。 您可以針對其他需求建立 StorageClass 。
永續性磁碟區宣告
PersistentVolumeClaim 會要求特定 StorageClass 和大小的 ReadWriteOnce 或 ReadWriteMany 記憶體。 Kubernetes API 伺服器可以在 AKS Arc 中動態布建基礎記憶體資源,如果沒有現有的資源可以根據定義的 StorageClass 來完成宣告。 在磁碟區連線至 Pod 後,Pod 定義即會包含磁碟區掛接。
一旦將可用的記憶體資源指派給要求它的 Pod,PersistentVolume 就會系結至 PersistentVolumeClaim。 永續性磁碟區與宣告之間有 1:1 的對應。
下列範例 YAML 指令清單會顯示使用預設 StorageClass 並要求 5Gi 磁碟的永續性磁碟區宣告:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: aks-hci-vhdx
spec:
accessModes:
- ReadWriteOnce
storageClassName: default
resources:
requests:
storage: 5Gi
當您建立 Pod 定義時,您可以指定永續性磁碟區宣告來要求所需的記憶體。 您接著也會指定 volumeMount
應用程式讀取與寫入資料的 。 下列範例 YAML 指令清單示範如何使用先前的永續性磁碟區宣告,在 掛接磁碟 /mnt/aks-hci
區:
kind: Pod
apiVersion: v1
metadata:
name: nginx
spec:
containers:
- name: myfrontend
image: k8s.gcr.io/nginx
volumeMounts:
- mountPath: "/mnt/aks-hci"
name: volume
nodeSelector:
kubernetes.io/os: linux
volumes:
- name: volume
persistentVolumeClaim:
claimName: aks-hci-vhdx
下列範例示範如何在 Windows 容器中掛接磁碟區,並指定驅動器號和路徑:
volumeMounts:
- mountPath: "d:"
name: volume
- mountPath: "c:\k"
name: k-dir