環境
- Kubernetes 1.24
- Calico v3.21.6
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