![Kubernetes 1.21.3 Der empfohlene Wert für „clusterCIDR“ in „KubeProxyConfiguration“](https://rvso.com/image/769311/Kubernetes%201.21.3%20Der%20empfohlene%20Wert%20f%C3%BCr%20%E2%80%9EclusterCIDR%E2%80%9C%20in%20%E2%80%9EKubeProxyConfiguration%E2%80%9C.png)
Ich versuche, v1.21.3
mit Calico CNI einen neuen Knoten einem vorhandenen Cluster hinzuzufügen. Der Join-Befehl gibt clusterCIDR
eine Warnung aus.
Wie behebe ich diese Subnetz-Warnmeldung?
# 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"
aktualisieren:
Ich habe es 10.201.0.0/16
während der Clustereinrichtung verwendet und später zu geändert 10.203.0.0/16
. Ich bin nicht sicher, woher es immer noch 10.201.0.0/16
den Subnetzwert bekommt.
Hier ist der Teilnettowert.
# 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",
Schritt zum Aktualisieren des Pod-CIDR von 10.201.0.0/16 auf 10.203.0.0/16
- mit diesem Befehl wird die kubeadm-confg configmap aktualisiert
kubectl -n kube-system edit cm kubeadm-config
podSubnet: 10.203.0.0/16
- Kuber-Controller-Manager aktualisiert und neu gestartet.
sed -i 's/10.201.0.0/10.203.0.0/' /etc/kubernetes/manifests/kube-controller-manager.yaml
nach der Aktualisierung der IP.
Alle Konfigurationen zeigen das Subnetz als solches an, 10.203.0.0
aber Pods werden im Subnetz „10.201.0.0“ erstellt.
# 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:
Antwort1
Ich konnte Ihr Problem reproduzieren. Ich habe den gleichen Fehler erhalten. Es müssen noch einige andere Konfigurationsdateien aktualisiert werden.
Um den IP-Pool von Pods und Knoten vollständig zu ändern, müssen Sie podCIDR
einige ClusterCIDR
Werte in einigen Konfigurationsdateien aktualisieren:
ConfigMap aktualisieren
kubeadm-confg
- das hast du bereits getanDatei aktualisieren
/etc/kubernetes/manifests/kube-controller-manager.yaml
- das hast du bereits getanAktualisieren Sie die Knotendefinition mit dem richtigen
podCIDR
Wert und fügen Sie sie erneut zum Cluster hinzu.kube-proxy
ConfigMap imkube-system
Namespace aktualisierenneuen IP-Pool in Calico CNI hinzufügen und den alten löschen, Bereitstellungen neu erstellen
Knotendefinition(en) aktualisieren:
- Knotennamen abrufen:
kubectl get no
- in meinem Fall ist escontroller
- Definition(en) in Datei speichern:
kubectl get no controller -o yaml > file.yaml
- Bearbeiten
file.yaml
-> aktualisierenpodCIDR
undpodCIDRs
Werte mit Ihrem neuen IP-Bereich, in Ihrem Fall10.203.0.0
- Alte Knotendefinition löschen und neue anwenden:
kubectl delete no controller && kubectl apply -f file.yaml
Bitte beachten Sie, dass Sie diese Schritte für jeden Knoten in Ihrem Cluster ausführen müssen.
kube-proxy
ConfigMap im kube-system
Namespace aktualisieren
- Aktuelle Konfiguration abrufen von
kube-proxy
:kubectl get cm kube-proxy -n kube-system -o yaml > kube-proxy.yaml
- Bearbeiten
kube-proxy.yaml
->ClusterCIDR
Wert mit Ihrem neuen IP-Bereich aktualisieren, in Ihrem Fall10.203.0.0
- Alte ConfigMap löschen und neue anwenden
kube-proxy
:kubectl delete cm kube-proxy -n kube-system && kubectl apply -f kube-proxy.yaml
Neuen IP-Pool in Calico hinzufügen und den alten löschen:
Laden Sie die Calico-Binärdatei herunter und machen Sie sie ausführbar:
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
Neuen IP-Pool hinzufügen:
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
Prüfen Sie, ob ein neuer IP-Pool vorhanden ist:
calicoctl get ippool -o wide
Rufen Sie die Konfiguration zum Deaktivieren des alten IP-Pools ab ->
calicoctl get ippool -o yaml > pool.yaml
Bearbeiten Sie die Konfiguration: -> fügen Sie „
disabled:true
for“default-ipv4-ippool
in „ :“ einpool.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
Neue Konfiguration anwenden:
calictoctl apply -f pool.yaml
Ausgenommene Ausgabe des
calicoctl get ippool -o wide
Befehls: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()
Erstellen Sie Pods neu, die sich im
10.201.0.0
Netzwerk befinden (in jedem Namespace, einschließlichkube-system
Namespace): Löschen Sie sie einfach und sie sollten sofort im neuen IP-Poolbereich neu erstellt werden, zum Beispiel: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..
Sie können Bereitstellungen auch löschen und anwenden.
Nach dem Ausführen dieser Schritte gibt es clusterCIDR
beim Hinzufügen eines neuen Knotens keine Warnung bezüglich des Werts. Neue Pods werden im richtigen IP-Poolbereich erstellt.
Quelle: