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

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



RaspberryPiの準備

まず、機材を用意します。
今回利用したのは、
となります。
欲を言えば、LANケーブル1本で電源供給できるPoE構成にしたいですが、PoE HATが高いので妥協です。

次に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カードの速度がボトルネックなのでしょうか。そのあたりも調査し、拡張していけると面白いかもしれません。



ばいち

コメント