
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プールを追加し、古いものを削除して、デプロイメントを再作成します。
ノード定義を更新します:
- ノード名を取得します:
kubectl get no
- 私の場合はcontroller
- 定義をファイルに保存:
kubectl get no controller -o yaml > file.yaml
- 編集
file.yaml
-> 更新してpodCIDR
、podCIDRs
新しいIP範囲の値を入力します(あなたの場合)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
->ClusterCIDR
新しいIP範囲で値を更新します(あなたの場合)10.203.0.0
- 古いConfigMapを削除し、新しい
kube-proxy
ConfigMapを適用します。kubectl delete cm kube-proxy -n kube-system && kubectl apply -f kube-proxy.yaml
Calico に新しい 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 プール範囲に作成されます。
ソース: