如何使用 Pixie 解決 Kubernetes 可觀察性挑戰

語言: CN / TW / HK

C T O

   

   

 

Go Rust Python Istio containerd CoreDNS Envoy etcd Fluentd Harbor Helm Jaeger Kubernetes Open Policy Agent Prometheus Rook TiKV TUF Vitess Argo Buildpacks CloudEvents CNI Contour Cortex CRI-O Falco Flux gRPC KubeEdge Linkerd NATS Notary OpenTracing Operator Framework SPIFFE SPIRE     Thanos

如何使用 Pixie 解決 Kubernetes 可觀察性挑戰

去中心化系統的可觀察性一直具有挑戰性。處理延遲、分散式事務、故障等變得越來越複雜。去中心化系統的抽象程度越高,推理、除錯和故障排除就越困難。

在 K8s 上除錯很難

使 Kubernetes 可觀察性如此困難的主要原因是工作負載和資源的易變性和動態性。我們現在不是處理一臺伺服器,而是處理未知數量的伺服器(由於自動呼叫)。我們現在擁有多個分散式服務,而不是一個單一的應用程式。資料庫也是如此,它通常位於叢集之外。

讓我們想象一下,對在雲提供商託管的 Kubernetes 叢集上執行的 API 進行 HTTP(s) 呼叫。這是一個簡化的序列圖,顯示了其中的關鍵點

在此通訊鏈的任何一點,都可能出現問題、效能下降、可能發生安全問題等。瞭解叢集上正在發生的事情以及對通訊鏈每個步驟的詳細瞭解對於操作效能至關重要。

在哪裡觀察

現在我們知道要觀察什麼,但問題是我們如何以及在哪裡放置我們的可觀察點,即洞察之門。

有幾個選項:

  • 將可觀察性構建到服務和程式碼中。這帶來了高度的控制,但維護起來很麻煩,而且不可擴充套件。

  • 使用 sidecar 模式將可觀察性邏輯注入每個 pod 。更好,但這可能會導致效能問題並且難以開發,因為一些不同的工作負載需要不同的指標,這些指標會隨著時間而改變。
  • 使用低階系統呼叫來監控常用協議、 stdout stderr 的使用。這意味著在叢集本身上安裝一些東西,這樣會更好,但通常意味著給它一些擴充套件許可權並在 Linux 核心中租用 Inge
  • 使用帶有 eBPF 探針的低階系統呼叫。這帶來了高擴充套件性和低開銷。

將此與將更重要的指標匯出到 Prometheus 相結合,您就可以開始了

基礎技術

得益於 eBPF Extended Barkley Packet Filter ),這種細粒度級別的可觀察性成為可能。一種使核心以安全和高效能的方式可程式設計的協議。

eBPF 是一種革命性的技術,起源於 Linux 核心,可以在作業系統核心中執行沙盒程式。它用於安全有效地擴充套件核心的功能,而無需更改核心原始碼或載入核心模組。要了解有關 eBPF 的更多資訊,請訪問 eBPF 簡介。

https://ebpf.io/what-is-ebpf/

下圖展示了 eBPF 在高層次上是如何工作的

用例和演示

之前我們已經看到了一個圖表,其中包含 Kubernetes 中的流量示例。此流量中的每一步都應該對我們的工作負載產生有價值的見解。

以下是 Dev Ops 都會感興趣的典型見解列表。

  • pod 的表現如何
  • 不同互動之間的延遲是多少

  • 什麼是 HTTP 有效負載
  • 叢集在負載下的表現如何

在演示部分,我們將研究示例應用程式上的 HTTP 流量。 Pixie CLI 帶有預定義的演示應用程式,我們可以直接從命令列安裝。但是,這些演示需要很長時間才能載入,相反,我們將使用不同的應用程式。

先決條件

要跟隨演示,您需要安裝以下元件:

  • Docker

  • minikube 叢集

  • kubectl

  • helm

安裝Pixie

Pixie Kubernetes 應用程式的開源可觀察性工具。 Pixie 使用 eBPF 自動捕獲遙測資料,無需手動檢測。

我們將為 Pixie CLI 選擇 docker 選項以最大程度地減少系統混亂。

alias px="docker run -i --rm -v ${HOME}/.pixie:/root/.pixie pixielabs/px"

安裝 Minikube

Pixie 目前僅支援 minikube ,以下安裝說明適用於 Debian Linux 其他安裝說明可在 Minikube 頁面獲得

curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube_latest_amd64.deb
sudo dpkg -i minikube_latest_amd64.deb

啟動 minikube

這將使用 KVM 驅動程式啟動 minikube

minikube start --driver=kvm2 --cni=flannel --cpus=4 --memory=8000 -p=pixie-cluster

如果您正在執行 Windows/MacO ,請使用 --driver=hyperkit 該選項

使用 Pixie Cloud 建立帳戶

可以自行託管 Pixie ,但出於演示目的,我們將建立一個免費帳戶來訪問指標 UI

px auth login

獲取部署金鑰

px deploy-key create
export PIXIE_DEPLOY_KEY=<copy key from the command result>

在叢集上安裝 Pixie

helm install pixie pixie-operator/pixie-operator-chart --set deployKey=$PIXIE_DEPLOY_KEY --set clusterName=pixie-cluster --namespace pl --create-namespace

安裝可能需要幾分鐘。

安裝 Kuard

Kuard 《Kubernetes Up and Running》 一書中的一個演示 K8s 應用程式

kubectl run --restart=Never --image=gcr.io/kuar-demo/kuard-amd64:blue kuard

一旦 Pod 準備就緒,轉發埠並訪問 Web UI

kubectl port-forward kuard 8080:8080
開啟http://localhost:8080/

探索資料

可以直接從命令列執行查詢,但我們將直接進入實時 UI 。導航到 https://work.withpixie.ai/live/ cluster 選單中選擇您的叢集

單擊指令碼下拉選單並選擇 http/data

在目標過濾器型別 kuard 中,僅過濾到我們 pod 的流量。

重新整理 kuard 頁面幾次,然後使用 RUNPixie UI 右側的按鈕重新執行指令碼。隨意進一步探索 Pixie UI 並找到您感興趣的指標。

架構問題

如果您正在考慮將 Pixie 用於您的工作負載,則可能需要解決架構方面的問題。以下是有關 Pixie 工作原理的一些事實,可能有助於解決其中一些問題

  • 資料保留在叢集上,您可以決定是否要匯出任何內容,例如匯出到 Prometheus 指標。
  • 資料儲存 24 小時,佔用空間小到足以在邊緣裝置上正常工作。
  • 查詢是可擴充套件的,可以用 PiXL 語言( Python 的衍生語言)編寫。
  • 路線圖上的某個地方是與 Open Telemetry 的整合,以實現 Prometheus Jaeger 等知名工具之間的無縫資料匯出。

學到更多

Pixie 是一個沙盒 CNCF 專案。

要了解有關 Pixie 的更多資訊,請檢視他們的網頁,其中包含更多示例和深入解釋,以及他們的 Github Repo

https://docs.px.dev/installing-pixie/
https://github.com/pixie-io/pixie

參考地址 [1]

參考資料

[1]

參考地址: https://iximiuz.com/en/posts/kubernetes-api-call-simple-http-client/