k8s排查问题工具及命令

Posted by [Kohn] on Tuesday, January 9, 2024
Last Modified on Wednesday, February 21, 2024
本文阅读量

1 宿主机上进入容器namespace

排查问题时, pod内经常缺少常用工具, exec进去排查就很不方便, 此时可以在 宿主机上执行各种命令进入到容器的namespace里去, 这样就能使用宿主机上的命 令行工具来排查.

网络ns

参考: https://www.sfernetes.com/k8s-network-debug/

找到容器的PID:

docker inspect CONTAINERID | grep Pid

或者:

lsns -t pid | grep 进程名字

进入到指定PID的网络命名空间:

nsenter -t PID -n

或者通过ip命令: 根据pid找到namespace的名字

ip netns identify 129889

进入到指定namespace

ip netns exec cni-607c5530-b6d8-ba57-420e-a467d7b10c56 ip a

2 找到某个容器对应宿主机上的网卡

有些容器docker inspect看不到network, 此时可以:

ip link show eth0

eth0名字上有类似"@if43", 表示veth对的索引是 43

然后在宿主机执行:

ip link

找到对应数字的网络设备就是容器在宿主机上的veth pair了

参考: https://atbug.com/learn-cilium-and-ebpf/

3 查询某个网卡是否有bpg程序

tc filter show dev lxc00aa ingress
tc filter show dev lxc00aa egress

4 网络监控

nload

查看各个网络设备当前流量

nload devices eth0

5 veth pair操作

创建veth pair

创建:

ip link add type veth

可以看到多了两个网络设备:

ip a

创建namespace

ip netns add ns0
ip netns add ns1

转移veth设备到ns

ip link set veth0 netns ns0

启用:

ip netns exec ns0 ip link set veth0 up

分配IP:

ip netns exec ns0 ip addr add 10.0.0.1/24 dev veth0

重命名:

ip netns exec ns0 ip link set dev veth0 name eth0