[k3s][k8s][container] 軽量なk8s互換のk3sをARM64環境で試してみた。

2019-03-01 09:22:10AIX、UNIX、Linux, ARM, Containerarm, container, docker, k3s, k8s, kubernetes, rancher

20190301090311215

最近、もっぱらインフラ関連はkubernetesで盛り上がっていますが、その中でも大きな役割を果たしている企業の一つであるRancher Labsから、必要機能に絞ったうえで軽量化したk8s環境を構築できる、k3sがリリースされました。

わざわざ"Optimized for ARM"と書かれている点や、Arm向けにbinaryが用意されていますので、自分の手元の環境のArm板で導入してみました。

確認環境:

$ uname -a
Linux dns02 4.4.176-rockchip64 #1 SMP Mon Feb 25 12:01:37 CET 2019 aarch64 aarch64 aarch64 GNU/Linux

もうすでにqiitaなどには記事が書かれていますが、導入自体は非常に簡単です。

$ curl -sfL https://get.k3s.io | sh -
[INFO] Creating uninstall script /usr/local/bin/k3s-uninstall.sh
[sudo] password for kometch:
[INFO] Downloading https://github.com/rancher/k3s/releases/download/v0.1.0/sha256sum-arm64.txt
[INFO] Downloading https://github.com/rancher/k3s/releases/download/v0.1.0/k3s-arm64
[INFO] Verifying download
[INFO] Installing k3s to /usr/local/bin/k3s
[INFO] Creating /usr/local/bin/kubectl symlink to k3s
[INFO] Creating /usr/local/bin/crictl symlink to k3s
[INFO] systemd: Creating /etc/systemd/system/k3s.service
[INFO] systemd: Enabling k3s unit
Created symlink /etc/systemd/system/multi-user.target.wants/k3s.service → /etc/systemd/system/k3s.service.
[INFO] systemd: Starting k3s
~$ k3s kubectl get node
The connection to the server 192.168.1.2:6443 was refused - did you specify the right host or port?

おっと、

POINT

手順にもあるように実際にk8s関連のプロセスが起動するまで30秒ほど必要

なので待ちます。

$ k3s kubectl get node
NAME STATUS ROLES AGE VERSION
dns02 Ready 24s v1.13.3-k3s.6

起動したことを確認しました。

手順にもあるように、nodeを追加するには、serverとして起動したnodeにあるnode-tokenを利用します。

$ k3s agent --server https://myserver:6443 --token ${NODE_TOKEN}

今のところ、自動起動する形で、nodeを設定する方法がなさそうなので、systemd unitファイルを書き換えます。

# /etc/systemd/system/k3s.service
[Unit]
Description=Lightweight Kubernetes
Documentation=https://k3s.io
After=network.target
[Service]
ExecStartPre=-/sbin/modprobe br_netfilter
ExecStartPre=-/sbin/modprobe overlay
-ExecStart=/usr/local/bin/k3s server
+ExecStart=/usr/local/bin/k3s agent -s https://myserver:6443 -t ${NODE_TOKEN}
KillMode=process
Delegate=yes
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
TasksMax=infinity
[Install]
WantedBy=multi-user.target

実際にはServerのIPアドレスまたはURL、そして、/var/lib/rancher/k3s/server/node-tokenに記載されたnode-tokenに置き換えてください。
正しく実行できれば、以下のようにしてnodeが確認できるはずです。

$ kubectl get node
NAME STATUS ROLES AGE VERSION
dns02 Ready 43m v1.13.3-k3s.6
k8s-work1 Ready 18m v1.13.3-k3s.6
k8s-work2 Ready 19m v1.13.3-k3s.6
k8s-work3 Ready 21m v1.13.3-k3s.6
k8s-work4 Ready 32m v1.13.3-k3s.6

kubectlにシンボリックリンクが張られており、基本的なコマンドはそのまま使えそうです。

とりあえず、アップストリームまで追えないけど、k8sを試してみたい方、ARM板でk8sを実装するにはリソースが厳しいと思っている方、向けになるのでしょうかね。

$ ps axuwwf | grep k3s
kometch 17879 0.0 0.0 4376 664 pts/0 S+ 09:20 0:00 | \_ grep --color=auto k3s
root 6502 37.7 6.7 393724 276168 ? Ssl 08:32 17:53 /usr/local/bin/k3s server

k8sのようにストレージへの負荷も大きくなさそうなので、MicroSD環境でもなんとかいけそうです。

この記事を書いた人

kometchtech

うつ病を患いながら、IT業界の末席にいるおっさんエンジニア。科学計算をしたことがないのに、HPC分野にお邪魔している。

興味のある分野で学習したことをblogにまとめつつ、うつ病の経過症状のメモも置いておく日々。

じつはRouterboard User Group JPの中の人でもある。

Amazon欲しいものリスト / Arm板を恵んでくれる人募集中

2019-03-01 09:22:10AIX、UNIX、Linux, ARM, Containerarm, container, docker, k3s, k8s, kubernetes, rancher