rpi4 * 3 で k8s クラスタを作る
- rpi 4 (4GB)
- Arch Linux (ARM)
Windowsの世界
Arch on WSL2
kei@Win-Desktop-wsl
OS: Arch Linux on Windows 10 x86_64
Kernel: 5.4.72-microsoft-standard-WSL2
Shell: zsh 5.8
CPU: AMD Ryzen 7 3800X (16) @ 3.892GHz
Memory: 279MiB / 12733MiB
Raspbian(32bit)
ArchLinux ARM(64bit) on Raspberry Pi
- 組み立てやってテンション上げる
- けっこう辛かった
- ネジ穴の精度よ……
- メインのLANにぶらさげるLANのセットアップ
- 型落ちのやつ買っちゃった
- Raspbian を headlessで
- イメージ焼くところは横着した
- このあとめんどうなことやるからね
- ルータに有線で接続してssh - 新ユーザ作ってpiユーザ消す - パスワード→鍵認証はやらない(raspbianをこのあと使わないので)
- Raspbian 上 で ArchLinux ARM を焼く
# $はすべて sudo
$ fdisk /dev/sda
# いいかんじにパーティション切る
$ mkfs.vfat /dev/sda1
$ mkdir boot
$ mount /dev/sda1 boot
$ mkfs.ext4 /dev/sda2
$ mkdir root
$ mount /dev/sda2 root
# イメージ落とす
$ wget http://os.archlinuxarm.org/os/ArchLinuxARM-rpi-aarch64-latest.tar.gz
# ここから先はsuする
$ su
% bsdtar -xpf ArchLinuxARM-rpi-4-latest.tar.gz -C root
% sync
# 64bit かつ rpi4 なので
% sed -i 's/mmcblk0/mmcblk1/g' root/etc/fstab
% mv root/boot/* boot
# マウントしたらちゃんとアンマウントしようね
% umount boot root
# これを3セット (さらに別用途で+1セットやったのは秘密)
- 各マシンにホスト名ふったりユーザ作ったり
pacman -Syyu
めっちゃ重い(国内ミラーなさそう)pacman -S sudo
- ホスト名変えた
- kisaragi
- mogami
- kumano
- sudoersいじった
- 公開鍵認証以外封じた
- Kubernetesまわりガーっとインストール
- Ansibleでやろうとしたが、pacmanだけでなくyayも使うのでちょっと厳しかった
- ので横着してシェルスクリプト書いたが横着しすぎてコケた
- ので最終的に半手作業……
#!/bin/bash -eu
pacman -S git base base-devel --noconfirm
mkdir ~/build/
cd ~/build
git clone https://aur.archlinux.org/yay.git
cd ~/build/yay
makepkg -si --noconfirm
cd ~/
yay -S docker kubelet-bin kubeadm-bin kubectl-bin ebtables ethtool socat conntrack-tools cni-plugins --noconfirm
- Kubernetesセットアップ
- 構成
- kisaragi : Master
- mogami : node
- kumano : node
- お船じゃないよ
- kisaragi
- sudo kubeadm init --pod-network-cidr=10.244.0.0/16
- mkdir -p $HOME/.kube
- sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
- sudo chown
$(id -u):$ (id -g) $HOME/.kube/config - kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
- mogami & kumano
- sudo systemctl enable kubelet.service
- sudo systemctl start kubelete.service
- sudo kubeadm join {いろんなひみつのオプション}
- 再度kisaragi
- kubectl label node mogami node-role.kubernetes.io/worker=worker
- kubectl label node kumano node-role.kubernetes.io/worker=worker
kisaragi% kubectl version
Client Version: version.Info{Major:"1", Minor:"20", GitVersion:"v1.20.2", GitCommit:"faecb196815e248d3ecfb03c680a4507229c2a56", GitTreeState:"clean", BuildDate:"2021-01-13T13:28:09Z", GoVersion:"go1.15.5", Compiler:"gc", Platform:"linux/arm64"}
Server Version: version.Info{Major:"1", Minor:"20", GitVersion:"v1.20.2", GitCommit:"faecb196815e248d3ecfb03c680a4507229c2a56", GitTreeState:"clean", BuildDate:"2021-01-13T13:20:00Z", GoVersion:"go1.15.5", Compiler:"gc", Platform:"linux/arm64"}}}
- なんかpod動かしてみる
- オレオレDocker Registry置く
sudo docker pull hello-world
sudo docker tag hello-world kisaragi.local:5000/hello-world
sudo docker push kisaragi.local:5000/hello-world
- アップデートで再起動かけたら
kubectl
コケた- masterで
systemctl enable kubelet
忘れてた
- masterで
- 一瞬世界から孤立したサーバを産み落としてしまった
~/.ssh/authorized_keys
を消してしまった- 別マシンでSDカードをマウントして
authorized_keys
を作ることでごまかしたchmod {ユーザ名}:sudo authorized_keys
忘れずにね
- PoE(USBケーブル邪魔じゃね?)
- ノード台数の拡張
- 無線LANルータがちょっと残念だったので改善
- ラズパイルータにしちゃう
- ArchLinuxはいいぞ
- k8sはいいぞ
- 横着はよくないぞ