為 Azure Stack Hub 上的 Azure Kubernetes Service 疑難排解
疑難排解概觀
為 Azure Kubernetes Service (AKS) 叢集疑難排解時,大部分層面與大半 Kubernetes 叢集並無差異。 可在 Kubernetes 網站上的疑難排解取得相關資訊。 還有另一項對 Azure Stack Hub 相當實用的資源,即診斷設定,可在 Azure Stack Hub 使用者入口網站上的 [AKS 叢集] 刀鋒視窗取得。
可在此刀鋒視窗收集下列資訊:
- kube-apiserver
- kube-audit
- kube-audit-admin
- kube-controller-manager
- kube-scheduler
- AllMetrics
收集來自叢集節點的記錄
為了對部分 AKS 叢集問題疑難排解,可能需要直接從叢集結點收集記錄。 可使用 GitHub 存放庫的指令碼 msazurestackworkloads/azurestack-gallery 從叢集節點收集記錄。 如果沒有這些碼,您就必須連線到叢集中的每個節點,以手動方式找出記錄並下載。
指令碼的目標在於簡化 Kubernetes 叢集相關記錄的收集工作。 該指令碼會自動建立叢集的快照集,並連線到各個叢集收集記錄。 此外指令碼也可以選擇性將收集到的記錄上傳到儲存體帳戶。
此工具是專為 Microsoft 支援小組所設計,可全方位收集叢集記錄。
指令碼需求
- 請確定控制平面節點 (NSG) 的網路安全性群組已公開 SSH 連接埠 22。
- 需有可存取您 Kubernetes 叢集的機器,或是您用來部署叢集的同一台機器。 若為 Windows 機器,請安裝 Git Bash 以執行 Bash 指令碼。
- 在將用來執行指令碼的機器上安裝 Azure CLI。 請確定您可以使用
Azure CLI
從該機器登入 Azure Stack 環境。 在 Azure Stack Hub 上安裝 Azure CLI 會提供相關指示,說明如何安裝和設定 Azure CLI 以管理您的 Azure Stack 雲端。 - 請使用
az account set --subscription <Subscription ID>
切換至 Kubernetes 叢集所部署的訂閱項目。 - 將指令碼的最新版本下載到機器上並將指令碼解壓縮。
記錄
該指令碼會自動執行下列記錄的收集程序:
- 目錄
/var/log/azure/
中的記錄檔 - 目錄
/var/log/kubeaudit
中的記錄檔 (kube 稽核記錄檔) - 記錄檔
/var/log/waagent.log
(waagent) - 記錄檔
/var/log/azure/deploy-script-dvm.log
(若使用 Azure Stack 的 Kubernetes Cluster Marketplace 項目部署) - 目錄
/etc/kubernetes/manifests
中的靜態資訊清單 - 目錄
/etc/kubernetes/addons
中的靜態附加元件 - Waagent 記錄
- kube-system 容器中繼資料與記錄
- kubelet 狀態與日誌
- etcd 狀態與日誌
- docker 狀態與日誌
- containerd 狀態與日誌
- kube-system 快照集
- Azure CNI 組態檔
- kubelet 組態檔
若為 Windows 節點,會再擷取一些記錄:
- 記錄檔
c:\Azure\CustomDataSetupScript.log
- kube-proxy 狀態與日誌
- containerd 狀態與日誌
- azure-vnet 記錄與 azure-vnet-telemetry 記錄
- Docker 的 ETW 事件
- Hyper-V 的 ETW 事件
- Azure CNI 組態檔
參數
參數 | 描述 | 必要 | 範例 |
---|---|---|---|
-h, --help | 列印命令使用方式。 | 否 | |
-u,--user | 叢集 VM 的系統管理員使用者名稱。 | yes | azureuser (預設值) |
-i, --identity-file | 與用來建立 Kubernetes 叢集的公開金鑰繫結的 SA 私密金鑰 (有時名為 'id_rsa')。 | yes | /rsa.pem (Putty) ~/.ssh/id_rsa (SSH) |
-g, --resource-group | Kubernetes 叢集資源群組 若為由 AKS Service 建立的叢集,受控資源群組的名稱會遵循 'MC_RESOURCEGROUP_CLUSTERNAME_LOCTION' 的模式。 | yes | k8sresourcegroup MC_AKSRP_k8scluster1_redmond |
-n, --user-namespace | 收集指定命名空間內容器的記錄。 如果未指定,則會收集來自所有命名空間的記錄。 | 否 | 監視 |
--upload-logs | 將擷取到的記錄保存在 Azure Stack Hub 儲存體帳戶中。 記錄可以在 KubernetesLogs 資源群組中找到。 | 否 | |
--api-model | 將 apimodel.json 檔案保存在 Azure Stack Hub 儲存體帳戶中。 若同時提供 --upload-logs 參數,則會將 apimodel.json 檔案上傳至儲存體帳戶。 | 否 | ./apimodel.json |
--disable-host-key-checking | 當指令碼執行時,會將 SSH 的 StrictHostKeyChecking 選項設定為 [否]。 只會在安全環境中使用。 | 否 |
範例
# switch to the subscription where the Kubernetes cluster is deployed.
az account set --subscription <Subscription ID>
# download the scripts.
mkdir -p $HOME/kuberneteslogs
cd $HOME/kuberneteslogs
curl -L https://github.com/msazurestackworkloads/azurestack-gallery/releases/download/diagnosis-v1.1.0/diagnosis-v1.1.0.tar.gz -o diagnosis.tar.gz
tar xvf diagnosis.tar.gz
# use the script to collect logs
./getkuberneteslogs.sh -u azureuser -i private.key.1.pem -g k8s-rg
./getkuberneteslogs.sh -u azureuser -i ~/.ssh/id_rsa -g k8s-rg --disable-host-key-checking
./getkuberneteslogs.sh -u azureuser -i ~/.ssh/id_rsa -g k8s-rg -n default -n monitoring
./getkuberneteslogs.sh -u azureuser -i ~/.ssh/id_rsa -g k8s-rg --upload-logs --api-model clusterDefinition.json
./getkuberneteslogs.sh -u azureuser -i ~/.ssh/id_rsa -g k8s-rg --upload-logs