#kubernetes #kubernetes-pod #project-calico #calico #cni
#kubernetes #kubernetes-pod #проект-calico #ситцевый #cni
Вопрос:
Существует ли какая-либо прямая команда для извлечения podcidr, назначенного каждому узлу при использовании calico CNI.
Я ищу точную сеть и сетевую маску, назначенную каждому узлу. Я не могу получить его kubectl get nodes
ни через podCIDR value
, ни через projectcalico.org/IPv4VXLANTunnelAddr
аннотацию. Также похоже, что аннотация также будет отличаться в зависимости от туннеля VXLAN или IPIP, используемого calico.
Пытался извлечь ключ 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. Нашел точную сеть и сетевую маску, т.е. 192.168.33.64 / 26 из журнала calico.
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, назначенный каждому узлу, с помощью одной команды.
Ответ №1:
Вы можете использовать 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
Комментарии:
1. Спасибо. Но я получаю следующее из этой командной строки calico.
calicoctl get ippools NAME CIDR SELECTOR default-ipv4-ippool 192.168.0.0/16 all()
Я не получаю cidr, назначенный каждому узлу кластера.2. Спасибо. может ли это также быть получено с помощью любого вызова api для kube-apiserver?
3. Насколько мне известно, не думаю, что это возможно
Ответ №2:
Похоже, что 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>