在 Azure Stack Hub 上使用 AKS 引擎部署 Kubernetes 叢集

您可以從執行 AKS 引擎的用戶端 VM,在 Azure Stack Hub 上部署 Kubernetes 叢集。 在本文中,我們將探討撰寫叢集規格、使用 apimodel.json 檔案部署叢集,以及使用 Helm 部署 MySQL 來檢查您的叢集。

定義叢集規格

您可以使用稱為 API 模型的 JSON 格式,在文件檔案中指定叢集規格。 AKS 引擎會使用 API 模型中的叢集規格來建立叢集。

您可以在 AKS 引擎和對應的映像對應中,找到適用於您 OS 的 API 模型範例,以及最新版的 AKS 引擎版本號碼。

  1. 在表格中找到您的 AKS 引擎版本號碼,例如 v.0.63.0
  2. API 模型範例表格中,選取並開啟您的 OS 連結。
  3. 選取 [Raw]。 您可以使用下列指示中的 URL。

API 模型的 URL 可能如下所示:

https://raw.githubusercontent.com/Azure/aks-engine-azurestack/master/examples/azure-stack/kubernetes-azurestack.json

針對下列每個範例,將 <URL for the API Model> 取代為此 URL。

更新 API 模型

本節將探討如何為叢集建立 API 模型。

  1. 一開始請使用適用於 Linux 或 Windows 的 Azure Stack Hub API 模型檔案。 在已安裝 AKS 引擎的機器上執行:

    curl -o kubernetes-azurestack.json <URL for the API Model>
    

    注意

    如果您已中斷連線,則可以下載該檔案,並將其手動複製到您打算在其中進行編輯的已中斷連線機器。 您可以使用 PuTTY 或 WinSCP 等工具,將該檔案複製到 Linux 機器。

  2. 若要在編輯器中開啟 API 模型,您可以使用 Nano:

    nano ./kubernetes-azurestack.json
    

    注意

    如果您尚未安裝 nano,則可以在 Ubuntu 上安裝 nano:sudo apt-get install nano

  3. kubernetes-azurestack.json 檔案中,尋找 orchestratorRelease 和 orchestratorVersion。 選取其中一個支援的 Kubernetes 版本;您可以在版本資訊中找到版本表格。 將 orchestratorRelease 指定為 x.xx,並將 orchestratorVersion 指定為 x.xx.x。 如需目前版本的清單,請參閱支援的 AKS 引擎版本

  4. 尋找 customCloudProfile,然後提供租用戶入口網站的 URL。 例如: https://portal.local.azurestack.external

  5. 如果您使用 AD FS,請新增 "identitySystem":"adfs"。 例如,

        "customCloudProfile": {
            "portalURL": "https://portal.local.azurestack.external",
            "identitySystem": "adfs"
        },
    

    注意

    如果您使用身分識別系統的Microsoft Entra識別碼,則不需要新增identitySystem欄位。

  6. masterProfile中,設定下列欄位:

    欄位 描述
    dnsPrefix 輸入可用於識別 VM 主機名稱的唯一字串。 例如,以資源群組名稱為基礎的名稱。
    count 輸入您想要用於部署的主機數目。 HA 部署的最小值為 3 個,但非 HA 部署則允許 1 個。
    vmSize 輸入 Azure Stack Hub 支援的大小,例如 Standard_D2_v2
    發行版本 輸入 aks-ubuntu-18.04aks-ubuntu-20.04
  7. agentPoolProfiles 更新中:

    欄位 說明
    count 輸入您想要用於部署的代理程式數目。 每個訂用帳戶要使用的節點計數上限為 50。 如果您要為每個訂用帳戶部署多個叢集,請確定代理程式總數不超過 50 個。 請務必使用範例 API 模型 JSON 檔案中指定的設定項目。
    vmSize 輸入 Azure Stack Hub 支援的大小,例如 Standard_D2_v2
    發行版本 輸入 aks-ubuntu-18.04aks-ubuntu-20.04Windows
    針對將在 Windows 上執行的代理程式使用 Windows。 例如,請參閱 kubernetes-windows.json
  8. linuxProfile 更新中:

    欄位 描述
    adminUsername 輸入 VM 系統管理員的使用者名稱。
    ssh 輸入將用於與 VM 進行 SSH 驗證的公開金鑰。 使用 ssh-rsa,然後使用金鑰。 如需建立公開金鑰的指示,請參閱建立適用於 Linux 的 SSH 金鑰

    如果您要部署到自訂虛擬網路,可以在將 Kubernetes 叢集部署到自訂虛擬網路中找到尋找必要金鑰和值,並新增至 API 模型中適當陣列的指示。

    注意

    適用于 Azure Stack Hub 的 AKS 引擎不允許您提供自己的憑證來建立叢集。

  9. 如果您要使用 Windows,請在 windowsProfile 中更新 adminUsername:adminPassword 的值:

    "windowsProfile": {
    "adminUsername": "azureuser",
    "adminPassword": "",
    "sshEnabled": true
    }
    

API 模型的詳細資訊

使用 ASDK 時新增憑證

如果您要在 Azure Stack 開發工具組上部署叢集, (ASDK) 並使用 Linux,您必須將根憑證新增至執行 AKS 引擎之用戶端 VM 的受信任憑證存放區。

  1. 在下列目錄中找到 VM 的根憑證:/var/lib/waagent/Certificates.pem.
  2. 複製憑證檔案:
    sudo cp /var/lib/waagent/Certificates.pem /usr/local/share/ca-certificates/azurestacka.crt
    sudo update-ca-certificates
    

部署 Kubernetes 叢集

在收集完 API 模型中的所有必要值之後,就可以建立叢集了。 至此,您應該︰

要求 Azure Stack Hub 操作員:

  • 確認系統的健康情況、建議執行 Test-AzureStack 和 OEM 廠商的硬體監視工具。
  • 確認系統容量,包括記憶體、儲存體和公用 IP 等資源。
  • 提供與訂用帳戶相關聯的配額詳細資料,讓您可以確認您是否仍有足夠的空間可容納打算使用的 VM 數目。

繼續部署叢集:

  1. 在 Azure Stack Hub CLI 旗標上,檢閱 AKS 引擎的可用參數。

    參數 範例 描述
    azure-env AzureStackCloud 向 AKS 引擎指出目標平台是使用 AzureStackCloud 的 Azure Stack Hub。
    identity-system adfs 選擇性。 如果您要使用 Active Directory 同盟服務 (AD FS),請指定身分識別管理解決方案。
    location local Azure Stack Hub 的區域名稱。 針對 ASDK,區域會設定為 local
    resource-group kube-rg 輸入新資源群組的名稱,或選取現有的資源群組。 資源名稱必須是小寫的英數字元。
    api-model ./kubernetes-azurestack.json 叢集設定檔的路徑或 API 模型。
    output-directory kube-rg 輸入目錄名稱,以包含輸出檔 apimodel.json 和其他產生的檔案。
    client-id xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx 輸入服務主體 GUID。 當 Azure Stack Hub 系統管理員建立服務主體時,用戶端識別碼已識別為應用程式識別碼。
    client-secret xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx 輸入服務主體祕密。 這是您建立服務時所設定的用戶端密碼。
    subscription-id xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx 輸入訂用帳戶識別碼。 您必須為租使用者提供訂用帳戶。 不支援部署到系統管理訂閱。 如需詳細資訊,請參閱訂閱供應項目

    範例如下:

    注意

    針對 AKSe 0.75.3 版和更新版本,部署 AKS 引擎叢集的命令為 aks-engine-azurestack deploy

    aks-engine deploy \
    --azure-env AzureStackCloud \
    --location <for asdk is local> \
    --resource-group kube-rg \
    --api-model ./kubernetes-azurestack.json \
    --output-directory kube-rg \
    --client-id xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx \
    --client-secret xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx \
    --subscription-id xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx \
    --identity-system adfs # required if using AD FS
    
  2. 如果基於某些原因而導致在建立了輸出目錄後執行失敗,您可以更正問題並重新執行命令。 如果您要重新執行部署,而且之前已使用相同的輸出目錄,AKS 引擎會傳回錯誤,指出目錄已經存在。 您可以使用旗標來覆寫現有目錄:--force-overwrite

  3. 將 AKS 引擎叢集設定儲存在安全的加密位置。

    找出 apimodel.json檔案。 將其儲存到安全的位置。 此檔案將用來作為其他所有 AKS 引擎作業的輸入。

    產生的 apimodel.json 檔案包含您在輸入 API 模型中所使用的服務主體、秘密和 SSH 公開金鑰。 檔案也有 AKS 引擎執行所有其他作業所需的所有其他中繼資料。 如果您遺失檔案,AKS 引擎將無法設定叢集。

    祕密不會加密。 請將該檔案保存在加密的安全位置。

驗證叢集

連線到 kubectl 來檢查您的叢集,取得資訊,然後取得節點的狀態。

  1. 取得要連線到控制平面的 kubeconfig 檔案。

    • 如果您已安裝 kubectl ,請檢查 kubeconfig 此目錄路徑 /kubeconfig/kubeconfig.json 中新建立叢集的檔案。 您可以將 新增 /kubeconfig.json.kube 目錄,以存取新的叢集。
      如果您尚未安裝 kubectl,請瀏覽安裝工具以安裝 Kubernetes 命令列工具。 否則,請遵循下列指示,從其中一個控制平面節點存取叢集。
  2. 使用 Azure Stack Hub 入口網站,取得其中一個控制平面節點的公用 IP 位址。

  3. 從可存取 Azure Stack Hub 實例的電腦,使用 PuTTY 或 MobaXterm 之類的用戶端,透過 SSH 連線到新的控制平面節點。

  4. 針對 SSH 使用者名稱,請使用您為叢集部署所提供的金鑰組 「azureuser」 和私密金鑰檔案。

  5. 檢查叢集端點是否正在執行:

    kubectl cluster-info
    

    輸出應如下所示:

    Kubernetes master is running at https://democluster01.location.domain.com
    CoreDNS is running at https://democluster01.location.domain.com/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
    Metrics-server is running at https://democluster01.location.domain.com/api/v1/namespaces/kube-system/services/https:metrics-server:/proxy
    
  6. 然後,查看節點狀態:

    kubectl get nodes
    

    輸出應如下所示:

    k8s-linuxpool-29969128-0   Ready      agent    9d    v1.15.5
    k8s-linuxpool-29969128-1   Ready      agent    9d    v1.15.5
    k8s-linuxpool-29969128-2   Ready      agent    9d    v1.15.5
    k8s-master-29969128-0      Ready      master   9d    v1.15.5
    k8s-master-29969128-1      Ready      master   9d    v1.15.5
    k8s-master-29969128-2      Ready      master   9d    v1.15.5
    

針對叢集部署進行疑難排解

使用 AKS 引擎部署 Kubernetes 叢集時發生錯誤時,您可以檢查:

  1. 所使用的服務主體認證 (SPN) 是否正確?
  2. SPN 是否具有 Azure Stack Hub 訂用帳戶的「參與者」角色?
  3. Azure Stack Hub 方案中是否有夠大的配額?
  4. Azure Stack Hub 執行個體是否已套用修補程式或升級?

如需詳細資訊,請參閱Azure/aks-engine-azurestack GitHub 存放庫中的疑難排解文章。

輪替您的服務主體祕密

使用 AKS 引擎部署 Kubernetes 叢集之後,會使用服務主體 (SPN) 來管理與 Azure Stack Hub 執行個體上 Azure Resource Manager 的互動。 在某個時間點,此服務主體的祕密可能會過期。 如果您的祕密過期,您可以透過下列方式重新整理認證:

  • 使用新的服務主體祕密更新每個節點。
  • 或者,更新 API 模型認證並執行升級。

手動更新每個節點

  1. 向您的雲端操作員取得服務主體的新祕密。 如需 Azure Stack Hub 的指示,請參閱使用應用程式身分識別來存取 Azure Stack Hub 資源
  2. 使用雲端操作員所提供的新認證,在每個節點上更新 /etc/kubernetes/azure.json 。 進行更新之後,請同時重新開機 kubelekube-controller-manager

使用 aks-engine update 更新叢集

或者,您可以取代 apimodel.json 中的認證,並使用更新後的 .json 檔案執行升級至相同或更新的 Kubernetes 版本。 如需升級模型的指示,請參閱升級 Azure Stack Hub 上的 Kubernetes 叢集

後續步驟