監視 Kubernetes

Instana 可協助您存取詳細 Kubernetes 資訊、分析 Kubernetes 呼叫、鏈結 Kubernetes 服務及邏輯服務、使用 Kubernetes 實體警示的內建或自訂性能規則,以及追蹤部署在服務網格上的工作負載。

支援的版本

Instana 支援現行穩定版本的 Kubernetes。 根據 Kubernetes 版本相容性保證, Instana 支援最新的 Kubernetes 版本、較早的兩個版本,以及較新的兩個版本。 不過,先前的兩個版本會被視為軟淘汰。

支援的受管理 Kubernetes

  • IBM Cloud Kubernetes Service 監視及效能管理
  • Amazon Elastic Container Service for Kubernetes (EKS)
  • Azure Kubernetes Service (AKS)
  • Google Kubernetes Engine (GKE)
  • IBM Cloud Kubernetes Service
  • VMware Tanzu Kubernetes Grid (TKG) 及 VMware Tanzu Kubernetes Grid Integration (TKGI) ,先前稱為 Pivotal Container Service (PKS)

附註: 僅支援 Linux 工作者節點。 不支援在 Windows 上執行的工作者。

支援的服務網格

Instana 支援最後三個穩定版本的 Istio。

在 kubernetes 中安裝 Instana 代理程式

若要使用 Instana 監視 Kubernetes ,您需要在 Kubernetes 叢集裡安裝 Instana 主機代理程式。

如需主機代理程式安裝步驟的相關資訊,請參閱 在 Kubernetes上安裝主機代理程式

VMware Tanzu Kubernetes Grid 上的 Instana 代理程式安裝由 Instana Microservices Application Monitoring for VMware Tanzu 磚完全自動化。

存取 Kubernetes 資訊

將代理程式部署至叢集之後, Kubernetes 感應器會報告叢集及部署至其中之資源的詳細資料。

Instana 會自動偵測並監視 Kubernetes 叢集中執行的所有資源:

  • 叢集
  • CronJobs
  • 節點
  • 名稱空間
  • 部署
  • DaemonSets
  • StatefulSets
  • 服務
  • Pod

Kubernetes 資訊可輕鬆存取,並在應用程式的所有層面深度整合。

Kubernetes 頁面

在 Instana 使用者介面的導覽功能表中,按一下 平台 > Kubernetes ,您可以查看 Kubernetes 叢集和名稱空間的資訊。

Kubernetes 儀表板

在 Kubernetes 頁面上,按一下叢集或名稱空間。 您可以看到 Kubernetes 儀表板,其中呈現特定 Kubernetes 實體的所有資訊。 左上方的環境定義路徑一律可存取環境定義。 在下列擷取畫面中,您可以在名為 "k8s-demo-cluster" 的叢集中看到名為 "robot-shop" 的名稱空間。

儀表板概觀

Kubernetes 儀表板的結構如下:

  • 摘要 顯示特定實體的最相關資訊。 此儀表板以顯示狀態及相關資訊 (例如經歷時間) 的狀態行開始。 在下一節中,您可以查看 CPU、記憶體及 Pod 資訊,其中提供所耗用的資源,包括 Pod。 下列擷取畫面中的 熱門部署熱門 Pod 等區段會顯示您可能想要查看的潛在熱點。 日誌 區段會顯示該實體相關日誌的分佈圖,其補充實體度量值。 此圖表是互動式圖表,容許選取及強調顯示所有測量值。 您可以聚焦於選取的時段,或跳至 分析 區段以繼續疑難排解過程。

  • 詳細資料 顯示諸如 "labels"、"annotation" 及 "spec" 之類的詳細資訊。

  • 事件 會顯示所有相關 Kubernetes 事件,並將它們鏈結至個別儀表板。

  • 相關實體 (例如「部署」、「K8s 服務」及「Pod」) 會顯示為 Kubernetes 儀表板的標籤。 顯示的內容視您選取的實體而定。

CPU 和記憶體用量

對於 Kubernetes Pod、部署、服務、名稱空間及節點,您可以檢視現行 CPU 及記憶體用量,因為它與針對這些資源所設定的 CPU 及記憶體限制及要求相比較。

如果可用,則會從從執行構成資源之儲存器的儲存器執行時期所收集的資料計算使用情形資訊。

應用程式頁面

按一下 Instana 使用者介面導覽功能表中的 應用程式 ,然後按一下 應用程式服務 標籤。 如果服務或應用程式在 Kubernetes 叢集上執行,您可以在 基礎架構 標籤中查看個別環境定義資訊:

AP Infra 標籤

對於儲存器, Pod 和名稱空間會顯示並直接鏈結; 對於主機,叢集和節點也會顯示並鏈結。

基礎架構頁面

在 Instana 使用者介面的導覽功能表中,按一下 基礎架構 。 在基礎架構圖中,您可以在您所選取主機或容器的資訊看板中查看 Kubernetes 資訊。

AP Infra 標籤

您可以使用 動態焦點 來過濾資料。 例如,在叢集中搜尋特定部署。 此外,關鍵字 entity.kubernetes.cluster.distributionentity.kubernetes.cluster.managedBy 可讓您依配送及管理層來搜尋 Kubernetes 叢集。 entity.kubernetes.cluster.distribution 支援的值為 gkeeksopenshiftkubernetesentity.kubernetes.cluster.managedBy 支援的值為 ranchernone

分析 Kubernetes 呼叫

無界限分析 提供功能強大的工具,可讓您在 Kubernetes 叢集裡每一次呼叫都進行截塊和切塊。 如果您從 Kubernetes 儀表板中按一下 分析呼叫 ,則已設定適當的過濾器及分組。 在此情況下,您可以查看 robot-shop 名稱空間中依 Pod 分組的所有呼叫:

儀表板概觀

分析 Kubernetes 日誌

無界限分析 提供功能強大的工具,可讓您對 Kubernetes 叢集中的每個日誌進行截塊及切塊。 如果您從 Kubernetes 儀表板中按一下 分析日誌 ,則已設定適當的過濾。 在此情況下,您可以查看 robot-shop 名稱空間中的所有日誌,如下所示:

儀表板概觀

為了提供相關資訊而不變更環境定義, Instana 使用基礎架構和 Kubernetes meta 資料來強化日誌訊息,這會在日誌訊息展開之後顯示在標籤表格中。 請參閱下列標籤表格:

標籤表格概觀

鏈結 Kubernetes 服務及邏輯服務

單一 Kubernetes 服務至多個邏輯服務

當服務對映規則相符且在該 Kubernetes 服務上產生呼叫時,多個邏輯服務可以與單一 Kubernetes 服務相關。 例如,具有標籤選取元 "service=my-service" 的 Kubernetes 服務可能包含具有其他標籤 "env=dev""env=staging" 的 Pod ,這些標籤與 Instana 中具有下列標籤 kubernetes.container.namekubernetes.pod.labelkey: env的自訂服務對映配置結合。 它會導致多個邏輯服務鏈結至該單一 Kubernetes 服務,並顯示在 Kubernetes Service 儀表板上。

單一邏輯服務至多個 Kubernetes 服務

當 Kubernetes 服務在一段時間內毀損並重建時,多個 Kubernetes 服務可以與單一邏輯服務相關。 例如,如果具有產生的呼叫的 Kubernetes 服務 shop-service-a 在一段時間內由 shop-service-b 取代為產生的呼叫,則當選取的時段與產生的呼叫重疊時,這兩個服務都會顯示在邏輯服務儀表板上。

檢視度量值

Instana 會收集 Kubernetes 叢集、 CronJob、 DaemonSet、部署、工作、 Kubernetes 服務、名稱空間、節點及 StatefulSet的相關資訊。

叢集

度量 說明
Pod 配置 已配置 Pod 與 Pod 容量的比例
CPU 要求配置 CPU 要求與 CPU 容量的比例
CPU 限制配置 CPU 限制與 CPU 容量的比例
記憶體要求配置 記憶體要求與記憶體容量的比例
記憶體限制配置 記憶體限制與記憶體容量的比例
CPU 要求 所有執行中容器的聚集 CPU 要求
CPU 限制 所有執行中容器的聚集 CPU 限制
CPU 容量 所有節點的聚集 CPU 容量
記憶體要求 所有執行中容器的聚集記憶體要求
記憶體限制 所有執行中儲存器的聚集記憶體限制
記憶體容量 所有節點的聚集記憶體容量
執行中的 Pod 此叢集中所有執行中 Pod 的計數
擱置的 Pod 此叢集中所有擱置中 Pod 的計數
已配置的 Pod 此叢集中所有已配置 Pod 的計數
Pod 容量 所有節點的聚集 Pod 容量
磁碟外節點 此叢集中的磁碟外節點計數
記憶體壓力節點 此叢集中的記憶體壓力節點計數
磁碟壓力節點 此叢集中的磁碟壓力節點計數
Kubelet 未備妥節點 此叢集中 kubelet 未備妥節點的計數
可用的抄本 來自所有部署的可用抄本
想要的抄本 所有部署中想要的抄本
節點計數 此叢集中的節點數目

CronJob

度量 說明
前次工作持續時間 前次工作執行的持續時間
作用中工作數 作用中工作數
前次排定工作的時間 此 cronjob 的工作已排定多久之前

DaemonSet

度量 說明
可用的抄本 可用的抄本計數
想要的抄本 想要的抄本計數
無法使用的抄本 無法使用的抄本計數
未排定的抄本 錯誤排程抄本計數
可用的抄本與想要的抄本比例 可用抄本與所需抄本的比例

部署

度量 說明
可用的抄本 可用的抄本計數
想要的抄本 想要的抄本計數
可用的抄本與想要的抄本比例 可用抄本與所需抄本的比例
擱置的 Pod 擱置中 Pod 計數
未排程 Pod 未排程 Pod 計數
未備妥的 Pod 未備妥 Pod 計數
擱置階段的持續時間 擱置階段的持續時間
Pod 計數 此部署的 Pod 數目
記憶體要求 此部署所有執行中儲存器的聚集記憶體要求
記憶體限制 此部署的所有執行中儲存器的聚集記憶體限制
CPU 要求 此部署所有執行中容器的聚集 CPU 要求
CPU 限制 此部署所有執行中容器的聚集 CPU 限制

工作

度量 說明
作用中 Pod 此工作中作用中 Pod 的數目
失敗的 Pod 此工作中失敗的 Pod 數目
成功的 Pod 此工作中成功的 Pod 數目
工作持續時間 工作執行的持續時間

Kubernetes 服務

度量 說明
CPU 要求 此服務的聚集 CPU 要求
CPU 限制 此服務的聚集 CPU 限制
記憶體要求 此服務的聚集記憶體要求
記憶體限制 此服務的聚集記憶體限制

名稱空間

度量 說明
記憶體要求容量 此名稱空間上記憶體要求支援的記憶體上限
已用記憶體要求 配置給已用記憶體要求的記憶體數量
記憶體限制容量 此名稱空間上記憶體限制的受支援記憶體上限
已用記憶體限制 配置給已用記憶體限制的記憶體數量
CPU 要求容量 此名稱空間上 CPU 要求支援的 CPU 上限
已用 CPU 要求 配置給已用 CPU 要求的 CPU 數量
CPU 限制容量 此名稱空間上 CPU 限制的受支援 CPU 上限
已用 CPU 限制 配置給已用 CPU 限制的 CPU 數量
已用的 Pod 用於此名稱空間的 Pod 數目
Pod 容量 名稱空間可以採用的 Pod 數目
已用 Pod 配置 已用 Pod 與 Pod 容量的比例
CPU 要求配置 CPU 要求與 CPU 容量的比例
CPU 限制配置 CPU 限制與 CPU 容量的比例
記憶體要求配置 記憶體要求與記憶體要求容量的比例
記憶體限制配置 記憶體限制與記憶體限制容量的比例
Pod 配置 已配置 Pod 與 Pod 容量的比例

節點

度量 說明
已配置的 Pod 此節點上已配置的 Pod 計數
Pod 容量 節點可以採取的 Pod 數目
記憶體要求 此節點上所有執行中儲存器的聚集記憶體要求
記憶體限制 此節點上所有執行中儲存器的聚集記憶體限制
記憶體容量 此節點上支援的記憶體上限
CPU 要求 此節點上所有執行中儲存器的聚集 CPU 要求
CPU 限制 此節點上所有執行中容器的聚集 CPU 限制
CPU 容量 此節點上支援的 CPU 上限
Pod 配置 已配置 Pod 與 Pod 容量的比例
CPU 要求配置 CPU 要求與 CPU 容量的比例
CPU 限制配置 CPU 限制與 CPU 容量的比例
記憶體要求配置 記憶體要求與記憶體容量的比例
記憶體限制配置 記憶體限制與記憶體容量的比例

Pod

度量 說明
儲存器計數 此 Pod 的儲存器數目
CPU 要求 此 Pod 的所有容器上的聚集 CPU 要求
CPU 限制 此 Pod 的所有儲存器上的聚集 CPU 限制
記憶體要求 此 Pod 的所有儲存器上的聚集記憶體要求
記憶體限制 此 Pod 的所有儲存器上的聚集記憶體限制
重新啟動計數 在此 Pod 的所有容器上聚集重新啟動

StatefulSet

度量 說明
可用的抄本 可用的抄本計數
想要的抄本 想要的抄本計數
可用的抄本與想要的抄本比例 可用抄本與所需抄本的百分比

性能規則

內建

有幾個內建性能規則會觸發 Kubernetes 實體的問題。

  • 叢集
    • Kubernetes 報告「主要元件」(apiserver、排程器及控制器管理程式) 性能不佳。 由於 Kubernetes 中的錯誤,性能並非一律可靠報告。 Instana 嘗試過濾「主要元件」的性能狀態,不會導致警示,但只會在叢集詳細資料頁面上顯示性能狀態。
  • 節點
    • 所要求的 CPU 接近容量上限。 所要求 CPU 與 CPU 容量的比例大於 80%。
    • 所要求的記憶體接近容量上限。 所要求的記憶體與記憶體容量比例大於 80%。
    • 已配置的 Pod 已接近容量上限。 配置的 Pod 對 Pod 容量比例大於 80%。 對於節點,階段 'Running' 和 'Unknown' 中的 Pod 會計算為已配置。 如需節點容量的相關資訊,請參閱 Kubernetes 文件
    • 節點報告未備妥超過一分鐘的狀況,且此節點的所有狀況都超出「備妥」狀況。 如需所有節點條件的相關資訊,請參閱 Kubernetes 文件
  • 名稱空間
    • 所要求的 CPU 接近容量上限。 所要求 CPU 與 CPU 容量的比例大於 80%。
    • 所要求的記憶體接近容量上限。 所要求的記憶體與記憶體容量比例大於 80%。
    • 已配置的 Pod 已接近容量上限。 配置的 Pod 對 Pod 容量比例大於 80%。 對於名稱空間,會將階段「擱置」、「執行中」及「不明」中的 Pod 視為已配置。 名稱空間容量值基於每個名稱空間可以設定的 ResourceQuotas 。 如需相關資訊,請參閱 Kubernetes 文件
  • 部署
    • 可用的抄本數小於想要的抄本數。
  • Pod
    • Pod 必須在部署的一分鐘內備妥,但如果它在一分鐘內未備妥,原因是它尚未完成其作業 (PodCondition= Ready , Status=False , Reason! = PodCompleted)。 如需所有 Pod 條件的相關資訊,請參閱 Kubernetes 文件

自訂

除了內建規則之外,您還可以在叢集、名稱空間、部署及 Pod 的度量值上建立自訂規則。 例如,如果節點容量警告的臨界值太高,您可以停用它們,並建立具有較低臨界值的自訂規則。 如需相關資訊,請參閱 事件及突發事件配置

服務網格

OpenShift ServiceMesh

請參閱 OpenShift ServiceMesh上的 OpenShift 常見問題 (FAQ)。

Istio

如果您使用預設拒絕原則 (mode: REGISTRY_ONLY) 來部署 Istio ,則 Istio 的預設安裝與 Instana 一起運作。 若要有效地使用此配置,必須使用下列代理程式配置來啟用 Instana 的服務網格旁路:

com.instana.container:
  serviceMesh:
    enableServiceMeshBypass: true

設定略過封鎖網路連線功能有兩種不同方式:

  • 容許從應用程式 Pod 到主機代理程式的送出資料流量 (在代理程式所接聽的所有 IPv4 位址上,以及所有埠上)。
  • 容許從 JVM 應用程式的代理程式 (從主機代理程式所接聽的所有 ipv4 位址、所有埠) 送入應用程式 Pod 的資料流量。

對網格旁路進行除錯

若要透過傳遞對服務網格進行除錯,請遵循下列步驟:

  1. 驗證已啟用服務網格旁路。
  2. 驗證 iptable 規則已套用至儲存器。

已啟用驗證

若要驗證是否已啟用服務網格旁路,請執行下列指令來移入 Instana 代理程式日誌:

kubectl logs -l app.kubernetes.io/instance=instana-agent -n instana-agent -c instana-agent

如果已啟用服務網格旁路,您可以找到下列日誌行,這些日誌行指出針對表示的處理程序寫入入埠或出埠旁路項目:

入埠通過:

2021-04-26T08:13:57.065+0000 | INFO  | -client-thread-2 | DefaultServiceMeshSupport        | 51 - com.instana.agent - 1.1.597 | Applying inbound service mesh bypass for process '764670'

出埠傳遞:

2021-04-26T08:13:57.140+0000 | INFO  | -client-thread-2 | DefaultServiceMeshSupport        | 51 - com.instana.agent - 1.1.597 | Applying outbound service mesh bypass for process '764670'

驗證 iptable 規則

驗證 iptable 規則是 Shell 進入 Instana 代理程式並列出目標儲存器 iptables 規則的最簡單方法,如下所示。 將 ${PID} 取代為 JVM 程序的 pid:

kubectl -n instana-agent exec -it ${INSTANA_AGENT_POD} -c instana-agent  -- /bin/bash
nsenter -n -t ${PID} iptables -t nat -n -L INSTANA_OUTPUT

如果套用鏈結,您可以看到如下所示的輸出:

Chain INSTANA_OUTPUT (1 references)
target     prot opt source               destination
ACCEPT     tcp  --  0.0.0.0/0            10.128.15.237
ACCEPT     tcp  --  0.0.0.0/0            10.64.0.1
ACCEPT     tcp  --  0.0.0.0/0            169.254.123.1

執行下列指令,以檢查 Instana 代理程式與 JVM 程序之間是否支援雙向通訊:

nsenter -n -t ${PID} iptables -t nat -n -L INSTANA_INBOUND

結果類似於下列輸出:

Chain INSTANA_INBOUND (1 references)
target     prot opt source               destination
ACCEPT     tcp  --  10.128.15.237        10.64.0.14
ACCEPT     tcp  --  10.64.0.1            10.64.0.14
ACCEPT     tcp  --  169.254.123.1        10.64.0.14

視套用 iptable 規則的時間而定,可能需要幾分鐘的時間,才能在 Instana 的儀表板中檢測程序及顯示資料。

疑難排解注意事項

為何我看不到任何 Kubernetes 叢集或名稱空間?

如果 Kubernetes 頁面上未列出任何叢集或名稱空間,則表示由於未安裝代理程式,未主動監視任何叢集,或在您選取的時間範圍內未監視任何叢集。

按一下 即時 ,以檢查是否有任何處於即時模式的叢集及名稱空間,如果未列出任何叢集及名稱空間,則需要 在 kubernetes 中安裝 Instana 代理程式

遺漏 clusterRole 許可權

監視問題類型: kubernetes_missing_permissions

Instana 代理程式需要特定資源的適當 ClusterRole 許可權,才能順利監視 Kubernetes 叢集。 如果遺漏這些許可權,則 Instana Kubernetes 儀表板上遺漏對應的資源。 若要解決此問題,請安裝最新版本的 Instana 代理程式 YAML、 Helm Chart 或 Operator。 如需每一種安裝方法最新版本的相關資訊,請參閱 KubernetesOpenShift

淘汰

Instana 已淘汰對 Kubernetes 感應器中 DaemonSet、Deployment 及 ReplicaSet 的 extensions/v1beta1apps/v1beta2 API 版本的支援。 已在 Kubernetes v1.16中移除已作廢的 API 版本。 如需相關資訊,請參閱 來自 Kubernetes的公告

子主題

  • Instana AutoTrace WebHook

    Instana AutoTrace Webhook 是 Kubernetes 及 OpenShift相容許可控制器轉換 Webhook。 它會在整個 Kubernetes 或 Red Hat OpenShift 叢集中執行的 Node.js、.NET Core、Ruby 及 Python 應用程式上自動配置 Instana 追蹤。