在 Azure Stack Hub 上使用 AKS 引擎部署 Kubernetes 叢集
您可以從執行 AKS 引擎的用戶端 VM,在 Azure Stack Hub 上部署 Kubernetes 叢集。 在本文中,我們會探討撰寫叢集規格、使用 apimodel.json 檔案部署叢集,以及使用 Helm 部署 MySQL 來檢查您的叢集。
定義叢集規格
您可以使用稱為 API 模型的 JSON 格式,在檔案檔案中指定叢集規格。 AKS 引擎會使用 API 模型中的叢集規格來建立叢集。
您可以在 AKS 引擎和對應的映像對應中找到 OS 和 AKS 引擎版本號碼的 API 模型範例。
- 在資料表中尋找您的 AKS 引擎版本號碼,
v.0.63.0
例如 。 - 在 [API 模型範例] 資料表中,選取並開啟 OS 的連結。
- 選取 [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 模型。
首先,使用適用於Linux或 Windows 的 Azure Stack Hub API 模型檔案。 從電腦安裝 AKS 引擎執行:
curl -o kubernetes-azurestack.json <URL for the API Model>
注意
如果您已中斷連線,您可以下載檔案,並手動將其複製到您打算編輯該檔案的已中斷連線計算機。 您可以使用 PuTTY 或 WinSCP 之類的工具,將檔案複製到 Linux 機器。
若要在編輯器中開啟 API 模型,您可以使用 nano:
nano ./kubernetes-azurestack.json
注意
如果您沒有安裝 nano,您可以在 Ubuntu 上安裝 nano:
sudo apt-get install nano
。在kubernetes-azurestack.json檔案中,尋找 orchestratorRelease 和 orchestratorVersion。 選取其中一個支援的 Kubernetes 版本; 您可以在版本資訊中找到版本資料表。 將
orchestratorRelease
指定為 x.xx,並將 orchestratorVersion 指定為 x.xx.x。 如需目前版本的清單,請參閱 支援的AKS引擎版本尋找
customCloudProfile
並提供租使用者入口網站的 URL。 例如:https://portal.local.azurestack.external
。如果您使用 AD FS,請新增
"identitySystem":"adfs"
。 例如,"customCloudProfile": { "portalURL": "https://portal.local.azurestack.external", "identitySystem": "adfs" },
注意
如果您使用Microsoft身分識別系統的 Entra ID,則不需要新增 identitySystem 字段。
在 中
masterProfile
,設定下列欄位:欄位 描述 dnsPrefix 輸入將用來識別 VM 主機名的唯一字串。 例如,以資源組名為基礎的名稱。 計數 輸入您想要用於部署的主圖形數目。 HA 部署的最小值為 3,但非 HA 部署允許 1。 vmSize 輸入 Azure Stack Hub 所支援的大小,例如 Standard_D2_v2
。散發版本 輸入 aks-ubuntu-18.04
或aks-ubuntu-20.04
。在更新中
agentPoolProfiles
:欄位 描述 計數 輸入您要部署的代理程式數目。 每個訂用帳戶要使用的節點數目上限為50。 如果您要為每個訂用帳戶部署多個叢集,請確定代理程式總數不會超過 50 個。 請務必使用範例 API 模型 JSON 檔案中指定的組態專案。 vmSize 輸入 Azure Stack Hub 所支援的大小,例如 Standard_D2_v2
。散發版本 輸入 aks-ubuntu-18.04
、aks-ubuntu-20.04
或Windows
。
用於Windows
將在 Windows 上執行的代理程式。 例如,請參閱 kubernetes-windows.json在更新中
linuxProfile
:欄位 描述 adminUsername 輸入 VM 系統管理員用戶名稱。 ssh 輸入將用於搭配 VM 進行 SSH 驗證的公鑰。 使用 ssh-rsa
,然後使用 索引鍵。 如需建立公鑰的指示,請參閱 建立 Linux 的 SSH 密鑰。如果您要部署至自定義虛擬網路,您可以在將 Kubernetes 叢集部署至自定義虛擬網路的 API 模型中,找到尋找必要索引鍵和值並將其新增至適當數位的指示。
注意
適用於 Azure Stack Hub 的 AKS 引擎不允許您提供自己的憑證來建立叢集。
如果您使用 Windows,請在 更新 和
adminPassword
的值adminUsername:
中windowsProfile
:"windowsProfile": { "adminUsername": "azureuser", "adminPassword": "", "sshEnabled": true }
API 模型的詳細資訊
- 如需 API 模型中所有可用選項的完整參考,請參閱 叢集定義。
- 如需 Azure Stack Hub 特定選項的醒目提示,請參閱 Azure Stack Hub 叢集定義細節。
使用 ASDK 時新增憑證
如果您要在 Azure Stack 開發工具套件 (ASDK) 上部署叢集,並使用 Linux,您必須將跟證書新增至執行 AKS 引擎的用戶端 VM 的受信任證書存儲。
- 在此目錄中的 VM 中尋找跟憑證:
/var/lib/waagent/Certificates.pem.
- 複製憑證檔案:
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 數目仍有足夠空間。
繼續部署叢集:
檢閱 Azure Stack Hub CLI 旗標上 AKS 引擎的可用參數。
參數 範例 描述 azure-env AzureStackCloud 若要向 AKS 引擎指出您的目標平臺是 Azure Stack Hub 使用 AzureStackCloud
。identity-system adfs 選擇性。 如果您使用 Active Directory 同盟服務(AD FS),請指定您的身分識別管理解決方案。 location 本機 Azure Stack Hub 的區域名稱。 針對 ASDK,區域會設定為 local
。資源群組 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
如果因為某些原因,執行在建立輸出目錄之後失敗,您可以修正問題並重新執行命令。 如果您要重新執行部署,且之前曾使用相同的輸出目錄,AKS 引擎會傳回錯誤,指出目錄已經存在。 您可以使用 旗標覆寫現有的目錄:
--force-overwrite
。將 AKS 引擎叢集組態儲存在安全的加密位置。
找出檔案 apimodel.json。 將它儲存到安全的位置。 此檔案將做為所有其他 AKS 引擎作業的輸入。
產生的 apimodel.json 檔案包含您在輸入 API 模型中使用的服務主體、秘密和 SSH 公鑰。 檔案也有 AKS 引擎執行所有其他作業所需的所有其他元數據。 如果您遺失檔案,AKS 引擎將無法設定叢集。
秘密未 加密。 將檔案保留在加密且安全的地方。
驗證叢集
聯機到 kubectl
來檢查叢集,取得資訊,然後取得節點的狀態。
取得要
kubeconfig
連線到控制平面的檔案。- 如果您已安裝
kubectl
,請檢查kubeconfig
此目錄路徑/kubeconfig/kubeconfig.json
中新建立叢集的檔案。 您可以將 新增/kubeconfig.json
至目錄,.kube
並將它重新命名為 「config」,以存取新的叢集。
如果您尚未安裝 ,請造訪安裝kubectl
工具以安裝 Kubernetes 命令行工具。 否則,請遵循下列指示,從其中一個控制平面節點存取叢集。
- 如果您已安裝
使用 Azure Stack Hub 入口網站取得其中一個控制平面節點的公用 IP 位址。
從可存取 Azure Stack Hub 實例的電腦,使用 PuTTY 或 MobaXterm 等用戶端,透過 SSH 連線到新的控制平面節點。
針對 SSH 使用者名稱,請使用 「azureuser」 和您為叢集部署所提供的金鑰組私鑰檔案。
檢查叢集端點是否正在執行:
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
然後,檢閱節點狀態:
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 叢集時發生錯誤時,您可以檢查:
- 您是否使用正確的服務主體認證 (SPN)?
- SPN 是否有 Azure Stack Hub 訂用帳戶的「參與者」角色?
- 您的 Azure Stack Hub 方案中有足夠大的配額嗎?
- Azure Stack Hub 實例是否已套用修補程式或升級?
如需詳細資訊,請參閱 Azure/aks-engine-azurestack GitHub 存放庫中的疑難解答文章。
輪替您的服務主體秘密
使用 AKS 引擎部署 Kubernetes 叢集之後,會使用服務主體 (SPN) 來管理與 Azure Stack Hub 實例上 Azure Resource Manager 的互動。 在某些時候,服務主體的秘密可能會過期。 如果您的秘密過期,您可以透過下列方式重新整理認證:
- 使用新的服務主體秘密更新每個節點。
- 或更新 API 模型認證並執行升級。
手動更新每個節點
- 從雲端操作員取得服務主體的新秘密。 如需 Azure Stack Hub 的指示,請參閱 使用應用程式身分識別來存取 Azure Stack Hub 資源。
- 使用雲端操作員所提供的新認證,在每個節點上更新 /etc/kubernetes/azure.json 。 進行更新之後,請同時
kubele
重新啟動 和kube-controller-manager
。
使用 aks-engine 更新更新叢集
或者,您可以使用更新的 .json 檔案,將apimodel.json中的認證取代為相同或更新的 Kubernetes 版本,並執行升級。 如需升級模型的指示,請參閱 在 Azure Stack Hub 上升級 Kubernetes 叢集