Kubernets 1.21.3 “KubeProxyConfiguration”中“clusterCIDR”的建議值

Kubernets 1.21.3 “KubeProxyConfiguration”中“clusterCIDR”的建議值

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

  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:

答案1

我設法複製了你的問題。我遇到了同樣的錯誤。需要更新一些其他設定檔。

要完全變更 Pod 和節點 IP 池,您需要更新podCIDR幾個ClusterCIDR設定檔中的值:

  • 更新 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. 根據您的情況,編輯file.yaml->使用新的 IP 範圍更新podCIDR和值podCIDRs10.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
    
  2. 新增的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:true新增:default-ipv4-ippoolpool.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
    
  5. 應用新配置: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()      
    
  6. 重新建立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 池範圍內建立。

來源:

相關內容