使用 Azure Kubernetes Fleet Manager 的智慧型手機跨叢集 Kubernetes 資源放置
應用程式開發人員通常需要將 Kubernetes 資源部署至多個叢集中。 車隊操作員通常需要根據啟發學習法來挑選工作負載的最佳叢集,例如計算成本,或記憶體和 CPU 等可用資源。 以手動方式跨多個叢集建立、更新和追蹤這些 Kubernetes 資源是一項繁瑣的工作。 本文涵蓋 Azure Kubernetes Fleet Manager (Fleet) 如何讓您使用智慧型手機 Kubernetes 資源放置功能來解決這些案例。
概觀
Fleet 提供資源放置功能,可根據下列叢集屬性做出排程決策:
- 節點計數
- 目標成員叢集中的計算/記憶體成本
- 目標成員叢集中的資源 (CPU/記憶體) 可用性
閱讀資源傳播概念概觀,以瞭解本操作說明中使用的概念。
必要條件
具有有效訂用帳戶的 Azure 帳戶。 免費建立帳戶。
您必須有一或多個成員叢集的 Fleet 資源。 如果沒有,請遵循 快速入門 來建立具有中樞叢集的 Fleet 資源,然後將 Azure Kubernetes Service (AKS) 叢集加入為成員。
建議: 請確定您已設定 AKS 成員叢集,以便使用您感興趣的叢集屬性來測試放置位置(位置、節點計數、資源或成本)。
設定下列環境變數:
export GROUP=<resource-group> export FLEET=<fleet-name> export MEMBERCLUSTER01=<cluster01> export MEMBERCLUSTER02=<cluster02>
您需要安裝 Azure CLI 2.58.0 版或更新版本,才能完成此操作說明。 若要安裝或升級,請參閱安裝 Azure CLI。
如果您還沒有它,您可以使用下列命令來安裝 Kubernetes CLI (kubectl):
az aks install-cli
您也需要
fleet
Azure CLI 延伸模組,執行以下命令即可安裝:az extension add --name fleet
az extension update
執行 命令以更新至發行的最新版本的延伸模組:az extension update --name fleet
授權 kubectl 連線到艦隊中樞叢集:
az fleet get-credentials --resource-group $GROUP --name $FLEET
檢查成員叢集屬性
針對您新增的每個成員叢集重複這些步驟。
藉由查詢中樞叢集,擷取成員叢集的標籤、屬性和資源。 輸出為 YAML,讓您可以讀取結果。
kubectl get membercluster $MEMBERCLUSTER01 –o yaml
產生的 YAML 檔案包含可用來建置放置原則的詳細數據(標籤和屬性)。
apiVersion: cluster.kubernetes-fleet.io/v1 kind: MemberCluster metadata: annotations: ... labels: fleet.azure.com/location: eastus2 fleet.azure.com/resource-group: resource-group fleet.azure.com/subscription-id: 8xxxxxxx-dxxx-4xxx-bxxx-xxxxxxxxxxx8 name: cluster01 resourceVersion: "123456" uid: 7xxxxxxx-5xxx-4xxx-bxxx-xxxxxxxxxxx4 spec: ... status: ... properties: kubernetes-fleet.io/node-count: observationTime: "2024-09-19T01:33:54Z" value: "2" kubernetes.azure.com/per-cpu-core-cost: observationTime: "2024-09-19T01:33:54Z" value: "0.073" kubernetes.azure.com/per-gb-memory-cost: observationTime: "2024-09-19T01:33:54Z" value: "0.022" resourceUsage: allocatable: cpu: 3800m memory: 10320392Ki available: cpu: 2740m memory: 8821256Ki capacity: cpu: "4" memory: 14195208Ki
針對每個成員叢集重複此步驟,以便識別可在原則中使用的標籤和屬性。
準備工作負載以供放置
接下來,將工作負載發佈至我們的中樞叢集,使其可以放在成員叢集上。
在中樞叢集上建立工作負載的命名空間。
kubectl create namespace test-app
範例工作負載可以部署到中樞叢集上的新命名空間。 由於這些 Kubernetes 資源類型不需要 封裝 ,因此可以在不需變更的情況下部署它們。
將下列 YAML 儲存至名為 的
sample-workload.yaml
檔案。apiVersion: v1 kind: Service metadata: name: nginx-service namespace: test-app spec: selector: app: nginx ports: - protocol: TCP port: 80 targetPort: 80 type: LoadBalancer --- apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment namespace: test-app spec: selector: matchLabels: app: nginx replicas: 2 template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:1.16.1 ports: - containerPort: 80
使用 命令將工作負載定義部署至中樞叢集。
kubectl apply -f sample-workload.yaml
部署工作負載定義后,現在可以測試車隊的智慧放置功能。
測試工作負載放置原則
您可以使用下列範例以及 概念文件,作為撰寫您自己的 ClusterResourcePlacement 指南。
注意
如果您想要試用每個範例原則,請務必刪除先前的ClusterResourcePlacement。
根據叢集節點計數放置
此範例會使用 Descending
順序來顯示屬性排序器,這表示機隊偏好具有較高節點計數的叢集。
具有最高節點計數的叢集將接收 20 的權數,並且具有最低節點計數的叢集將接收 0。 其他叢集會接收使用權數計算公式計算的比例權數。
apiVersion: placement.kubernetes-fleet.io/v1
kind: ClusterResourcePlacement
metadata:
name: crp-demo
spec:
resourceSelectors:
- group: ""
kind: Namespace
name: test-app
version: v1
policy:
placementType: PickN
numberOfClusters: 10
affinity:
clusterAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 20
preference:
metricSorter:
name: kubernetes-fleet.io/node-count
sortOrder: Descending
使用標籤選取器和屬性排序器放置
在此範例中,叢集只有在具有卷標 env=prod
時才會收到權數。 如果符合該標籤條件約束,則叢集會根據該成員叢集中的總 CPU 數量來指定比例加權。
此範例示範如何使用標籤選取器和屬性排序器進行 preferredDuringSchedulingIgnoredDuringExecution
親和性。 未透過標籤選取器之成員叢集將不會取得任何權數。 滿足標籤選取器的成員叢集接收屬性排序器下指定的比例權數。
apiVersion: placement.kubernetes-fleet.io/v1
kind: ClusterResourcePlacement
metadata:
name: crp-demo
spec:
resourceSelectors:
- group: ""
kind: Namespace
name: test-app
version: v1
policy:
placementType: PickN
numberOfClusters: 10
affinity:
clusterAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 20
preference:
labelSelector:
matchLabels:
env: prod
metricSorter:
name: resources.kubernetes-fleet.io/total-cpu
sortOrder: Descending
根據記憶體和 CPU 核心成本放置
由於此範例中的排序器有 Ascending
訂單,機隊偏好具有較低記憶體和 CPU 核心成本的叢集。 記憶體和 CPU 核心成本最低的叢集會收到 20 的權數,而最高叢集會收到 0。 其他叢集接收使用權數計算公式計算的比例權數。
apiVersion: placement.kubernetes-fleet.io/v1
kind: ClusterResourcePlacement
metadata:
name: crp-demo
spec:
resourceSelectors:
- group: ""
kind: Namespace
name: test-app
version: v1
policy:
placementType: PickN
numberOfClusters: 2
affinity:
clusterAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 20
preference:
propertySorter:
name: kubernetes.azure.com/per-gb-memory-core-cost
sortOrder: Ascending
- weight: 20
preference:
propertySorter:
name: kubernetes.azure.com/per-cpu-core-cost
sortOrder: Ascending
檢視放置狀態
如果您想要檢視位置的狀態,您可以使用 Azure 入口網站 或 kubectl 命令。
如需有關如何檢視放置進度的詳細數據,請參閱 傳播資源快速入門。
清除資源
如需有關如何透過 Azure 入口網站 或 kubectl 命令移除叢集資源放置的詳細數據,請參閱傳播資源快速入門的清除資源一節。
下一步
若要深入了解資源傳播,請參閱下列資源: