我正在尝试v1.21.3
使用 Calico CNI 将新节点加入现有集群。加入命令发出clusterCIDR
警告。
如何修复此子网警告消息?
# kubeadm join master-vip:8443 --token xxx --discovery-token-ca-cert-hash sha256:xxxx
[preflight] Running pre-flight checks
[preflight] Reading configuration from the cluster...
[preflight] FYI: You can look at this config file with 'kubectl -n kube-system get cm kubeadm-config -o yaml'
W0809 14:10:27.717696 75868 utils.go:69] The recommended value for "clusterCIDR" in "KubeProxyConfiguration" is: 10.201.0.0/16; the provided value is: 10.203.0.0/16
[kubelet-start] Writing kubelet configuration to file "/var/lib/kubelet/config.yaml"
[kubelet-start] Writing kubelet environment file with flags to file "/var/lib/kubelet/kubeadm-flags.env"
更新:
我10.201.0.0/16
在集群设置期间使用,后来我改为10.203.0.0/16
. 不确定它仍然在哪里获得10.201.0.0/16
子网价值。
这是子净值。
# sudo cat /etc/kubernetes/manifests/kube-controller-manager.yaml | grep cluster-cidr
- --cluster-cidr=10.203.0.0/16
kubectl cluster-info dump | grep cluster-cidr
"--cluster-cidr=10.203.0.0/16",
"--cluster-cidr=10.203.0.0/16",
"--cluster-cidr=10.203.0.0/16",
将 pod CIDR 从 10.201.0.0/16 更新到 10.203.0.0/16 的步骤
- 使用此命令更新了 kubeadm-confg 配置图
kubectl -n kube-system edit cm kubeadm-config
podSubnet: 10.203.0.0/16
- 更新 kuber-controller-manger 并重新启动它。
sed -i 's/10.201.0.0/10.203.0.0/' /etc/kubernetes/manifests/kube-controller-manager.yaml
更新IP后。
所有配置都将子网显示为10.203.0.0
但在“10.201.0.0”子网中创建的 pod。
# kubectl get cm kube-proxy -n kube-system -o yaml |grep -i clusterCIDR
clusterCIDR: 10.203.0.0/16
# kubectl get no -o yaml |grep -i podcidr
podCIDR: 10.203.0.0/24
podCIDRs:
podCIDR: 10.203.1.0/24
podCIDRs:
podCIDR: 10.203.2.0/24
podCIDRs:
podCIDR: 10.203.3.0/24
podCIDRs:
podCIDR: 10.203.5.0/24
podCIDRs:
podCIDR: 10.203.4.0/24
podCIDRs:
podCIDR: 10.203.6.0/24
podCIDRs:
我设法复制了您的问题。我得到了同样的错误。需要更新一些其他配置文件。
要完全更改 pod 和节点 IP 池,您需要更新几个配置文件中的值
podCIDR
:ClusterCIDR
更新 ConfigMap
kubeadm-confg
- 你已经做到了更新文件
/etc/kubernetes/manifests/kube-controller-manager.yaml
- 你已经这样做了使用适当的值更新节点定义
podCIDR
并将它们重新添加到集群中更新命名空间
kube-proxy
中的ConfigMapkube-system
在 Calico CNI 中添加新的 IP 池并删除旧的,重新创建部署
更新节点定义:
kubectl get no
-在我的情况下是controller
kubectl get no controller -o yaml > file.yaml
file.yaml
-> 更新podCIDR
和值podCIDRs
10.203.0.0
kubectl delete no controller && kubectl apply -f file.yaml
请注意,您需要为集群中的每个节点执行这些步骤。
更新命名空间
kube-proxy
中的ConfigMapkube-system
kube-proxy
:kubectl get cm kube-proxy -n kube-system -o yaml > kube-proxy.yaml
kube-proxy.yaml
->ClusterCIDR
用你的新 IP 范围更新值,在你的情况下10.203.0.0
kube-proxy
ConfigMap:kubectl delete cm kube-proxy -n kube-system && kubectl apply -f kube-proxy.yaml
在 Calico 中添加新的 IP 池并删除旧的:
下载 Calico 二进制文件并使其可执行:
添加新的 IP 池:
检查是否有新的 IP 池:
calicoctl get ippool -o wide
获取配置以禁用旧 IP 池 ->
calicoctl get ippool -o yaml > pool.yaml
编辑配置:->
disabled:true
在default-ipv4-ippool
中添加pool.yaml
:应用新配置:
calictoctl apply -f pool.yaml
命令的异常输出
calicoctl get ippool -o wide
:重新创建
10.201.0.0
网络中的 pod(在每个命名空间中,包括kube-system
命名空间):只需删除它们,它们应该立即在新的 IP 池范围中重新创建,例如:您还可以删除和应用部署。
clusterCIDR
应用这些步骤后,添加新节点时没有关于值的警告。在适当的 IP 池范围内创建新的 pod。资源: