
我正在嘗試v1.21.3
使用 Calico CNI 將新節點加入現有叢集。 join 命令發出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:
答案1
我設法複製了你的問題。我遇到了同樣的錯誤。需要更新一些其他設定檔。
要完全變更 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
->使用新的 IP 範圍更新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 二進位檔案並使其可執行:
sudo curl -o /usr/local/bin/calicoctl -O -L "https://github.com/projectcalico/calicoctl/releases/download/v3.20.0/calicoctl" sudo chmod +x /usr/local/bin/calicoctl
新增的IP池:
calicoctl create -f -<<EOF apiVersion: projectcalico.org/v3 kind: IPPool metadata: name: my-new-pool spec: cidr: 10.203.0.0/16 ipipMode: Always natOutgoing: true EOF
檢查是否有新的IP池:
calicoctl get ippool -o wide
取得禁用舊 IP 池的配置 ->
calicoctl get ippool -o yaml > pool.yaml
編輯配置:->在以下位置
disabled:true
新增:default-ipv4-ippool
pool.yaml
apiVersion: projectcalico.org/v3 items: - apiVersion: projectcalico.org/v3 kind: IPPool metadata: creationTimestamp: "2021-08-12T07:50:24Z" name: default-ipv4-ippool resourceVersion: "666" spec: blockSize: 26 cidr: 10.201.0.0/16 ipipMode: Always natOutgoing: true nodeSelector: all() vxlanMode: Never disabled: true
應用新配置:
calictoctl apply -f pool.yaml
命令的異常輸出
calicoctl get ippool -o wide
:NAME CIDR NAT IPIPMODE VXLANMODE DISABLED SELECTOR default-ipv4-ippool 10.201.0.0/16 true Always Never true all() my-new-pool 10.203.0.0/16 true Always Never false all()
重新建立
10.201.0.0
網路中的 Pod(在每個命名空間中,包括kube-system
命名空間):只需刪除它們,它們就會立即在新的 IP 池範圍中重新創建,例如:kubectl delete pod calico-kube-controllers-58497c65d5-rgdwl -n kube-system kubectl delete pods coredns-78fcd69978-xcz88 -n kube-system kubectl delete pod nginx-deployment-66b6c48dd5-5n6nw etc..
您也可以刪除和套用部署。
clusterCIDR
應用這些步驟後,新增節點時不會出現有關值的警告。新 Pod 會在正確的 IP 池範圍內建立。
來源: