使用BPF監視你的Kubernetes叢集
如果你已經使用Kubernetes已經有一段時間了,你就會知道你能做的最好的事情就是邀請成千上萬的你最好的熟人在沒有成人監督的情況下在你的叢集上執行任意命令。在將來的某個時刻,您可能想知道您曾經知道的那些人仍然在您的群集上做什麼。是不是在挖礦呢?
BPF(Berkeley Packet Filter)是Linux核心中的一個虛擬機器,它在收到其中一個事件時對事件進行分類並觸發操作。它允許您在執行時將程式碼注入核心以處理這些事件; 不需要核心編譯。BPF有兩種風格。本文引用的是擴充套件版本eBPF,但我只稱它為BPF。
另一個更有趣的選擇是使用Kubectl Trace來檢查容器中正在執行的內容。Kubectl的這個擴充套件計劃一次性作業在容器內執行BPF程式。因此,您可以使用一行命令列出在任何容器中執行的所有程式:
kubectl trace run container -e \ "tracepoint:syscalls:sys_enter_execve { @[comm] = count() }" |
此命令將等待容器執行新程式,並將按其命令名稱(comm)對正在執行的許多程式進行分組。問題是當你想知道那裡發生了什麼時,你需要執行這個命令; 它不允許您監視群集使用情況,而無需一直檢視它。
我最喜歡的選擇是將BPF的Execsnoop部署到每個pod中的sidecar容器,並讓它實時登入pod中執行的所有程式。Kubernetes 1.13有一個名為的配置標誌shareProcessNamespace,允許您將在pod中生成的所有程式放入同一名稱空間,這樣您就可以從邊車監視pod中的所有容器。這是您的pod定義的開始:
apiVersion: v1 kind: Pod metadata: name: happy-borg spec: shareProcessNamespace: true containers: - name: execsnoop image: calavera/execsnoop securityContext: - privileged: true volumeMounts: - name: sys # mount the debug filesystem mountPath: /sys readOnly: true - name: headers # mount the kernel headers required by bcc mountPath: /usr/src readOnly: true - name: modules # mount the kernel modules required by bcc mountPath: /lib/modules readOnly: true - name: container doing random work ... |
BPF為Kubernetes開啟了更好的可觀察性的大門。
相關文章
- 使用 Kind 搭建你的本地 Kubernetes 叢集
- Kubernetes叢集部署史上最詳細(二)Prometheus監控Kubernetes叢集Prometheus
- 如何用Prometheus監控十萬container的Kubernetes叢集PrometheusAI
- 使用Kubeadm搭建高可用Kubernetes叢集
- Python使用 Kubernetes API 訪問叢集PythonAPI
- 使用 kubeadm 建立 kubernetes 叢集 v1.21
- 使用Gardener在GoogleCloudPlatform上建立Kubernetes叢集GoCloudUDPPlatform
- 使用 Docker 快速搭建單機版的 Kubernetes 叢集Docker
- Kubernetes 叢集搭建(上)
- Kubernetes 叢集搭建(下)
- Kubernetes叢集搭建(vagrant)
- kubernetes與web叢集Web
- 拆除kubeadm部署的Kubernetes 叢集
- “開箱即用” 的 Kubernetes 叢集
- 從0到1使用Kubernetes系列(三)——使用Ansible安裝Kubernetes叢集
- 監控Kubernetes叢集證書過期時間的三種方案
- Kubernetes 叢集和應用監控方案的設計與實踐
- Tidb 運維--叢集檢視的使用TiDB運維
- 使用 Kubeadm+Containerd 部署一個 Kubernetes 叢集AI
- 為Kubernetes叢集新增使用者認證
- 使用Rancher在Kubernetes上部署EMQ X叢集MQ
- 使用Minikube部署本地Kubernetes叢集(二十八)
- kubernetes之使用http rest api訪問叢集HTTPRESTAPI
- 搭建 Kubernetes 高可用叢集
- kubernetes叢集管理命令(三)
- 【kubernetes叢集系列(二)】Worker(node)安裝(使用kubeadm)
- Kubernetes — 在 OpenStack 上使用 kubeadm 部署高可用叢集
- 使用Gardener在Google Cloud Platform上建立Kubernetes叢集GoCloudPlatform
- Prometheus多叢集監控的3種方案,你選哪種?Prometheus
- 修復一個kubernetes叢集
- 簡述Kubernetes叢集聯邦
- Kubernetes部署叢集Mysql服務MySql
- Kubernetes叢集日誌詳解
- 在 Minecraft 中管理 Kubernetes 叢集Raft
- 在 Azure 上部署 Kubernetes 叢集
- 在kubernetes上部署consul叢集
- 自建Kubernetes叢集如何使用阿里雲CSI儲存元件阿里元件
- 使用 C# 獲取 Kubernetes 叢集資源資訊C#