![Kubernetes 1.21.3 "KubeProxyConfiguration"의 "clusterCIDR"에 대한 권장 값](https://rvso.com/image/769311/Kubernetes%201.21.3%20%22KubeProxyConfiguration%22%EC%9D%98%20%22clusterCIDR%22%EC%97%90%20%EB%8C%80%ED%95%9C%20%EA%B6%8C%EC%9E%A5%20%EA%B0%92.png)
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",
포드 CIDR을 10.201.0.0/16에서 10.203.0.0/16으로 업데이트하는 단계
- 이 명령을 사용하여 kubeadm-confg configmap을 업데이트했습니다.
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' 서브넷에 생성되는 포드로 표시됩니다.
# 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 풀을 삭제하고 배포를 다시 만듭니다.
노드 정의 업데이트:
- 노드 이름 가져오기:
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
에서 ConfigMap 업데이트kube-system
- 현재 구성 가져오기
kube-proxy
:kubectl get cm kube-proxy -n kube-system -o yaml > kube-proxy.yaml
- 귀하의 경우 편집
kube-proxy.yaml
-> 새 IP 범위로 값 업데이트ClusterCIDR
10.203.0.0
- 이전 ConfigMap을 삭제하고 새
kube-proxy
ConfigMap을 적용합니다.kubectl delete cm kube-proxy -n kube-system && kubectl apply -f kube-proxy.yaml
Calico에 새 IP 풀을 추가하고 이전 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
네트워크(네임스페이스를 포함한 모든 네임스페이스) 에 있는 포드를 다시 생성합니다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 풀 범위에 새 포드가 생성됩니다.
원천: