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

ポッドの 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プールを追加し、古いものを削除して、デプロイメントを再作成します。

ノード定義を更新します:

  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のConfigMapを更新するkube-system

  1. 現在の構成を取得しますkube-proxy:kubectl get cm kube-proxy -n kube-system -o yaml > kube-proxy.yaml
  2. 編集kube-proxy.yaml->ClusterCIDR新しいIP範囲で値を更新します(あなたの場合)10.203.0.0
  3. 古いConfigMapを削除し、新しいkube-proxyConfigMapを適用します。kubectl delete cm kube-proxy -n kube-system && kubectl apply -f kube-proxy.yaml

Calico に新しい 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 プール範囲に作成されます。

ソース:

関連情報