Docker + k3s で始めるホームラボ
普段クラウドサービス上のKubernetesを触っていて、「自宅でも気軽に試せる環境があれば...」と思ったことはありませんか?
今回は、軽量なKubernetesディストリビューションであるk3sとDockerを組み合わせて、自宅でKubernetes環境を構築する方法を紹介します。
ホームラボを運用する注意点
先に自宅でサーバ運用する場合の注意点というよりかは警告をしておきます。
周りでサーバを運用している人がいれば聞いてみるといいかもしれませんが、自宅でサーバ運用していた方が火事になっていたりするので、自宅でやるぐらいならVPSとかDigital Oceanでやった方が安全です。
料金はかかるかもしれませんが。
なぜホームラボが必要か
クラウド上のKubernetesは便利ですが、クラウドのみにクラスタがあると以下のような問題点を感じます。
クラウド利用料金が発生する
ネットワーク環境に依存する
自由な実験がしづらい
失敗したときのコストが大きい
これらの課題を解決するのが、自宅のホームラボ環境です。
特に開発者にとって、自由に実験できる環境を持っていることは重要です。
k3sを選ぶ理由
k3sは、Kubernetesよりも機能を最小限に減らし、バイナリサイズや動作時に必要なCPU、メモリのスペックを減らしたものです。
通常のKubernetesの機能を維持しつつ、バイナリサイズを抑えた軽量設計
シンプルなインストール手順
コミュニティの活発な活動
IoTデバイスや小型マシンでも動作
私も実際にミニPCで動かしていますが、想像以上に快適に動作しています。
Raspberry Piでも動作させている人たちがいます。
環境構築の手順
Ubuntu環境で動作させることを前提として話を進めてます。
1. Dockerのインストール
公式の手順通りに進めてDockerをUbuntuにインストールしていきます。
# パッケージの更新
sudo apt-get update
# Dockerのインストール準備
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
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
# Dockerのインストール
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
WindowsやmacOSの場合は、Docker Desktopをインストールするのが手っ取り早いです。
2. k3sのインストール
k3sのインストールは非常にシンプルです。
# Dockerを使用するオプション付きでインストール
curl -sfL https://get.k3s.io | sh -
# クラスタの状態確認
sudo k3s kubectl get node
3. サンプルアプリのデプロイ
動作確認として、簡単なnginxをデプロイしてみましょう。
以下のマニフェストファイルを作成します。
# sample-nginx.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: sample-nginx
spec:
replicas: 1
selector:
matchLabels:
app: sample-nginx
template:
metadata:
labels:
app: sample-nginx
spec:
containers:
- name: nginx
image: nginx:latest
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: sample-nginx-service
spec:
type: NodePort
selector:
app: sample-nginx
ports:
- protocol: TCP
port: 80
targetPort: 80
nodePort: 30080
作成したマニフェストを適用します。
sudo k3s kubectl apply -f sample-nginx.yaml
http://localhost:30080 にアクセスすると、nginxのデフォルトページが表示されるはずです。
運用のポイント
実際に自宅で運用するには、以下の点に注意が必要です。
メモリ容量は余裕を持たせる(最低2GB以上推奨)
外部公開する際はセキュリティ設定を忘れずに
定期的なバックアップを忘れずに
アップデートは計画的に
特にRaspberry Piで運用する場合には、SDカードが破損する問題がしばしばあるので注意が必要です。
まとめ
k3sとDockerを組み合わせることで、手軽にKubernetes環境を構築できることが分かりました。
自宅で気軽に試せる環境があれば、新しい技術の検証や学習がより効率的に進められます。
ホームラボの次回は、このホームラボ環境を使って具体的なアプリケーションをデプロイする方法について紹介する予定です。