1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Koinori年貢の納め時Advent Calendar 2021

Day 1

【2021年12月版】k0sをRaspbianのラズパイ4で動かす。

Last updated at Posted at 2021-11-30

k0s とは

Kubernetesのディストリビューションの一つで、"Zero Friction Kubernetes"=摩擦
ゼロのk8sだそうです。
k8sクラスタの構築、動作に必要なコードを無理やり単一のバイナリに収めたコンパクトなパッケージで、簡単に、また非常に低いスペックの環境でk8sクラスタを構築・運用することができます。

k0s 公式サイトはこちら↓です。

また Github のリポジトリは↓でございます。

必要なシステム要件が最低、"1 vCPU, 1 GB RAM"となっておりまして、スペックの低いIoTのエッジ側でもk8sが動く、というのがウリでございます。

k0s がラズパイ4で動くのか

さて、私の手元のラズパイ4は以下のようなOSとスペックでございます。

$ uname -a
Linux raspberrypi 5.10.17-v7l+ #1403 SMP Mon Feb 22 11:33:35 GMT 2021 armv7l GNU/Linux
$ cat /etc/issue
Raspbian GNU/Linux 10 \n \l

というわけで、

  • OS: Raspbian Buster
  • メモリ: 4 GB

の構成です。

K0sの公式サイトでは、以下のようにラズパイにk0sをインストールするマニュアルがございます。

ところがここでの対象環境は、メモリ 8GB、OS "Ubuntu Server 20.04.1 LTS"でして、手元の環境とはちょっと異なります。(さらに低いわけです。。。)

大丈夫なのか・・・ちょっとトライしてみましょう!

事前準備

それでは早速、上記のサイトを参考に、あくまで参考に、Raspbianをいじっていきます。

まずは "memory"の"cgroup"を有効にします。

$ sudo vi /boot/cmdline.txt

などでファイルの末尾に以下の設定を追加

cgroup_enable=memory

こちらは上記の記述の追加だけでOKでした。

続いて、以下のファイルに設定を記述してカーネルモジュールを追加します。

$ sudo vi /etc/modules-load.d/modules.conf 

などで以下の設定を追加します。

overlay
nf_conntrack
br_netfilter

この3つは必要でした。

そして再起動しましょう。

$ sudo shutdown -r now

さて、再起動が終わりましたら、一旦、cgroupやカーネルモジュールを以下のコマンドで確認してみます。

$ mount | grep cgroup
tmpfs on /sys/fs/cgroup type tmpfs (ro,nosuid,nodev,noexec,mode=755)
cgroup2 on /sys/fs/cgroup/unified type cgroup2 (rw,nosuid,nodev,noexec,relatime,nsdelegate)
cgroup on /sys/fs/cgroup/systemd type cgroup (rw,nosuid,nodev,noexec,relatime,xattr,name=systemd)
cgroup on /sys/fs/cgroup/memory type cgroup (rw,nosuid,nodev,noexec,relatime,memory)
cgroup on /sys/fs/cgroup/pids type cgroup (rw,nosuid,nodev,noexec,relatime,pids)
cgroup on /sys/fs/cgroup/blkio type cgroup (rw,nosuid,nodev,noexec,relatime,blkio)
cgroup on /sys/fs/cgroup/cpu,cpuacct type cgroup (rw,nosuid,nodev,noexec,relatime,cpu,cpuacct)
cgroup on /sys/fs/cgroup/net_cls,net_prio type cgroup (rw,nosuid,nodev,noexec,relatime,net_cls,net_prio)
cgroup on /sys/fs/cgroup/freezer type cgroup (rw,nosuid,nodev,noexec,relatime,freezer)
cgroup on /sys/fs/cgroup/perf_event type cgroup (rw,nosuid,nodev,noexec,relatime,perf_event)
cgroup on /sys/fs/cgroup/cpuset type cgroup (rw,nosuid,nodev,noexec,relatime,cpuset)
cgroup on /sys/fs/cgroup/devices type cgroup (rw,nosuid,nodev,noexec,relatime,devices)
$ cat /proc/cgroups
#subsys_name    hierarchy       num_cgroups     enabled
cpuset  9       1       1
cpu     5       1       1
cpuacct 5       1       1
blkio   4       1       1
memory  2       78      1
devices 10      38      1
freezer 7       1       1
net_cls 6       1       1
perf_event      8       1       1
net_prio        6       1       1
pids    3       43      1
$ lsmod | grep overlay
overlay               106496  0
$ lsmod | grep nf_conntrack
nf_conntrack          139264  0
nf_defrag_ipv6         20480  1 nf_conntrack
nf_defrag_ipv4         16384  1 nf_conntrack
$ lsmod | grep br_netfilter
br_netfilter           32768  0
bridge                163840  1 br_netfilter
ipv6                  495616  32 br_netfilter,bridge

はい、無事に memoryのcgroupは有効になっており、カーネルモジュールのロードはできているようですね。

k0sのインストール

では、以下のコマンドでk0sをインストールします。

$ curl -sSLf https://get.k0s.sh | sudo sh
Downloading k0s from URL: https://github.com/k0sproject/k0s/releases/download/v1.22.2+k0s.1/k0s-v1.22.2+k0s.1-arm
k0s is now executable in /usr/local/bin

続いて、クラスタのインストールと実行を以下のコマンドでおこないます。

$ sudo k0s install controller --single
...
$ sudo k0s start

今回はシングルクラスタ用のデフォルト設定でk0sのクラスタを設定し、クラスタの起動を行っております。

さすが摩擦ゼロ。インストール&初期設定がめちゃくちゃ簡単です。

動作確認

k0s startした後はしばらく・・・1分程度は応答がないと思いますが、以下のコマンドでクラスタの状態がチェックできます。

$ sudo k0s status
Version: v1.22.2+k0s.1
Process ID: 4951
Role: controller
Workloads: true

またsystemctlコマンドでサービスのログなどが確認できます。

$ systemctl status k0scontroller
...

さらに5分程度、待っていると以下のようにk0s kubectlでk8sクラスタの操作ができるようになります。

$ sudo k0s kubectl get nodes
...

さて、get nodesでノードのステータスが"Ready"になったら起動完了です!

kubectl で操作できるように設定ファイルを吐き出します。

$ sudo cat /var/lib/k0s/pki/admin.conf > ~/.kube/config

で、ちゃんとkubectlでアクセスできるか確認してみます。

$ kubectl get node
...

ここでちゃんとしたレスポンスが返って来ればOKです。
いや〜、早くもK8sクラスタ、起動完了です。

~/.kube/configlocalhostをラズパイのIPアドレスに書き換えれば他PCからのkubectlやLensで接続も可能です。

Lensでのスクショは貼りませんが、ちゃんとアクセス可能でした。すごい。簡単。

停止と破棄

以下のコマンドでサービスの停止が可能です。

$ sudo k0s stop

またクラスタの設定破棄も以下のコマンドでサクッと可能です。

$ sudo k0s reset

はい、これでクラスタのお掃除も完了です。

トライ&エラーを繰り返したいk8sクラスタでの実験ではお掃除が簡単なのは非常にありがたいですね。

感想など

k0sの名の通り、非常に簡単にクラスタの作成と破棄が行えます。
本家サイトにはラズパイのメモリ8Gが推奨とありましたが手元の4Gのラズパイでも動作できました。
少々のサービスの動作確認程度なら4Gのラズパイでも十分なのではないでしょうか。

引き続き、色々なサービスの検証を行ってまいりたいと思います。

本日は以上です。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?