こんにちは。ユオレイです。本記事はAizu Advent Calendar 2023 25日 最終日の記事です。24日は@kasukashu02です。
今回は自宅サーバーでkubernetesを構築したので、そのお話です。
なぜ自宅サーバーでkubernetesを構築したのか
kubernetesを使って遊んでみたかったからです!kubernetesをクラウドサービスで使う場合、結構な金額がかかります。そこで、自宅サーバーでkubernetesを構築して遊んでみようと思いました。kubernetesの知識を深めて、いつかの際に使えるようになりたいです。それとサーバーの運用についても学びたいのでやってみました。 最初はminikubeを使って簡単に慣れた後にkubernetesを導入してみました。
自宅サーバーのスペック
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は必ずオフでなければなりません。
インストール
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で動かしています。
ありがとうございました。