概要
UbuntuをインストールしたラズベリーパイをKubernetesのノードに追加して、CalicoやFlannelでCNI(Container Network Interface)の設定をしようとしたら上手く動かずにハマる…。試行錯誤してようやく解決したので、その方法をご紹介。
環境
- Kubernetesのバージョン : v1.24.3
- ノード
- master
- Linuxマシン(ラズパイではない)
- OS : Debian GNU/Linux 10 (buster)
- CPUアーキテクチャ : x86_64
- worker
- Raspberry Pi 4 Model B 4GB
- OS : Ubuntu 22.04 LTS
- CPUアーキテクチャ : aarch64
- master
発生現象
ラズパイのノード追加は問題なくできるが、以下記事(自筆)の方法などでPod間通信の設定をしようとすると、上手く行かない。
例えばCalicoで設定しようとした場合に、ラズパイにデプロイされるcalico-nodeというPodが再起動を何度も繰り返す事態となる…。(Flannelの場合は、kube-flannel-dsでPod同様の現象が発生)
原因と解決法
どうやら、ラズパイにVXLANの設定が出来ていなかったことが原因だった模様。
以下の記事を参考にして、linux-modules-extra-raspi
をインストールして解決
https://bugs.launchpad.net/ubuntu/+source/linux-raspi/+bug/1947628
インストールと設定手順
$ sudo apt update -y && \
sudo apt install -y linux-modules-extra-raspi
$ sudo reboot now
再起動したらPod間通信できるようになった!
現時点で確認したのはラズパイをWorkerノードにした場合のみだが、Masterノードにしてもこれで問題なく動くはず。
補足:VXLANのメモ
VXLANについてよくわかっていない上でのメモ。
Kubernetesの異なるノードにPodがデプロイされた際に、それらのPodが「共通に属するネットワーク」を作りたい。そんなネットワークを作ってくれるのがCalicoやFlannel等のCNIと呼ばれるもの。
そのためには、IPアドレスの異なるノードを跨ってネットワークを作る必要があるが、VLAN(Virtual LAN)では実現不可能。
そこでVLANよりも拡張性の高いVXLAN(Virtual Extensible LAN)を使う必要がある。