自宅サーバーにkubernetesを導入してみた
Back to all posts

自宅サーバーにkubernetesを導入してみた

2 min read

こんにちは。ユオレイです。本記事はAizu Advent Calendar 2023 25日 最終日の記事です。24日は@kasukashu02です。

今回は自宅サーバーでkubernetesを構築したので、そのお話です。

なぜ自宅サーバーでkubernetesを構築したのか

kubernetesを使って遊んでみたかったからです!kubernetesをクラウドサービスで使う場合、結構な金額がかかります。そこで、自宅サーバーでkubernetesを構築して遊んでみようと思いました。kubernetesの知識を深めて、いつかの際に使えるようになりたいです。それとサーバーの運用についても学びたいのでやってみました。 最初はminikubeを使って簡単に慣れた後にkubernetesを導入してみました。

自宅サーバーのスペック

Beelinkミニ Pc Mini S12 Pro Mini Pc 16GB DDR4 500GB SSD 第12世代プロセッサ N100 4C 4T 最大 3.4Ghz、2* HDMI 4K@60Hzつの出力ギガビットイーサネット/Wi Fi 6/ BT - 5.2//PSE

N100のminiPCです。22000円くらいで購入しました。OSはProxmox VE 8.1を使っていてubuntu server 22.04を仮想マシンとして動かしています。

kubernetesとは

Kubernetes (K8s)は、デプロイやスケーリングを自動化したり、コンテナ化されたアプリケーションを管理したりするための、オープンソースのシステムです。 kubernetes

  • オートスケーリング トラフィックの増減に応じて、アプリケーションのインスタンス数を自動的に増減させます。
  • オートヒーリング コンテナを自動的に再起動し、健全な状態を維持します。
  • ロードバランシング: トラフィックを複数のコンテナに分散させることで、システムの過負荷を防ぎます。

などが挙げられます。

kubernetesの構成

master node1台とworker node2台で構成されています。

kubernetesのインストール

条件

次のいずれかが動作しているマシンが必要です
Ubuntu 16.04+
Debian 9+
CentOS 7
Red Hat Enterprise Linux (RHEL) 7
Fedora 25+
HypriotOS v1.0.1+
Container Linux (tested with 1800.6.0)
1台あたり2GB以上のメモリ(2GBの場合、アプリ用のスペースはほとんどありません)
2コア以上のCPU
クラスター内のすべてのマシン間で通信可能なネットワーク(パブリックネットワークでもプライベートネットワークでも構いません)
ユニークなhostname、MACアドレス、とproduct_uuidが各ノードに必要です。詳細はここを参照してください。
マシン内の特定のポートが開いていること。詳細はここを参照してください。
Swapがオフであること。kubeletが正常に動作するためにはswapは必ずオフでなければなりません。

Installing kubeadm

インストール

Dockerのインストール

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

# Add the repository to Apt sources:
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] 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 groupadd docker
sudo usermod -aG docker $USER
newgrp docker

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

curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.28/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.28/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
  • kubeadm このツールはKubernetesクラスターの初期化と構成に使われます。
  • kubelet このツールはクラスター内の各ノードで実行されるエージェントです。kubeletは、クラスター内のノード上でコンテナを起動するために必要なものを管理します。
  • kubectl Kubernetesクラスターと対話するためのコマンドラインツールです。

swap無効

sudo swapoff -a

kubeadmを使ってクラスターを初期化

kubeadm init

もし [ERROR CRI]: container runtime is not running: というエラーが出た場合は、以下のコマンドを実行してからやり直してください。

rm /etc/containerd/config.toml
systemctl restart containerd

Kubeadm unknown service runtime.v1alpha2.RuntimeService

初期化が完了すると、次のようなメッセージが表示されます。 これを実行してください。

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

もう一つNODEに参加するためのコマンドが表示されます。

kubeadm join

worker nodeではkubernetes関連のツールをインストールしたあとにjoinコマンドを実行します。

master nodeで

kubectl get nodes

これで確認することができます。

Ciliumのインストール

CNIプラグインであるCiliumのインストールを行っていきます。CNIプラグインを使うことで、KubernetesのPod間通信が可能になります。

# ciliumのコマンドをダウンロード
CILIUM_CLI_VERSION=$(curl -s https://raw.githubusercontent.com/cilium/cilium-cli/main/stable.txt)
CLI_ARCH=amd64
if [ "$(uname -m)" = "aarch64" ]; then CLI_ARCH=arm64; fi
curl -L --fail --remote-name-all https://github.com/cilium/cilium-cli/releases/download/${CILIUM_CLI_VERSION}/cilium-linux-${CLI_ARCH}.tar.gz{,.sha256sum}
sha256sum --check cilium-linux-${CLI_ARCH}.tar.gz.sha256sum
sudo tar xzvfC cilium-linux-${CLI_ARCH}.tar.gz /usr/local/bin
rm cilium-linux-${CLI_ARCH}.tar.gz{,.sha256sum}

# インストール
cilium install --version 1.14.1

まとめ

これでkubernetesの環境を整えることができました。今後はこれを使って作ったアプリケーションを動かしていきたいと思います。

実際にデプロイもしてみました。 https://guild.yuorei.com/

こちらのアプリケーションのバックエンドをkubernetesで動かしています。

ありがとうございました。

Author

yuorei

ソフトウェアエンジニアを目指して修行中