kubernetes中calico CNI如何找出每个节点分配了什么podcidr
How to find out what podcidr is assigned to each node by calico CNI in kubernetes
在使用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:
试图通过 calico 注释获取它。能够找到网络,但缺少网络掩码。
kubectl get nodes -oyaml | grep -i ipv4vxlan
projectcalico.org/IPv4VXLANTunnelAddr: 192.168.33.64
projectcalico.org/IPv4VXLANTunnelAddr: 192.168.253.192
试图通过 calico pod 获取它。从 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 的 custom resource,它包含分配给每个集群节点的 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>
在使用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:
试图通过 calico 注释获取它。能够找到网络,但缺少网络掩码。
kubectl get nodes -oyaml | grep -i ipv4vxlan
projectcalico.org/IPv4VXLANTunnelAddr: 192.168.33.64
projectcalico.org/IPv4VXLANTunnelAddr: 192.168.253.192
试图通过 calico pod 获取它。从 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 的 custom resource,它包含分配给每个集群节点的 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>