こんにちは。
今回は、RaspberryPi4が2台手に入ったので、「おうちKubernetesクラスタ」を構築してみたいと思います。「おうちKubernetes」といえば、株式会社サイバーエージェントの「おうちKubernetesインターン」が有名かと思いますので、気になる方は覗いてみてください。
RaspberryPiの準備
まず、機材を用意します。
今回利用したのは、
- RaspberryPi4(4GB)*2 (色々動かすなら8Gの方がオススメ)
- MicroSDカード(32GB)*2
- RaspberryPiクラスターケース*1
- USB電源(5V/3A)*2
- 適当なLANケーブル
- 適当なSW
となります。
欲を言えば、LANケーブル1本で電源供給できるPoE構成にしたいですが、PoE HATが高いので妥協です。また、Kubernetesのcontrol-planeは内部のetcdで利用しているRaftという分散合意アルゴリズムの関係で奇数台でしか利用することは出来ません、そのためcontrol-planeを冗長化する場合は3台以上のノードが必要になるのでご注意ください。
次にOSのイメージ作成を行います。
OSイメージ作成は、Rasbherry Pi Imagerを利用し、Ubuntu Server 20.04.3 LTS (64Bit) を導入しました。このとき、ホスト名やユーザ情報等も設定してしまうと楽だと思います。
SDカードにイメージの書き込みが完了したら、軽く動作確認を行い、問題なければクラスタケースに組み込みます。
割と細かい作業になる為、ピンセット等、ナットを固定できるものがあると重宝すると思います。
ちなみに、ファン音は少し気になる為、常時稼働する方は大きめのファンやヒートシンクを搭載する方が静音性が高まり良いと思います。
組み込みが完了したら、起動確認を行い、netplanでIPアドレスを固定します。
初回の接続は、ルータでDHCP払い出し状況を確認するか、ARPテーブルを確認する等をすると、IPアドレスが分かるためSSHしやすいと思います。
KubeadmでKubernetesクラスタ構築
今回はKubeadmで構築します。
基本的には「kubeadmのインストール」に記載されている通り作業すれば問題ありません。
私は、CRIにcontainerdを利用する構成で構築を行いました。
クラスタの構築が完了したら、kubectlコマンドが利用できるように設定ファイル(kubeconfig)のコピーを行います。
> mkdir -p $HOME/.kube
> sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
> sudo chown $(id -u):$(id -g) $HOME/.kube/config
最後にコンテナ通信ができるようにするため、CNIのインストールを行います。
CNIにはCalicoを利用しました。
> wget https://projectcalico.docs.tigera.io/manifests/calico.yaml
> kubectl apply -f calico.yaml
構築が完了したことを確認します。
あそぶ
構築が完了したら、いろいろなものをデプロイして遊びましょう。
自分は、とりあえず定番なnginxやPrometheus-Grafana等を入れてみました。
RaspberryPiはARMアーキテクチャを採用しているため、x86向けイメージが利用できない為注意が必要です。DockerHubでARM向けイメージを探すと良いでしょう。
利用してみた印象としては、思ったよりCPU性能が高くビックリしました。が、コンテナの作成等は重い印象がありました。SDカードの速度がボトルネックなのでしょうか。そのあたりも調査し、拡張していけると面白いかもしれません。
おうちKubernetesができた。
— アリシィ (@shigure_alicey) February 18, 2022
ノード増やしたい…。 https://t.co/KDurvasU4e pic.twitter.com/Tew4UmmtFt
ばいち
コメント