1台程度のマシンで、小規模な k8s(Kubernetes) 環境を構築できる MicroK8s をラズベリーパイ(以下「ラズパイ」)に導入する手順を確認してみました。MicroK8s は Ubuntu を開発&提供している Canonical 社が開発する k8s パッケージです:
MicroK8s_logo


まずラズパイ本体を用意します。後述しますが k8s はスワップメモリを無効にして稼働させる必要があるため、ラズパイ3以前のメモリ 1GB 環境だと少し厳しいかもしれません。今回はメモリ 4GB モデルのラズパイ4を使って確認しました。

次に 64bit 版ラズパイ OS をインストールします(MicroK8s は 64bit OS 向けに提供されています)。64bit 版のラズパイ OS は 2021/01/08 の時点では正式リリースされているわけではありませんが、こちらからテスト版をダウンロードすることができます:
http://downloads.raspberrypi.org/raspios_arm64/images/

2021010801


私は 2020-08-24 という日付が入ったモジュールをダウンロードしました(この記事を記述している時点では最新の 64bit モジュールです。公式の 32bit 版と比べるとたまに知らない間に再起動してたりして、少し不安定な印象はあります)。ダウンロード後に展開してマイクロ SD カードに書き込みます(このあたりは通常の手順と同様)。そしてラズパイ(4)にセットして初期セットアップを済ませておきます。

この後に MicroK8s をインストールするのですが、その前に準備作業を2つほどしておきます。まず k8s はスワップメモリが存在していると正しく動作しないため、まずはスワップを無効にします:
$ sudo swapoff -a

続けて、これも通常の k8s を導入する際にも行う必要のある手順ですが、cgroups のメモリーサブシステムを利用するため、/boot/cmdline.txt に記述されている内容の(同じ行の)最後に以下の赤字部分を追記して保存し、この段階で一度リブートします:
console=serial0,115200 console=tty1 root=PARTUUID=a3ba36bd-02 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait quiet splash plymouth.ignore-serial-consoles cgroup_enable=memory cgroup_memory=1

これで k8s を導入するための準備が完了しました。続けて MicroK8s をインストールします。今回は公式サイトでも紹介されている、Snapd を利用する方法でインストールします。まずは Snapd (とこの後で使う iptables-persistent)をインストールして一度リブートします:
$ sudo apt install snapd iptables-persistent 

$ sudo reboot

再起動後に再度ログインし、改めて Snap を使って MicroK8s をインストールします(この手順で少し時間がかかります):
$ sudo snap install microk8s --classic

MicroK8s のインストールが完了したら以下の3つのコマンドを実行後に(一度 exit してから)再ログインします:
$ sudo usermod -a -G microk8s $USER

$ sudo chown -f -R $USER ~/.kube

$ sudo iptables -P FORWARD ACCEPT

ここまでの作業で MicroK8s がインストールされて、MicroK8s が起動されているはずです。 以下の "get nodes" コマンドを実行して STATUS 欄が "Ready" と表示されることを確認します:
$ microk8s.kubectl get nodes

NAME          STATUS   ROLES    AGE     VERSION
raspberrypi   Ready    <none>   7h25m   v1.20.0-37+6252d1e153c00f

またサービスの一覧は "get services" コマンドで確認できます:
$ microk8s.kubectl get services

NAME         TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)   AGE
kubernetes   ClusterIP   10.152.183.1   <none>        443/TCP   9h

なお、MicroK8s の起動/終了のコマンドはそれぞれ以下の通りです:
$ microk8s start  (起動)

$ microk8s stop  (終了)

Snap パッケージになっているので、インストール時の手間が非常に簡略化されている印象でした。一方で、(これは MicroK8s というよりも 64bit OS の問題なのかもしれませんが)全体的に不安定な挙動が見受けられるように感じました。"microk8s.kubectl get nodes" コマンドの結果が READY ではなく NotReady になることがあったり、システムがいつの間にか再起動していたりして、イマイチ安定していないような気もします。