K3s on Raspberry Pi4を構築してみる
はじめに
前回から半年以上経ってしまった...
それはそうとして冬休みなので、段ボールに眠っていたRaspberry Pi4を使っておうちKubernetesをした。
その時のログをとりあえず備忘録的に書き残しておく。
k8s自体はたくさんクラウドで作ったので、k3sでさくっと作っていく。
機材
機材はCyberAgnetのDeveloprBlog「おうちKubernetesインターン」を実施しましたを参考
機材名 | 個数 | URL | 備考 |
---|---|---|---|
Raspberry Pi4 | 3 | https://raspberry-pi.ksyic.com/main/index/pdp.id/549/pdp.open/549 | |
micro SDカード 32GB | 3 | https://www.amazon.co.jp/dp/B07MTCJHP6 | |
積載ケース | 1 | www.amazon.co.jp/dp/B07TJZ2HDG | |
PoE スイッチ | 1 | https://www.amazon.co.jp/dp/B0763TGBTS | |
PoE HAT | 3 | https://www.amazon.co.jp/dp/B07JPXR9ZN | サードパーティ製PoE HAT |
六角スペーサー | 1 | https://www.amazon.co.jp/dp/B0166GCHD4 | PoE HAT装着すると積載ケースに付属のスペーサーだと入らないので購入 |
LANケーブル 0.15m | 3 | https://www.amazon.co.jp/dp/B00FZTNJQI/ | |
Raspberry Pi3 | 1 | お家に転がってたもの | k8sクラスタへの踏み台(不要だったかも) |
構成
ざっくりと。 NASはPVあたりに使おうかなぁという気持ちがあり、図として組み込んだ
実物はこちら
JumpもPoE化 or 追加Pi4購入&交換するかなぁ
それとスペーサーが60mmもあるので、高い...公式PoEに変える検討しよ
SDカードにOSイメージを焼く
今回焼くイメージはRaspberry Pi OSとした
/etc/os-release
$ cat /etc/os-release PRETTY_NAME="Raspbian GNU/Linux 10 (buster)" NAME="Raspbian GNU/Linux" VERSION_ID="10" VERSION="10 (buster)" VERSION_CODENAME=buster ID=raspbian ID_LIKE=debian HOME_URL="http://www.raspbian.org/" SUPPORT_URL="http://www.raspbian.org/RaspbianForums" BUG_REPORT_URL="http://www.raspbian.org/RaspbianBugs"
SSH有効化
デフォルメでSSHが無効になっているので、SSHを有効化しておく。
SDカードをイメージを焼くに使ったMacBookマウントした状態で以下を実行
$ touch /Volumes/boot/ssh
構成情報
アドレスは以下の通り
ホスト名 | eth0 | wlan0 |
---|---|---|
k3s-jump | 192.168.110.50 | 192.168.11.50 |
k3s-master | 192.168.110.51 | 192.168.11.51 |
k3s-worker01 | 192.168.110.52 | 192.168.11.52 |
k3s-worker02 | 192.168.110.53 | 192.168.11.53 |
初期設定
お家ルーターに一度繋ぎ、Wifi&IPの設定してから無線LAN経由でsshで作業。
参考にさせていただいたページ
blog.nownabe.com
blog.nownabe.com
# change root $ sudo su - # 64bitモードに変更 $ echo "arm_64bit=1" >> /boot/config.txt $ cat /boot/config.txt | grep arm?_64 arm_64bit=1 # hosts追加 $ vim /etc/hosts $ grep k3s /etc/hosts 192.168.110.50 k3s-jump 192.168.110.51 k3s-master 192.168.110.52 k3s-worker01 192.168.110.53 k3s-worker02 # ipv6の停止 $ echo net.ipv6.conf.all.disable_ipv6 = 1 >> /etc/sysctl.conf $ tail -1 /etc/sysctl.conf net.ipv6.conf.all.disable_ipv6 = 1 $ sysctl -p # cgroupsのMemory Subsystem を有効化 $ vim ./boot/cmdline.txt (末尾に追記) cgroup_memory=1 cgroup_enable=memory cgroup_enable=cpuset # vimをインストール $ apt install -y vim # ホスト名の設定 $ hostnamectl set-hostname <hostname> # IPアドレスの設定 $ vim /etc/dhcpcd.conf (追記内奥). interface eth0 static ip_address=<eth0.ip>/24 interface wlan0 static ip_address=<wlan0.ip>/24 static routers=<wlan0.gateway> static domain_name_servers=<wlan0.gateway> 8.8.8.8 4.4.4.4 # SSID/Wifiのパスワード設定 $ raspi-config System Options -> S1 Wireless LANを選択して、情報を入力し再起動される
これを3台分実施
再起動後、さらにsshdの変更と作業ユーザー作成を行う
$ ssh pi@<wlan0.ip> $ sudo su- # sshdの設定変更 $ vim /etc/ssh/sshd_config (編集内容) PermitRootLogin no PasswordAuthentication no $ systemctl restart sshd # 作業ユーザー作成 $ useradd -m tm3exe $ usermod -aG sudo tm3exe $ passwd tm3exe # 作業ユーザーに変更して、sshの設定 $ su - tm3exe $ mkdir .ssh $ cat <your_authpubkey> >> ~/.ssh/authorized_keys $ chmod 700 ~/.ssh $ chmod 600 ~/.ssh/authorized_keys # デフォルトユーザーpiのパスワード削除 $ sudo passwd -d pi # swapの停止 $ sudo swapoff --all $ sudo apt-get purge -y --auto-remove dphys-swapfile $ sudo rm -fr /var/swap $ free -h total used free shared buff/cache available Mem: 912Mi 169Mi 401Mi 13Mi 341Mi 666Mi Swap: 0B 0B 0B <- 0BになっていればOK
K3sのインストール(共通)
やることは前記事と変わらず、Nodeを追加する部分だけが追加で必要。
# Master/Worker両方に実施 $ sudo su - $ curl -sfL https://get.k3s.io | INSTALL_K3S_EXEC="--disable servicelb" sh - (~snip~) Created symlink /etc/systemd/system/multi-user.target.wants/k3s.service ¨ /etc/systemd/system/k3s.service. [INFO] systemd: Starting k3s # Node取得 $ kubectl beget nodes NAME STATUS ROLES AGE VERSION k3s-master Ready master 3m16s v1.19.5+k3s2
Workerの追加
参考にさせていただいたページ
qiita.com
# Masterのみ # TOKENの取得 $ cat /var/lib/rancher/k3s/server/node-token K10560f5b4981b71a2c7886935ea74b52540b698b0bb0c22a6232d3884e10f18333::server:7a988ded50e84665f0cb547d45f75f52 # Workerのみ # k3sの停止 $ sh /usr/local/bin/k3s-killall.sh $ systemctl stop k3s # k3s-agentのservice設定 cat <<EOF > /etc/systemd/system/k3s-agent.service [Unit] Description=Lightweight Kubernetes Agent Documentation=https://k3s.io After=network-online.target [Service] Type=simple EnvironmentFile=/etc/sysconfig/k3s-agent ExecStartPre=-/sbin/modprobe br_netfilter ExecStartPre=-/sbin/modprobe nf_conntrack ExecStartPre=-/sbin/modprobe overlay ExecStartPre=-/sbin/modprobe vxlan ExecStart=/usr/local/bin/k3s agent --server \$SERVER --token \$TOKEN Delegate=yes LimitNOFILE=infinity LimitNPROC=infinity LimitCORE=infinity TasksMax=infinity TimeoutStartSec=0 [Install] WantedBy=multi-user.target EOF # デーモン設定 $ mkdir /etc/sysconfig/ $ cat <<EOF > /etc/sysconfig/k3s-agent SERVER=https://k3s-master:6443 TOKEN=K10560f5b4981b71a2c7886935ea74b52540b698b0bb0c22a6232d3884e10f18333::server:7a988ded50e84665f0cb547d45f75f52 EOF $ systemctl daemon-reload $ systemctl start k3s-agent $ systemctl status k3s-agent $ systemctl enable k3s-agent
しばらくすると
$ kubectl get nodes NAME STATUS ROLES AGE VERSION k3s-master Ready master 6m40s v1.19.5+k3s2 k3s-worker02 Ready <none> 14s v1.19.5+k3s2 k3s-worker01 Ready <none> 14s v1.19.5+k3s2
無事追加!
最後に
今回眠りに眠らせていたRaspbeyPi4をおうちKubernetesすることができた。
ちょっとした検証とかbotとか捗る環境にはなったと思う。
あとやり方は前記事と同じなので掲載しないが、MetalLBも導入した。
次はGitOps環境作りをやりたいな~(armイメージあるかなぁ..)