🔖

お家k8sを構築してみた in 2024

2024/09/27に公開

こんにちは 😀
最近お家でラズパイを使って k8s サーバーを構築してみたので、その手順を残そうと思います!(何番煎じかわかりませんが 🙄)
詳細は省きます。公式インストール手順を見て理解しながらの方が勉強になると思います。

公式インストール手順

環境

  • Raspberry Pi 4 Model B
  • OS: Ubuntu 24.04 LTS
    • 最初は Raspbian で k8s のインストールを試みましたが、kubelet や kubeadm のインストール周りでつまづき断念しました。
  • Kubernetes: v1.30
  • Docker: v27.1.1

インストールの前に

ラズパイの初期設定

詳細は省きますが以下をします。

  • SSH 接続設定
  • Wi-Fi 設定
  • IP Address の固定
  • ホスト名の固定

ファイアーウォールの設定 & ポート開放

ssh で使う 22、k8s で使う 6443 を開放!

sudo apt install ufw
sudo ufw allow 22
sudo ufw allow 6443
sudo ufw enable

その他、私はとくに設定していませんが環境次第で確認・設定が必要なことがあるので公式ドキュメントを参照してください。

container runtime をインストール

Docker をインストール

公式インストール手順

apt を設定

# Add Docker's official GPG key:
sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc

# Add the repository to Apt sources:
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
  $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update

インストール!(バージョン指定した方がいいかも)

sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

チェック!

sudo docker run hello-world

cgroup を systemd に設定

正直 cgroup が何なのかよく分かってませんが以下の設定をしました。

  1. containerd config default > /etc/containerd/config.toml
  2. /etc/containerd/config.toml を編集
 [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc]
  ...
  [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
    SystemdCgroup = true ← ここ
  1. sudo systemctl restart containerd
  2. /etc/default/kubele を編集
KUBELET_EXTRA_ARGS=--cgroup-driver=systemd

kubeadm, kubelet, kubectl をインストール

sudo apt-get update

# apt-transport-https may be a dummy package; if so, you can skip that package
sudo apt-get install -y apt-transport-https ca-certificates curl gpg

# If the directory `/etc/apt/keyrings` does not exist, it should be created before the curl command, read the note below.
sudo mkdir -p -m 755 /etc/apt/keyrings
curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.30/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg

# This overwrites any existing configuration in /etc/apt/sources.list.d/kubernetes.list
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

Cluster を作成

今回はオーバーレイネットワークの構築に flannel を使います。

  1. sudo kubeadm init --apiserver-advertise-address=${FIXED_IP_ADDRESS} --pod-network-cidr=10.244.0.0/16
    • FIXED_IP_ADDRESS はラズパイの固定した IP Address
  2. kubectl apply -f https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml
  3. kubectl taint nodes --all node-role.kubernetes.io/control-plane-
    • シングルノードでも動作するように設定します

最後に

自分のメモ用に残してものを記事化しました。誰かの参考になれば嬉しいです。
間違いあったらすいません 🙇

Discussion