Kubernetes 1.21.3 "KubeProxyConfiguration"의 "clusterCIDR"에 대한 권장 값

Kubernetes 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",

포드 CIDR을 10.201.0.0/16에서 10.203.0.0/16으로 업데이트하는 단계

  1. 이 명령을 사용하여 kubeadm-confg configmap을 업데이트했습니다. 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' 서브넷에 생성되는 포드로 표시됩니다.

# 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

귀하의 문제를 재현했습니다. 같은 오류가 발생했습니다. 몇 가지 다른 구성 파일을 업데이트해야 합니다.

포드 및 노드 IP 풀을 완전히 변경하려면 몇 가지 구성 파일의 값을 podCIDR업데이트 해야 합니다 .ClusterCIDR

  • ConfigMap 업데이트 kubeadm-confg- 이미 완료했습니다

  • 업데이트 파일 /etc/kubernetes/manifests/kube-controller-manager.yaml- 이미 했어

  • 노드 정의를 적절한 podCIDR값으로 업데이트하고 클러스터에 다시 추가합니다.

  • 네임스페이스 kube-proxy에서 ConfigMap 업데이트kube-system

  • Calico CNI에 새 IP 풀을 추가하고 이전 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에서 ConfigMap 업데이트kube-system

  1. 현재 구성 가져오기 kube-proxy:kubectl get cm kube-proxy -n kube-system -o yaml > kube-proxy.yaml
  2. 귀하의 경우 편집 kube-proxy.yaml-> 새 IP 범위로 값 업데이트ClusterCIDR10.203.0.0
  3. 이전 ConfigMap을 삭제하고 새 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: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네트워크(네임스페이스를 포함한 모든 네임스페이스) 에 있는 포드를 다시 생성합니다 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 풀 범위에 새 포드가 생성됩니다.

원천:

관련 정보