免責事項:これは英文の記事「Antrea-agent restarting continuously with error "Spec.PodCIDR is empty"」の日本語訳です。記事はベストエフォートで翻訳を進めているため、ローカライズ化コンテンツは最新情報ではない可能性があります。最新情報は英語版の記事で参照してください。
ゲストクラスター内のAntrea-agentポッドが繰り返しCrashLoopBackOff状態になる
# kubectl get pod -A | grep antrea
kube-system antrea-agent-8jxtr 1/2 CrashLoopBackOff 5 (107s ago) 7m28skube-system antrea-agent-nrpc8 1/2 CrashLoopBackOff 5 (68s ago) 6m51skube-system antrea-agent-ns9w8 2/2 Running 0 160mkube-system antrea-controller-977ddfd7-x6nfb 1/1 Running 0 160mvmware-system-antrea antrea-pre-upgrade-job-g5ssq 0/1 Completed 0 160m
Antrea-agentポッドのログに以下のようなエラーが記録される
# kubectl logs -n kube-system antrea-agent-8jxtr
E0116 07:50:52.897559 1 agent.go:911] "Spec.PodCIDR is empty for Node. Please make sure --allocate-node-cidrs is enabled for kube-controller-manager and --cluster-cidr specifies a sufficient CIDR range, or nodeIPAM is enabled for antrea-controller" err="context deadline exceeded" nodeName="xxxxxxxxxx"F0116 07:50:52.897944 1 main.go:54] Error running agent: error initializing agent: Spec.PodCIDR is empty for Node xxxxxxxxxx
vSphere with Tanzu
"Spec.PodCIDR is empty"エラーは、Kubernetesのkube-controller-managerが新しいノードに対して割り当てるためのサブネットを使い果たすことで発生します。
このケースでは、クラスタをポッド用に172.X.X.0/24の範囲のCIDRブロックを割り当てるように構成していました。
このCIDRブロックの範囲では、クラスタ中に1ノードしかサポートできません。
最初のコントロールプレーンノードが、唯一使用できる/24のブロックを消費します。そのため、他のノードに利用できるCIDRがなくなります。
既存のクラスターのポッドのCIDR範囲は変更できません。より大きな範囲、あるいは異なるサブネットマスクの設定でデプロイしなおす必要があります。/16のサブネットのCIDRの使用が推奨されます。
vSphere KubernetesゲストクラスタにおけるサービスやポッドのCIDR範囲の変更について、詳細は以下のKBを参照してください。
Changing Service and Pod CIDR Ranges in vSphere Kubernetes Guest Cluster