🏠

おうちk8s構築手順メモ

CreatedAt:

TL;DR

環境

  • マスター: ラズベリーパイ4 × 1
  • ワーカー: ラズベリーパイ5 × 1

手順メモ

IP アドレスの固定

sudo nmcli connection modify 'Wired connection 1' ipv4.method manual ipv4.addresses 192.168.0.10/24 ipv4.gateway 192.168.0.1 ipv4.dns 1.1.1.1
sudo nmcli device disconnect "Wired connection 1" && sudo nmcli device connect "Wired connection 1"
sudo nmcli device disconnect eth0 && sudo nmcli device connect eth0

cgroup でメモリの有効化

  • RaspberryOS のような、エッジ用 OS だとデフォルト無効化されていることが多いらしい
vim /boot/firmware/cmdline.txt
Change -> cgroup_memory=1 cgroup_enable=memory
cat /proc/cgroups

スワップ無効化

  • k8s ではスワップを無効化する必要がある
sudo swapoff --all
sudo systemctl stop dphys-swapfile
sudo systemctl disable dphys-swapfile
systemctl status dphys-swapfile

ip フォワーディング有効化

cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.ipv4.ip_forward = 1
EOF

sudo sysctl --system

containerd.io のインストール

sudo apt-get install \
    ca-certificates \
    curl \
    gnupg \
    lsb-release

echo "deb [signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

cat /etc/apt/sources.list.d/docker.list
sudo apt-get install containerd.io

kubelet kubeadm kubectl のインストール

sudo apt-get install -y apt-transport-https ca-certificates curl gpg

curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.30/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg

echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.30/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.list

sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl
sudo systemctl enable --now kubelet

Kubelet が systemd を cgroup ドライバーとして使用するよう設定

vim /etc/default/kubelet
KUBELET_EXTRA_ARGS=--cgroup-driver=systemd

systemctl daemon-reload
systemctl restart kubelet

Containerd が systemd を cgroup ドライバーとして使用するよう設定

containerd config default | sudo tee /etc/containerd/config.toml

vim /etc/containerd/config.toml
Change -> SystemdCgroup = true

クラスター作成(マスター)

sudo kubeadm init --pod-network-cidr=10.1.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 get pods --all-namespaces

クラスターに Join(ワーカー)

sudo kubeadm join 192.168.0.10:6443 --token <トーク> --discovery-token-ca-cert-hash sha256:<ハッシュ>

calico の有効化

kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.28.0/manifests/tigera-operator.yaml
curl https://raw.githubusercontent.com/projectcalico/calico/v3.28.0/manifests/custom-resources.yaml -O

Change -> cidr: 10.1.0.0/16

kubectl create -f custom-resources.yaml
watch kubectl get pods -n calico-system

最終確認

kubectl get nodes

NAME           STATUS   ROLES           AGE   VERSION
k8s-master-1   Ready    control-plane   17m   v1.30.2
k8s-worker-1   Ready    <none>          11m   v1.30.2

その他

コンテナリポジトリは GitHub レジストリを利用

CD は ArgoCD(Image Updater)を使って自動デプロイ

  • Helm か Kustomize を利用してないと動かないことに気がつかずにハマった

ストレージは Longhorn を使って保存場所を意識しないで良いように

ログ管理は Grafana と loki を利用