共用方式為


從 AKS 叢集擷取實時系統深入解析

本文討論如何使用 Inspektor 小工具,從Microsoft Azure Kubernetes Service (AKS) 叢集收集實時系統深入解析的程式。 本文包含在 AKS 環境中安裝此工具的逐步指示。 它也會探索實際範例,示範 Inspektor 小工具如何協助您收集寶貴的資訊,以對真實世界問題進行有效的偵錯。

示範

若要開始,請考慮下列快速示範。 假設您必須找出來自應用程式之 DNS 要求失敗的原因。 藉由使用 Inspektor 小工具,您可以在應用程式執行所在的 Kubernetes 命名空間中擷取 DNS 流量:

kubectl gadget trace dns --namespace my-ns --output columns=+nameserver
K8S.NODE                           K8S.NAMESPACE  K8S.POD  PID      TID      COMM      QR  TYPE      QTYPE  NAME             RCODE NUMANSWERS NAMESERVER
aks-agentpool-97833681-vmss000001  my-ns          my-app   1349264  1349264  nslookup  Q   OUTGOING  A      www.example.com.       0          1.2.3.4
aks-agentpool-97833681-vmss000001  my-ns          my-app   1349264  1349264  nslookup  Q   OUTGOING  AAAA   www.example.com.       0          1.2.3.4
aks-agentpool-97833681-vmss000001  my-ns          my-app   1349264  1349264  nslookup  Q   OUTGOING  A      www.example.com.       0          1.2.3.4
aks-agentpool-97833681-vmss000001  my-ns          my-app   1349264  1349264  nslookup  Q   OUTGOING  AAAA   www.example.com.       0          1.2.3.4

從此資訊中,您可以看到 DNS 要求會導向至 IP 位址 1.2.3.4的 DNS 伺服器,但伺服器永遠不會回應。

現在,假設這不是 1.2.3.4 預設名稱伺服器組態,而且您懷疑可疑的程式正在運行時間修改組態。 在這些情況下,Inspektor 小工具超越 DNS 診斷。 它也可讓您監視存取重要檔案的進程(例如 /etc/resolv.conf),並打算修改這些檔案。 若要使用這項監視功能,請篩選輸出中的旗標以顯示任何 寫入檔案存取模式O_WRONLY 僅開啟以供寫入,或 O_RDWR 開啟以供讀取和寫入):

kubectl gadget trace open --namespace my-ns \
    --filter path:/etc/resolv.conf,flags:'~(O_WRONLY|O_RDWR)' \
    --output columns=+flags
K8S.NODE                           K8S.NAMESPACE  K8S.POD  K8S.CONTAINER  PID      COMM  FD  ERR  PATH              FLAGS
aks-agentpool-97833681-vmss000001  my-ns          my-app   my-app         1365052  vi    3   0    /etc/resolv.conf  O_WRONLY|O_CREAT

什麼是 Inspektor 小工具?

Inspektor 小工具 是專為建置、封裝、部署和執行工具而設計的架構,專門用來偵錯和檢查 Linux 和 Kubernetes 系統。 這些工具(“小工具”)會實作為 eBPF 程式。 其主要目標是收集低階核心數據,以提供特定系統案例的深入解析。 Inspektor 小工具架構會使用高階參考來管理所收集數據的關聯,例如 Kubernetes 資源。 此整合可確保低階深入解析與其對應的高階內容之間有順暢的連線。 整合可簡化疑難解答程序與相關信息的收集。

產品

Inspektor 小工具提供一組內建工具,其設計目的是要對系統上的常見情況進行偵錯和觀察。 例如,藉由使用這類小工具,您可以在叢集中追蹤下列事件:

  • 程式建立
  • 檔案存取
  • 網路活動,例如 TCP 連線或 DNS 解析

小工具會使用不同的機制來呈現他們收集的資訊。 例如,有些小工具可以通知您特定時間的系統狀態。 其他小工具可以在每次發生特定事件時報告,也可以提供定期更新。

這只是一部分的範例。 官方 提供每個小工具的詳細描述和範例,讓您可以判斷最適合您特定使用案例的小工具。 不過,如果您發現現有小工具目前未涵蓋的使用案例,Inspektor 小工具可讓您使用 run 命令來執行自己的 eBPF 程式。 由於 Inspektor 小工具架構會處理自定義程式的建置、封裝和部署,因此可簡化您獨特需求的程式。 此外,它會收集高階元數據,以擴充您在程式中收集的數據。

使用案例

為了補充本文開頭所呈現的示範,我們編譯了一份問題和實際案例清單,示範 Inspektor 小工具如何協助您解決偵錯挑戰。 下列範例展示 Inspektor 小工具的潛力。 但此工具的功能超出這些案例。 這讓 Inspektor 小工具成為流覽 Kubernetes 偵錯和可觀察性複雜性的寶貴資產。

問題區域 徵兆 疑難排解
需要大量磁碟的應用程式 高記憶體或CPU使用量,或節點整備不一致 應用程式可能會持續參與磁碟讀取/寫入作業,例如廣泛的記錄。 藉由使用 Inspektor 小工具,您可以即時識別哪些容器會產生更多 區塊 I/O。 或者,更具體地說,您可以找到造成更多讀取和寫入檔案容器。
「一律是 DNS」 高應用程式延遲、逾時或用戶體驗不佳

藉由使用 Inspektor 小工具,您可以 追蹤叢集中的所有 DNS 查詢和回應。 特別是 Inspektor 小工具提供下列資訊,可協助您判斷 DNS 是否會影響應用程式的效能:

  • 查詢成功
  • 回應是否包含錯誤
  • 用於查閱的名稱伺服器
  • 查詢回應延遲
檔案系統存取 應用程式錯誤或無法正確運作

應用程式可能無法存取檔案系統中的特定組態、記錄或其他重要檔案。 在這種情況下,Inspektor 小工具可讓您 追蹤 Pod 內所有開啟的檔案 ,以診斷存取問題。 每當您的應用程式嘗試開啟檔案時,您都可以探索下列資訊:

  • 用來開啟檔案的旗標(例如, O_RDONLY、O_WRONLY、O_RDWR等等)
  • 檔案開啟嘗試是否成功
  • 傳回的錯誤 (如果檔案開啟嘗試失敗)

例如,如果嘗試開啟檔案失敗,因為錯誤 2 (ENOENT),應用程式可能會嘗試開啟不存在的檔案。 這表示您可能在程序代碼中有錯字,或檔案可在不同的路徑中使用。

遠端程式代碼執行 (RCE) 未經授權的程式代碼執行,例如在應用程式閑置期間高 CPU 使用量中明顯的密碼編譯執行 當攻擊者嘗試對系統發動這種攻擊時,他們通常必須使用 來執行程序代碼 bash。 Inspektor 小工具可讓您 追蹤新進程的建立,特別是涉及重要命令的程式,例如 bash

如何在 AKS 叢集中安裝 Inspektor 小工具

單鍵 Inspektor 小工具部署

選取下列按鈕,系統會自動建立 AKS 叢集,並將在叢集中部署 Inspektor 小工具。 部署完成之後,您可以在提供的殼層環境中探索 Inspektor 小工具的所有功能。

在 AKS 叢集中部署 Inspektor 小工具

執行 「kubectl 小工具」 外掛程式來安裝 Inspektor 小工具

本節概述執行外掛程式,在 AKS 叢集中 kubectl gadget 安裝 Inspektor 小工具的步驟。 安裝包含兩個部分:

  • 在您的 kubectl gadget 電腦上安裝外掛程式

  • 執行 kubectl gadget 外掛程式以在叢集中安裝 Inspektor 小工具

    警告

    有許多機制可用來部署及使用 Inspektor 小工具。 每個機制都是針對特定使用案例和需求量身打造。 您可以使用 kubectl 小工具外掛程式來套用其中幾個機制,但並非所有機制。 例如,使用 kubectl gadget 外掛程式部署 Inspektor 小工具取決於 Kubernetes API 伺服器的可用性。 如果您無法依賴這類元件,因為其可用性可能偶爾遭到入侵,建議您避免使用 kubectl gadget部署機制。 如需此和其他使用案例的詳細資訊,請參閱 Inspektor 小工具檔

必要條件

第 1 部分:在您的電腦上安裝 kubectl 外掛程式小工具

建議您使用 krew 來安裝 kubectl gadget 外掛程式。

注意

若要安裝特定版本或從來源進行編譯,請參閱 在 GitHub 上安裝 kubectl 小工具

kubectl krew install gadget

現在,執行 version 命令來確認安裝:

kubectl gadget version

命令 version 會顯示用戶端的版本(kubectl gadget 外掛程式),但它也會告訴您尚未安裝在伺服器 (叢集):

Client version: vX.Y.Z
Server version: not installed

第 2 部分:在叢集中安裝 Inspektor 小工具

下列命令會 部署 DaemonSet 控制器。

注意

有數個選項可用來自定義部署,如下列清單所示:

  • 使用特定的容器映像
  • 部署到特定節點
  • 部署到自定義命名空間

若要了解這些選項,請參閱 官方檔之叢集中 的安裝一節。

kubectl gadget deploy

再次執行 命令來 version 確認安裝:

kubectl gadget version

這次,用戶端和伺服器都會顯示正確安裝:

Client version: vX.Y.Z
Server version: vX.Y.Z

協力廠商資訊免責聲明

本文提及的協力廠商產品是由與 Microsoft 無關的獨立廠商所製造。 Microsoft 不以默示或其他方式,提供與這些產品的效能或可靠性有關的擔保。

第三方聯繫人免責聲明

Microsoft提供第三方連絡資訊,協助您尋找本主題的其他資訊。 此連絡資訊可能會變更而不另行通知。 Microsoft不保證第三方連絡信息的正確性。

與我們連絡,以取得說明

如果您有問題或需要相關協助,請建立支援要求,或詢問 Azure community 支援。 您也可以向 Azure 意見反應社群提交產品意見反應。