问题描述
在使用kubeadm
初始化的运行中的Kubernetes集群中,没有传递--pod-network-cidr
选项。他想知道如何获取Pod网络的CIDR。
解决方案
请注意以下操作注意版本差异及修改前做好备份。
方案1
使用以下命令可以获取集群中每个节点的Pod CIDR地址:
kubectl get nodes -o jsonpath='{.items[*].spec.podCIDR}'
请注意,如果输出为空,可能是因为节点的spec
字段为空。
方案2
使用以下命令可以显示kube-proxy
使用的Pod网络CIDR:
kubectl cluster-info dump | grep -m 1 cluster-cidr
请注意,如果输出为空,可能是因为没有设置Pod网络CIDR。
方案3
Pod网络CIDR(也称为--cluster-cidr
或--pod-network-cidr
)是传递给kube-controller-manager
配置的。可以使用以下命令获取:
ps -ef | grep "cluster-cidr"
方案4
如果使用的是kubeadm
版本1.22,可以使用以下命令查看默认值:
kubeadm config print init-defaults | grep "serviceSubnet"
请注意,这是唯一一个在某些情况下有效的答案(Kubernetes版本为1.24.0)。
方案5
Pod网络CIDR信息可以在文件/etc/kubernetes/manifests/kube-controller-manager.yaml
中找到:
sudo grep cidr /etc/kubernetes/manifests/kube-*
方案6
使用kubeadm
命令可以获取Pod网络CIDR:
kubeadm config view | grep Subnet
请注意,这个命令与其他答案中提供的命令有什么区别,并且可以添加一个命令输出的示例吗?
方案7
以下是几种选项的组合(结合现有答案并添加Calico的选项),包括示例输出:
选项1:在主节点上运行以下命令(也适用于在Ubuntu上运行microk8s等情况):
kubeadm config view | grep Subnet
示例输出(本地3节点集群,主节点):
podSubnet: 172.16.0.0/16
serviceSubnet: 10.96.0.0/12
选项2:在主节点上运行以下命令:
ps -ef | grep cluster-cidr
示例输出(在运行microk8s的本地机器上):
vincent 6841 27089 0 09:52 pts/7 00:00:00 grep --color=auto cluster-cidr
root 7053 1 0 feb12 ? 00:00:14 /snap/microk8s/1173/kube-proxy --kubeconfig=/var/snap/microk8s/1173/credentials/proxy.config --cluster-cidr=10.152.183.0/24 --healthz-bind-address=127.0.0.1
选项3:在主节点上运行以下命令:
sudo grep cidr /etc/kubernetes/manifests/kube-*
示例输出(相同主节点):
/etc/kubernetes/manifests/kube-controller-manager.yaml: - --allocate-node-cidrs=true
/etc/kubernetes/manifests/kube-controller-manager.yaml: - --cluster-cidr=172.16.0.0/16
/etc/kubernetes/manifests/kube-controller-manager.yaml: - --node-cidr-mask-size=24
如果使用Calico,可以使用calicoctl
命令:
CALICO_KUBECONFIG=~/.kube/config DATASTORE_TYPE=kubernetes calicoctl get ippool -o wide
示例输出(对于相同集群,可以在具有正确的kubectl配置和与集群的连接的任何位置运行):
NAME CIDR NAT IPIPMODE DISABLED SELECTOR default-ipv4-ippool 172.16.0.0/16 true Always false all()
根据您的网络选项,可能还有其他选项,希望在相应的文档中有所说明。
方案8
要获取Service IP范围(即分配给ClusterIP的IP),可以使用以下命令:
ps -aux | grep kube-apiserver | grep service-cluster-ip-range
要找到Pod网络范围,当您使用kubeadm 1.22定义集群并使用weave作为网络插件时,可以使用以下命令:
首先,使用以下命令找到weave pod的名称:
kubectl get pod -n kube-system | grep weave
然后,复制三个pod名称中的任意一个。
kubectl -n kube-system logs <<weave-net-podname-from-above-step>> -c weave | grep ipalloc-range
您将找到默认的10.32.0.0/12或您在kubeadm init期间分配的任何范围。