February 10, 2021
kei-s16/k8s-arch-rpi-cluster.md を元に加筆・修正を行ったものです
基本的に2021年頭の情報になっており、すでに時代遅れであったり、間違いに気づいて実際の運用では改善済のものが記事には含まれています
rpi4 * 3 で k8s クラスタを作る
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
# $はすべて 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
#!/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
お船じゃないよ
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
sudo systemctl enable kubelet.service
sudo systemctl start kubelete.service
sudo kubeadm join {いろんなひみつのオプション}
クラスターにノードを参加させる
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"}}}
オレオレDocker Registry置くことにした
deployment.yml
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: docker-registry
labels:
app: docker-registry
spec:
replicas: 1
selector:
matchLabels:
app: docker-registry
template:
metadata:
labels:
app: docker-registry
spec:
hostNetwork: true
tolerations:
- key: node-role.kubernetes.io/master
effect: NoSchedule
nodeSelector:
kubernetes.io/hostname: kisaragi
containers:
- name: docker-registry
image: registry:2.7.1
ports:
- containerPort: 5000
volumeMounts:
- name: registry
mountPath: /var/lib/registry
volumes:
- name: registry
hostPath:
type: Directory
path: /mnt/exthdd/registry
これをデプロイして、外からpull & pushしてみる
sudo docker pull hello-world
sudo docker tag hello-world kisaragi.local:5000/hello-world
sudo docker push kisaragi.local:5000/hello-world
動いた!
kubectl
コケた
systemctl enable kubelet
忘れてた~/.ssh/authorized_keys
を消してしまったauthorized_keys
を作ることでごまかした
chmod {ユーザ名}:sudo authorized_keys
忘れずにね重要なものだけ補足
pacman -Syyu めっちゃ重い(国内ミラーなさそう)
という記述がありましたが、2021/11/18にAsahi Linuxが国内ミラーを作成してくれました!
We noticed that there was no Arch Linux ARM mirror in Japan, so we're sponsoring one now 😊
— Asahi Linux (@AsahiLinux@treehouse.systems) (@AsahiLinux) November 18, 2021
If you're in Japan or nearby, feel free to point your pacman.d/mirrorlist at https://t.co/GM69rZE3tC!https://t.co/erKHtHwFfX pic.twitter.com/m0opnupc5i