共用方式為


使用 Azure CLI 建立 Kubernetes 叢集

適用於:Azure Stack HCI 版本 23H2

本文說明如何使用 Azure CLI 在 Azure Stack HCI 中建立 Kubernetes 叢集。 工作流程如下︰

  1. 使用 Azure CLI 在 Azure Stack HCI 23H2 中建立 Kubernetes 叢集。 叢集預設為 Azure Arc 連線。
  2. 建立叢集時,您會提供 Microsoft Entra 群組,其中包含具有 Kubernetes 叢集系統管理員存取權之 Microsoft Entra 用戶清單。
  3. 使用 kubectl 和您的 Microsoft Entra ID 存取叢集。
  4. 使用叢集中的 Web 前端和 Redis 實例執行範例多容器應用程式。

開始之前

  • 開始之前,請確定您有內部部署基礎結構系統管理員的下列詳細數據:
    • Azure 訂 用帳戶標識碼 - Azure Stack HCI 用於部署和註冊的 Azure 訂用帳戶標識碼。
    • 自定義位置識別碼 - Azure Resource Manager 自定義位置的識別碼。 自定義位置是在 Azure Stack HCI 叢集部署期間設定。 基礎結構管理員應該提供自定義位置的 Resource Manager標識符。 需要此參數才能建立 Kubernetes 叢集。 如果基礎結構管理員提供自定義位置名稱和資源組名,您也可以使用 az customlocation show --name "<custom location name>" --resource-group <azure resource group> --query "id" -o tsv來取得 Resource Manager 識別碼。
    • 網路標識碼 - 遵循下列步驟建立的 Azure Stack HCI 邏輯網路的 Azure Resource Manager 標識符。 您的系統管理員應該提供邏輯網路的標識碼。 需要此參數才能建立 Kubernetes 叢集。 如果您知道建立邏輯網路的資源群組,您也可以使用 az stack-hci-vm network lnet show --name "<lnet name>" --resource-group <azure resource group> --query "id" -o tsv 來取得 Azure Resource Manager 識別碼。
  • 您可以在本機開發機器中執行本文中的步驟,在遠端 Azure Stack HCI 部署上建立 Kubernetes 叢集。 請確定您在開發電腦上有最新版的 Az CLI 。 您也可以選擇使用 az upgrade升級 Az CLI 版本。
  • 若要從任何地方連線到 Kubernetes 叢集,請建立 Microsoft Entra 群組,並將成員新增至其中。 Microsoft Entra 群組中的所有成員都具有叢集的叢集管理員存取權。 請務必將自己新增為 Microsoft Entra 群組的成員。 如果您未自行新增,就無法使用 kubectl 存取 Kubernetes 叢集。 如需建立 Microsoft Entra 群組和新增使用者的詳細資訊,請參閱管理 Microsoft Entra 群組和群組成員資格
  • 在您的開發電腦上下載並安裝 kubectl。 Kubernetes 命令行工具 kubectl 可讓您對 Kubernetes 叢集執行命令。 您可以使用 kubectl 來部署應用程式、檢查和管理叢集資源,以及檢視記錄。

安裝 Azure CLI 擴充功能

執行下列命令以安裝必要的 Azure CLI 擴充功能:

az extension add -n aksarc --upgrade
az extension add -n customlocation --upgrade
az extension add -n stack-hci-vm --upgrade
az extension add -n connectedk8s --upgrade

建立 Kubernetes 叢集

az aksarc create使用 命令在 AKS Arc 中建立 Kubernetes 叢集。執行此命令之前,請務必先登入 Azure。 如果您有多個 Azure 訂用帳戶,請使用 az account set 命令選取適當的訂用帳戶標識碼。

az aksarc create -n $aksclustername -g $resource_group --custom-location $customlocationID --vnet-ids $logicnetId --aad-admin-group-object-ids $aadgroupID --generate-ssh-keys --load-balancer-count 0  --control-plane-ip $controlplaneIP

幾分鐘後,命令會完成並傳回關於叢集的 JSON 格式資訊。

連線至 Kubernetes 叢集

現在您可以從開發電腦執行 az connectedk8s proxy 命令,以連線到 Kubernetes 叢集。 執行此命令之前,請務必先登入 Azure。 如果您有多個 Azure 訂用帳戶,請使用 az account set 命令選取適當的訂用帳戶標識碼。

此命令會將 Kubernetes 叢集的 kubeconfig 下載到您的開發電腦,並開啟 Proxy 連線通道至內部部署 Kubernetes 叢集。 只要命令執行,通道就會開啟。 只要您想要存取叢集,即可讓此命令執行。 如果逾時,請關閉 CLI 視窗,開啟全新的視窗,然後再次執行命令。

您必須擁有裝載 Kubernetes 叢集的資源群組參與者許可權,才能成功執行下列命令:

az connectedk8s proxy --name $aksclustername --resource-group $resource_group --file .\aks-arc-kube-config

預期輸出:

Proxy is listening on port 47011
Merged "aks-workload" as current context in .\\aks-arc-kube-config
Start sending kubectl requests on 'aks-workload' context using
kubeconfig at .\\aks-arc-kube-config
Press Ctrl+C to close proxy.

讓此工作階段保持執行狀態,並從不同的終端機/命令提示字元連線到 Kubernetes 叢集。 執行 kubectl get 命令,確認您可以連線到 Kubernetes 叢集。 這個指令會傳回叢集節點的清單:

kubectl get node -A --kubeconfig .\aks-arc-kube-config

下列輸出範例顯示先前步驟中建立的節點。 確定節點的狀態為就緒

NAME             STATUS ROLES                AGE VERSION
moc-l0ttdmaioew  Ready  control-plane,master 34m v1.24.11
moc-ls38tngowsl  Ready  <none>               32m v1.24.11

部署應用程式

Kubernetes 資訊清單檔會定義叢集所需的狀態,例如要執行哪些容器映像。

您可以使用指令清單來建立執行 Azure 投票應用程式所需的所有物件。 此資訊清單包含兩個 Kubernetes 部署

  • 範例 Azure Vote Python 應用程式。
  • Redis 執行個體。

也會建立兩個 Kubernetes 服務

  • Redis 執行個體的內部服務。
  • 從網際網路存取 Azure Vote 應用程式的外部服務。

建立名為 azure-vote.yaml 的檔案,並在下列指令清單中複製:

apiVersion: apps/v1 
    kind: Deployment 
    metadata: 
      name: azure-vote-back 
    spec: 
      replicas: 1 
      selector: 
        matchLabels: 
          app: azure-vote-back 
      template: 
        metadata: 
          labels: 
            app: azure-vote-back 
        spec: 
          nodeSelector: 
            "kubernetes.io/os": linux 
          containers: 
          - name: azure-vote-back 
            image: mcr.microsoft.com/oss/bitnami/redis:6.0.8 
            env: 
            - name: ALLOW_EMPTY_PASSWORD 
              value: "yes" 
            resources: 
              requests: 
                cpu: 100m 
                memory: 128Mi 
              limits: 
                cpu: 250m 
                memory: 256Mi 
            ports: 
            - containerPort: 6379 
              name: redis 
    ---
    apiVersion: v1
    kind: Service 
    metadata: 
      name: azure-vote-back 
    spec: 
      ports: 
      - port: 6379 
      selector: 
        app: azure-vote-back 
    --- 
    apiVersion: apps/v1 
    kind: Deployment 
    metadata: 
      name: azure-vote-front 
    spec: 
      replicas: 1 
      selector: 
        matchLabels: 
          app: azure-vote-front 
      template: 
        metadata: 
          labels: 
            app: azure-vote-front 
        spec: 
          nodeSelector: 
            "kubernetes.io/os": linux 
          containers: 
          - name: azure-vote-front 
            image: mcr.microsoft.com/azuredocs/azure-vote-front:v1 
            resources: 
              requests: 
                cpu: 100m 
                memory: 128Mi 
              limits: 
                cpu: 250m 
                memory: 256Mi 
            ports: 
            - containerPort: 80 
            env: 
            - name: REDIS 
              value: "azure-vote-back" 
    --- 
    apiVersion: v1 
    kind: Service 
    metadata: 
      name: azure-vote-front 
    spec: 
      type: LoadBalancer 
      ports: 
      - port: 80 
      selector: 
        app: azure-vote-front

使用 kubectl apply 命令部署應用程式,並指定 YAML 的名稱:

kubectl apply -f azure-vote.yaml --kubeconfig .\\aks-arc-kube-config

下列範例輸出顯示已成功建立的部署和服務:

deployment "azure-vote-back" created
service "azure-vote-back" created
deployment "azure-vote-front" created
service "azure-vote-front" created

測試應用程式

執行應用程式時,Kubernetes 服務會向網際網路公開前端應用程式。 此程序需要數分鐘的時間完成。

使用 kubectl get service 命令搭配 --watch 引數來監視進度。

kubectl get service azure-vote-front --watch --kubeconfig .\aks-arc-kube-config

azure-vote-front 服務的 EXTERNAL-IP 輸出一開始會顯示為 擱置中。

NAME             TYPE         CLUSTER-IP EXTERNAL-IP PORT(S)      AGE
azure-vote-front LoadBalancer 10.0.37.27 <pending>   80:30572/TCP 6s

當 EXTERNAL-IP 位址從擱置變更為實際的公用 IP 地址之後,請使用 CTRL-C 停止 kubectl watch 程式。 下列範例輸出顯示指派給服務的有效公用 IP 位址:

azure-vote-front LoadBalancer 10.0.37.27 52.179.23.131 80:30572/TCP 2m

若要查看作用中的 Azure 投票應用程式,請開啟網頁瀏覽器連至服務的外部 IP 位址。

選取叢集

az aksarc delete執行 命令來清除您所建立的叢集:

az aksarc delete --resource-group $aksclustername --name $resource_group

下一步