流行りの「おうちKubernetesクラスタ」やってみた

 こんにちは。
今回は、RaspberryPi4が2台手に入ったので、「おうちKubernetesクラスタ」を構築してみたいと思います。「おうちKubernetes」といえば、株式会社サイバーエージェントの「おうちKubernetesインターン」が有名かと思いますので、気になる方は覗いてみてください。



RaspberryPiの準備

まず、機材を用意します。
今回利用したのは、
欲を言えば、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を利用する構成で構築を行いました。
この際少しハマった点として、 kubeadm initkubeadm join の際に
--cri-socket=/run/containerd/containerd.sock '
の指定が必要になりますので注意しましょう。
(環境変数がしっかり設定されていれば問題ないと思います。)

クラスタの構築が完了したら、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を利用しました。
インストール手順は「Install Calico networking and network policy for on-premises deployments」の通りです。

> wget https://projectcalico.docs.tigera.io/manifests/calico.yaml
> kubectl apply -f calico.yaml


構築が完了したことを確認します。


あそぶ

構築が完了したら、いろいろなものをデプロイして遊びましょう。
自分は、とりあえず定番なnginxやPrometheus-Grafana等を入れてみました。
RaspberryPiはARMアーキテクチャを採用しているため、x86向けイメージが利用できない為注意が必要です。DockerHubでARM向けイメージを探すと良いでしょう。



利用してみた印象としては、思ったよりCPU性能が高くビックリしました。が、コンテナの作成等は重い印象がありました。SDカードの速度がボトルネックなのでしょうか。そのあたりも調査し、拡張していけると面白いかもしれません。




ばいち

コメント