Kubernets 1.21.3 “KubeProxyConfiguration”中“clusterCIDR”的推荐值

Kubernets 1.21.3 “KubeProxyConfiguration”中“clusterCIDR”的推荐值

我正在尝试使用v1.21.3Calico 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但 pod 在“10.201.0.0”子网中创建。

# 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 池并删除旧的 IP 池,重新创建部署

更新节点定义:

  1. 获取节点名称:kubectl get no- 在我的例子中是controller
  2. 将定义保存至文件:kubectl get no controller -o yaml > file.yaml
  3. 编辑file.yaml-> 更新podCIDRpodCIDRs使用你的新 IP 范围值(以你的情况为准)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 池并删除旧的 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: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
    
  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-systemnamespace):只需删除它们,它们就会立即在新的 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 池范围内创建。

来源:

相关内容