自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

我們?nèi)绾卫胑BPF程序監(jiān)控Kubernetes,你學(xué)會(huì)了嗎?

云計(jì)算 云原生
在 Kubernetes 監(jiān)控中利用 eBPF 功能可以深入了解內(nèi)核級(jí)事件、網(wǎng)絡(luò)流量和資源使用情況。通過(guò)創(chuàng)建自定義的 eBPF 程序和使用像 BPFTrace 這樣的工具,您可以更好地理解集群的行為,排查問(wèn)題,優(yōu)化性能并分析資源利用率。

對(duì) Kubernetes 集群進(jìn)行監(jiān)控對(duì)于確保容器化應(yīng)用程序的健康、性能和可靠性至關(guān)重要。Kubernetes 提供了強(qiáng)大的監(jiān)控工具套件和集成,但是當(dāng)您需要深入內(nèi)核和網(wǎng)絡(luò)級(jí)別的復(fù)雜性時(shí),eBPF(擴(kuò)展的伯克利包過(guò)濾器)就成為了無(wú)價(jià)的資源。在本文中,我們將探索驚人的 eBPF 功能,以及如何利用它提升 Kubernetes 監(jiān)控策略。

譯自How to Use eBPF Capabilities to Navigate Kubernetes Monitoring。作者 Dev Genius 。

在 Kubernetes 的背景下,eBPF 在諸如容器網(wǎng)絡(luò)監(jiān)控(CNI 插件)、通過(guò)基于 eBPF 的網(wǎng)絡(luò)策略加強(qiáng)安全性以及進(jìn)行詳細(xì)的性能分析等任務(wù)中發(fā)揮著關(guān)鍵作用。通過(guò)深入研究 eBPF 的功能,您可以對(duì) Kubernetes 集群獲得無(wú)與倫比的洞察,從而幫助您排查問(wèn)題、優(yōu)化性能并微調(diào)基礎(chǔ)設(shè)施以達(dá)到峰值效率。

eBPF是一個(gè)強(qiáng)大的技術(shù),它允許在不修改 Linux 內(nèi)核源代碼的情況下,動(dòng)態(tài)地向 Linux 內(nèi)核中插入自定義代碼。這些代碼可以用于各種目的,包括網(wǎng)絡(luò)分析、跟蹤和在eBPF Kubernetes的背景下的可觀察性。

圖片圖片

Kubernetes 利用 eBPF 進(jìn)行各種任務(wù),例如容器網(wǎng)絡(luò)監(jiān)控(CNI 插件)、安全性(例如基于 eBPF 的網(wǎng)絡(luò)策略)和性能分析。

設(shè)置環(huán)境和使用 eBPF 監(jiān)控 Kubernetes

在我們深入研究基于 eBPF 的 Kubernetes 監(jiān)控之前,讓我們先設(shè)置環(huán)境。請(qǐng)確保您具備以下前提條件:

  • 一個(gè)運(yùn)行中的 Kubernetes 集群
  • 安裝了kubectl命令行工具
  • Docker 或其他容器運(yùn)行時(shí)
  • 基于 Linux 的系統(tǒng)(用于 eBPF 工具)

安裝必需的工具

要開(kāi)始,我們需要在您的系統(tǒng)上安裝一些與 eBPF 相關(guān)的工具。這些工具將幫助您分析和跟蹤內(nèi)核級(jí)事件。

# Install BPF Compiler Collection (BCC)
sudo apt-get install bpfcc-tools
# Install BPFTrace
sudo apt-get install bpfcc-tools

觀測(cè) Pod 網(wǎng)絡(luò)流量

eBPF 可以對(duì) Pod 之間的網(wǎng)絡(luò)流量提供深入的洞察。讓我們創(chuàng)建一個(gè)簡(jiǎn)單的 eBPF 程序,用于跟蹤兩個(gè)特定 Pod 之間的網(wǎng)絡(luò)流量。

#include <linux/bpf.h>
#include <linux/if_ether.h>
#include <linux/ip.h>


BPF_TABLE("hash", u64, u64, packet_count, 256);


int count_packets(struct __sk_buff *skb) {
  u64 *value;
  u64 key = 0;


  struct ethhdr *eth = bpf_hdr_pointer(skb);
  struct iphdr *ip = (struct iphdr *)(eth + 1);


  if (ip->protocol == IPPROTO_TCP) {
    key = ip->saddr;
    value = packet_count.lookup_or_init(&key, &key);
    (*value)++;
  }


  return 0;
}

將這段代碼保存到一個(gè)文件中,例如 packet_count.c。您可以使用 clang 進(jìn)行編譯,并使用 bpftool 將其加載到內(nèi)核中。

clang -O2 -target bpf -c packet_count.c -o packet_count.o
bpftool prog load packet_count.o /sys/fs/bpf/packet_count

現(xiàn)在,您可以使用容器 ID 將此 eBPF 程序附加到特定 pod 的網(wǎng)絡(luò)接口上。

# Get the container ID of a pod
kubectl get pods -n <namespace> <pod-name> -o jsnotallow=’{.status.containerID}’
# Attach the eBPF program to the container’s network interface
bpftool net attach container <container-id> /sys/fs/bpf/packet_count

然后您可以監(jiān)控為指定 pod 計(jì)數(shù)的數(shù)據(jù)包。

使用 BPFTrace 進(jìn)行動(dòng)態(tài)跟蹤

BPFTrace 是一個(gè)靈活的動(dòng)態(tài)跟蹤工具。讓我們創(chuàng)建一個(gè)簡(jiǎn)單的 BPFTrace 腳本來(lái)監(jiān)控特定 pod 所做的系統(tǒng)調(diào)用。

tracepoint:syscalls:sys_enter_* {
  if (str(args->comm) == "<pod-name>") {
    printf("%s called %s()\n", args->comm, probefunc);
  }
}

將<pod-name>替換為您要監(jiān)控的 pod 的名稱。將此腳本保存到一個(gè)文件中,例如 syscall_trace.bt,并使用 BPFTrace 運(yùn)行它。

bpftrace syscall_trace.bt

該腳本將實(shí)時(shí)顯示指定 pod 所做的系統(tǒng)調(diào)用。

分析 Kubernetes 資源使用情況

eBPF 也可以幫助您深入了解 Kubernetes pod 和容器的資源使用情況。讓我們創(chuàng)建一個(gè) eBPF 程序來(lái)跟蹤特定 pod 的 CPU 和內(nèi)存使用情況。

#include <linux/bpf.h>
#include <linux/perf_event.h>
#include <linux/sched.h>
BPF_HASH(pod_cpu, u64, u64);
BPF_HASH(pod_memory, u64, u64);
TRACEPOINT_PROBE(sched, sched_process_exit) {
 u64 pid = bpf_get_current_pid_tgid();
 u64 cpu_usage = bpf_perf_counter_value(pod_cpu, &pid);
 u64 memory_usage = bpf_perf_counter_value(pod_memory, &pid);
 printf(“Pod PID %lld — CPU Usage: %lld ns, Memory Usage: %lld bytes\n”, pid, cpu_usage, memory_usage);
}

像之前一樣編譯這個(gè) eBPF 程序并將其加載到內(nèi)核中。然后,將其附加到特定 pod 的進(jìn)程上。

# Get the PID of a pod’s main process
kubectl exec -it -n <namespace> <pod-name> — pidof <process-name>
# Attach the eBPF program to the pod’s process
bpftool proc attach -p <pid> /sys/fs/bpf/pod_cpu
bpftool proc attach -p <pid> /sys/fs/bpf/pod_memory

現(xiàn)在,您可以實(shí)時(shí)監(jiān)控指定 pod 的 CPU 和內(nèi)存使用情況。

結(jié)論

在 Kubernetes 監(jiān)控中利用 eBPF 功能可以深入了解內(nèi)核級(jí)事件、網(wǎng)絡(luò)流量和資源使用情況。通過(guò)創(chuàng)建自定義的 eBPF 程序和使用像 BPFTrace 這樣的工具,您可以更好地理解集群的行為,排查問(wèn)題,優(yōu)化性能并分析資源利用率。

請(qǐng)記住,eBPF 是一個(gè)強(qiáng)大但底層的工具,所以要謹(jǐn)慎使用,并且在生產(chǎn)環(huán)境中運(yùn)行自定義的 eBPF 程序時(shí),始終要考慮安全隱患。進(jìn)一步探索 eBPF 生態(tài)系統(tǒng),發(fā)現(xiàn)更多提升 Kubernetes 監(jiān)控和可觀測(cè)性實(shí)踐的方法。

責(zé)任編輯:武曉燕 來(lái)源: 云云眾生s
相關(guān)推薦

2024-07-29 10:35:44

KubernetesCSI存儲(chǔ)

2022-12-22 08:14:54

2022-07-26 08:03:27

Kubernetes節(jié)點(diǎn)磁盤

2024-09-13 09:05:31

架構(gòu)思維程序

2024-01-30 18:29:29

微服務(wù)架構(gòu)Ingress

2024-05-10 08:00:48

K8soperatorGitHub

2022-11-30 09:54:57

網(wǎng)絡(luò)令牌身份驗(yàn)證

2024-01-02 12:05:26

Java并發(fā)編程

2023-08-01 12:51:18

WebGPT機(jī)器學(xué)習(xí)模型

2024-10-17 10:00:59

2023-10-31 14:04:17

Rust類型編譯器

2024-02-04 00:00:00

Effect數(shù)據(jù)組件

2023-07-26 13:11:21

ChatGPT平臺(tái)工具

2024-01-19 08:25:38

死鎖Java通信

2023-01-10 08:43:15

定義DDD架構(gòu)

2023-11-13 18:36:04

知識(shí)抽取NER

2021-11-26 11:30:07

身高重建隊(duì)列

2024-05-29 09:20:41

2023-04-26 00:41:36

A/B測(cè)試郵件數(shù)量

2024-08-09 08:17:07

SSH服務(wù)器架構(gòu)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)