共用方式為


使用 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 命令移除叢集資源放置的詳細數據,請參閱傳播資源快速入門清除資源一節。

下一步

若要深入了解資源傳播,請參閱下列資源: