gpt4 book ai didi

kubernetes - 如何查看kubernetes中的pod和veth关系

转载 作者:行者123 更新时间:2023-12-05 00:56:39 24 4
gpt4 key购买 nike

反正有看kubernetes v1.15.2 pod和veth的关系吗?现在我可以在主机中看到 veth,但不知道拥有哪个 pod。

vethe4297f4: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1450
ether ba:01:db:4a:7d:d0 txqueuelen 0 (Ethernet)
RX packets 9999796 bytes 1671107011 (1.5 GiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 9231477 bytes 2153738950 (2.0 GiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

vethf059d46: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1450
ether 6a:8f:a3:65:dd:4c txqueuelen 0 (Ethernet)
RX packets 11724557 bytes 5581499446 (5.1 GiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 12847645 bytes 2142367255 (1.9 GiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

vethf9efebf: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1450
ether fa:c7:76:53:4a:36 txqueuelen 0 (Ethernet)
RX packets 11103657 bytes 2587046474 (2.4 GiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 8993500 bytes 1816804215 (1.6 GiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

顺便说一下,我正在从架构中学习法兰绒通信程序:

enter image description here

最佳答案

is there anyway to see the relationship of kubernetes v1.15.2 pod and veth?

TL;DR :是的。
有一个bunch of similar topics在 StackOverflow 甚至一些 scripts on Github .

说明:

有一个 very good article关于 Kubernetes (K8s) 网络。

由 Linux 的网络命名空间和虚拟接口(interface)处理的过度简化的“K8s 网络”。

以下控制台输出已在我的 GKE 集群上进行,但也适用于独立集群。

$ sudo ip link show | egrep "veth|docker" | awk -F":" '{print $1": "$2}'
3: docker0
5: vethcf35c1bb@if3
6: veth287168da@if3
7: veth5c70f15b@if3
11: veth62f193f7@if3
12: vetha38273b3@if3
14: veth240a8f81@if3

sudo docker ps --format '{{.ID}} {{.Names}} {{.Image}}' "$@" | wc -l
25

如您所见,我有 6 个 veth 为 25 个 docker 容器提供服务。让我们找到为其中一个 pod 提供流量的 veth

$ kubectl get pods 
NAME READY STATUS RESTARTS AGE
server-go-7b57857cfb-p6m62 1/1 Running 0 7m41s
  1. 让我们找到 pod 的 docker 容器 ID。
$ sudo docker ps --format '{{.ID}} {{.Pid}} {{.Names}} {{.Image}}' "$@" | grep POD_server
6aa1d952a9f3 k8s_POD_server-go-7b57857cfb-p6m62_default_02206a28-42e1-43a5-adb8-f6ab13258fb1_0 k8s.gcr.io/pause:3.1
  1. 为它检查一个 pid:
$ sudo docker inspect --format '{{.State.Pid}}' 6aa1d952a9f3
4012085
  1. 允许系统工具访问该 pid 的命名空间:
$ sudo ln -sf /proc/${pid}/ns/net /var/run/netns/ns-${pid}
#in my case the commands were :
$ if [ ! -d /var/run/netns ]; then sudo mkdir -p /var/run/netns; fi
$ sudo ln -sf /proc/4012085/ns/net /var/run/netns/ns-4012085
$ sudo ip netns exec "ns-4012085" ip link show type veth | grep "eth0"
3: eth0@if14: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1460 qdisc noqueue state UP mode DEFAULT group default
  1. 检查为容器提供流量的确切接口(interface)。

从该输出 (eth0@if14) 我们可以说 6aa1d952a9f3 docker 容器的 eth0 链接到接口(interface) 14: veth240a8f81@if3 在主机上。

基于此示例,您可以编写自己的脚本以将 veth 接口(interface)与 Pod、容器等相匹配。

希望对您有所帮助。

关于kubernetes - 如何查看kubernetes中的pod和veth关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62145066/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com