動かざることバグの如し

近づきたいよ 君の理想に

CalicoのIP範囲設定を変更する

環境

PodのIP範囲変えるの面倒くさい説

PodのIP範囲とはいわゆる --cluster-cidr を指す。PodのIPが足りなくなってきたので急遽既存のクラスタcluster-cidrを変更することにした。

変更自体はマスターノードの /etc/kubernetes/manifests/kube-controller-manager.yaml の起動オプションを変更すればOKだが、Calicoで運用している場合、それだけでは不十分。

Calico側にもIP範囲の設定があるので、それを変更しなければならない。

手順

例えば変更前が「192.168.100.0/24」で変更後が「10.189.0.0/16」だったとする。

既存の cluster-cidr の値は以下のコマンドで確認できる。

kubectl cluster-info dump | grep -m 1 cluster-cidr
                            "--cluster-cidr=10.189.0.0/16",

先にcalicoctlコマンドが使えるようにしておく。公式ドキュメントからインストールできる

確認 古CIDRのママである

$ calicoctl get ippool -o wide
NAME                  CIDR            NAT    IPIPMODE   VXLANMODE   DISABLED   DISABLEBGPEXPORT   SELECTOR   
default-ipv4-ippool   192.168.100.0/24   true   Always     Never       false      false              all()      

以下のようにYAMLを適用する。「new-pool」の名前は任意、「10.189.0.0/16」は変更後のCIDR

calicoctl create -f -<<EOF
apiVersion: projectcalico.org/v3
kind: IPPool
metadata:
  name: new-pool
spec:
  cidr: 10.189.0.0/16
  ipipMode: Always
  natOutgoing: true
EOF

増えているのを確認

calicoctl get ippool -o wide

NAME                  CIDR             NAT    IPIPMODE   DISABLED   SELECTOR
default-ipv4-ippool   192.168.100.0/24   true   Always     false      all()
new-pool              10.189.0.0/16    true   Always     false      all()

だが、このままだと古いCIDRがそのままなので最終的には消したい。が、まだPodは古いCIDRを使っているので移行する必要がある。

まずは古いCIDRにこれ以上行かないように無効化する

YAMLを出力

calicoctl get ippool -o yaml > pool.yaml

古い方のCIDRに disabled: true を追記

apiVersion: projectcalico.org/v3
kind: IPPool
metadata:
  name: default-ipv4-ippool
spec:
  cidr: 192.168.100.0/24
  ipipMode: Always
  natOutgoing: true
+  disabled: true

適用

calicoctl apply -f pool.yaml

確認

calicoctl get ippool -o wide

NAME                  CIDR             NAT    IPIPMODE   DISABLED   SELECTOR
default-ipv4-ippool   192.168.100.0/24   true   Always     true      all()
new-pool              10.189.0.0/16    true   Always     false      all()

あとは全podを再起動させる必要がある。

全部PodのIPを乗せ替え終わったら以下のコマンドで削除

calicoctl delete pool default-ipv4-ippool

参考リンク