k3sをラズパイで起動するまでにやったこと

LightweightなKubernetesとして最近話題に上がっているk3s。僕もミーハーなのでさっそく家のラズパイに入れてみました。

k3s.io

k3sがなんなのか、という点についてはQiitaの以下の記事が簡潔によくまとまっています。

qiita.com

我が家には半年ほど前にkubeadmで構築したラズパイが放置されていたので、初期化してk3sを入れてみました。なんだかんだでいつも同じようなページをググりながらセットアップするので以下に手順を残しておきます。

【注意】この記事ではPodを動かしたりしません。あくまでラズパイをセットアップしてk3sでノード情報を取得(kubectl get nodes)するところまでをゴールとしています

MicroSDの準備

Raspbian Stretch Liteを使うので公式サイトからダウンロードします。

www.raspberrypi.org

これをMicroSDに焼きたいのでbalenaEtcherというソフトを使います。以下からダウンロードしておきます。

balenaEtcher - Home

これを使ってMicroSDにRaspbian Stretch Liteが入れられます。

ラズパイ用のディスプレイは持っていないのでsshできるようにしておきます。これはMicroSDのルートに ssh というファイルを置いておけばOK。おそらく boot というボリュームでマウントされているのでほとんどの場合次のコマンドでOKです。

$ sudo touch /Volumes/boot/ssh

あとはMicroSDをラズパイに差し込んで完了!

ラズパイの下準備

ラズパイを起動したらIPアドレスルーターなりで調べて ssh で繋ぎます。デフォルトユーザーは pi でパスワードは raspberry です。どのみち家でしか使わないのと、またすぐ破壊する環境なのでここらへんは特に変更しません。

$ ssh pi@192.168.11.4

ホスト名を変更

この手順は任意ですが、わかりやすいようにホスト名を変更しておきます。これには raspi-config を使用。

$ sudo raspi-config

次の画面が出てくるので 2 Network Options を選択。

f:id:kenev:20190311090918p:plain
raspi-configトップメニュー

続いて N1 Hostname を選択します。

f:id:kenev:20190311091018p:plain
raspi-config ホスト名変更

k3s-master とでも設定しておきます。

f:id:kenev:20190311091108p:plain

決定すると再起動するか聞かれるので再起動します。

cgroupの有効化

再起動後に再度 ssh して、次はRaspbianで cgroup を有効にしておきます。 この手順を忘れるとk3sの起動時にエラーとなる ので要注意です。

# 好きなエディタで開きます
$ sudo vi /boot/cmdline.txt

次の値を 行の末尾に追加します

 cgroup_enable=cpuset cgroup_memory=1 cgroup_enable=memory

新しい行に追加しちゃダメです。 必ず 末尾 に追加してください。 追加したあとは↓のようになります。(わかりにくいですが1行です)

dwc_otg.lpm_enable=0 console=serial0,115200 console=tty1 root=PARTUUID=9cdfde31-02 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait cgroup_enable=cpuset cgroup_memory=1 cgroup_enable=memory

保存したら再起動しましょう。ラズパイの下準備はこれでOKです。

$ sudo reboot

k3sのインストールと起動

ラズパイに再度 ssh して次のコマンドを叩くだけでk3sの

  • 最新版のダウンロード
  • systemdへのサービス登録
  • 起動

まですべて完了します!

$ curl -sfL https://get.k3s.io | sh -

シェルの中身が気になる人は以下にアクセスすれば中身チェックできます。

https://get.k3s.io

関数の名前からも何をやっているかはなんとなくわかります。

# --- run the install process --
{
    verify_systemd
    setup_env ${INSTALL_K3S_EXEC} $@
    download_and_verify
    create_symlinks
    create_uninstall
    systemd_disable
    create_env_file
    create_service_file
    systemd_enable_and_start
}

kubectl get nodes をk3sで実行してみましょう。通常の kubectl の先頭に k3s をつければOKです。

$ k3s kubectl get nodes
NAME         STATUS   ROLES    AGE   VERSION
k3s-master   Ready    <none>   8d    v1.13.4-k3s.1

正常に実行できているのが確認できます。

k3s kubectl 毎回入力するので kalias 貼っておきます。

$ vi ~/.bashrc

末尾に以下を追加しておきました。

alias k='k3s kubectl'

これで k get nodes のようにもっと省略してコマンド打てるようになるのですっきり!

おわりに

以上でラズパイ上での k3s のセットアップは完了です!ほとんど同じような手順でクラスタにノードを追加していけるのですが、その話はまたの機会にします。

k3sで「お家ハック」もしていけると、モチベーション維持しながらkubernetesの経験も積んでいけるので引き続き共有していきたいと思います!