如何找出kubernetes中calico CNI为每个节点分配了什么podcidr



使用calico CNI时,是否有任何直接命令来获取分配给每个节点的podcidr。

我正在寻找分配给每个节点的确切网络和网络掩码。无论是通过podCIDR value还是通过projectcalico.org/IPv4VXLANTunnelAddr注释,我都无法从kubectl get nodes获取它。此外,根据calico使用的VXLAN或IPIP隧道,注释也会有所不同。

尝试通过podCIDR密钥从节点获取。得到以下输出。这不是分配给节点的网络。

kubectl get nodes -oyaml | grep -i podcidr -B 1
spec:
podCIDR: 192.168.0.0/24
podCIDRs:
--
spec:
podCIDR: 192.168.2.0/24
podCIDRs:

试图通过花布注释获取它。能够找到网络,但网络掩码丢失。

kubectl get nodes -oyaml | grep -i ipv4vxlan
projectcalico.org/IPv4VXLANTunnelAddr: 192.168.33.64
projectcalico.org/IPv4VXLANTunnelAddr: 192.168.253.192

我试着用花布盒子取。从calico日志中找到了确切的网络和网络掩码,即192.168.33.64/26

kubectl logs calico-node-h2s9w   -n calico-system | grep cidr
2020-12-14 06:54:50.783 [INFO][18] tunnel-ip-allocator/ipam.go 140:
Attempting to load block cidr=192.168.33.64/26 host="calico-master"

但我想避免查看每个节点上的calico pod日志。有没有更好的方法可以通过单个命令找到分配给每个节点的podcidr。

您可以使用etcdctl来了解分配给每个节点的子网块的详细信息。

ETCDCTL_API=3 etcdctl ls /calico/ipam/v2/host/node1/ipv4/block/

上面的节点node1的示例将给出如下内容作为输出。

/calico/ipam/v2/host/node1/ipv4/block/192.168.228.192-26

看起来calico添加了一个名为ipamblocks的自定义资源,它包含分配给每个集群节点的podcidr。

自定义资源的名称本身包含节点的podcidr。

kubectl get ipamblocks.crd.projectcalico.org 
NAME               AGE
10-42-123-0-26     89d
10-42-187-192-26   89d

获取确切podcidr和nodeip:的命令

kubectl get ipamblocks.crd.projectcalico.org -o jsonpath="{range .items[*]}{'podNetwork: '}{.spec.cidr}{'t NodeIP: '}{.spec.affinity}{'n'}"
podNetwork: 10.42.123.0/26   NodeIP: host:<node1-ip>
podNetwork: 10.42.187.192/26     NodeIP: host:<node2-ip>

相关内容

  • 没有找到相关文章

最新更新