為 Azure Stack Hub 上的 Azure Kubernetes Service 疑難排解

疑難排解概觀

為 Azure Kubernetes Service (AKS) 叢集疑難排解時,大部分層面與大半 Kubernetes 叢集並無差異。 可在 Kubernetes 網站上的疑難排解取得相關資訊。 還有另一項對 Azure Stack Hub 相當實用的資源,即診斷設定,可在 Azure Stack Hub 使用者入口網站上的 [AKS 叢集] 刀鋒視窗取得。

Diagnostic Settings to collect Kubernetes logs

可在此刀鋒視窗收集下列資訊:

  • 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

後續步驟

瞭解如何在 Azure Stack Hub 上使用 AKS