Kubernetes

Kubernetes 1.21.3 “KubeProxyConfiguration”中“clusterCIDR”的推薦值

  • August 12, 2021

我正在嘗試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 的步驟

  1. 使用此命令更新了 kubeadm-confg 配置圖 kubectl -n kube-system edit cm kubeadm-config

podSubnet: 10.203.0.0/16

  1. 更新 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 池,您需要更新幾個配置文件中的值podCIDRClusterCIDR

  • 更新 ConfigMap kubeadm-confg- 你已經做到了
  • 更新文件/etc/kubernetes/manifests/kube-controller-manager.yaml- 你已經這樣做了
  • 使用適當的值更新節點定義podCIDR並將它們重新添加到集群中
  • 更新命名空間kube-proxy中的ConfigMapkube-system
  • 在 Calico CNI 中添加新的 IP 池並刪除舊的,重新創建部署

更新節點定義:

  1. 獲取節點名稱:kubectl get no-在我的情況下是controller
  2. 將定義保存到文件:kubectl get no controller -o yaml > file.yaml
  3. 根據您的情況,使用您的新 IP 範圍編輯file.yaml-> 更新podCIDR和值podCIDRs``10.203.0.0
  4. 刪除舊的並應用新的節點定義:kubectl delete no controller && kubectl apply -f file.yaml

請注意,您需要為集群中的每個節點執行這些步驟。

更新命名空間kube-proxy中的ConfigMapkube-system

  1. 獲取目前配置kube-proxykubectl get cm kube-proxy -n kube-system -o yaml > kube-proxy.yaml
  2. 編輯kube-proxy.yaml->ClusterCIDR用你的新 IP 範圍更新值,在你的情況下10.203.0.0
  3. 刪除舊的並應用新的kube-proxyConfigMap:kubectl delete cm kube-proxy -n kube-system && kubectl apply -f kube-proxy.yaml

在 Calico 中添加新的 IP 池並刪除舊的:

  1. 下載 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
  1. 添加新的 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 3. 獲取配置以禁用舊 IP 池 ->calicoctl get ippool -o yaml > pool.yaml 4. 編輯配置:->disabled:truedefault-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
  1. 應用新配置: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()      
  1. 重新創建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應用這些步驟後,添加新節點時沒有關於值的警告。在適當的 IP 池範圍內創建新的 pod。

來源:

引用自:https://serverfault.com/questions/1074006