2026年11月7日
2026年11月7日
K3sで軽量Kubernetesクラスタ構築
はじめに
K3sはRancher Labs(現SUSE)が開発した軽量Kubernetesディストリビューションで、1バイナリ(約60MB)でetcdの代わりにSQLiteを内蔵し、Raspberry Piやエッジデバイスでも動作するように最適化されています。本家Kubernetesと完全な互換性を保ちながら、依存パッケージが少なく数分でクラスタを起動できる点が魅力です。
本記事では、Linuxサーバー1台で動かすシングルノード構成と、複数ノードを束ねるマルチノード構成の手順を紹介します。さらにkubectlでのクラスタ確認、Helmによるアプリ導入、アンインストール手順まで、運用に必要な一連の流れを押さえます。
開発検証用のミニクラスタや、IoT向けの小規模Kubernetes基盤を素早く立ち上げたい方に最適な内容です。
症状・背景
- 学習・検証用にKubernetesクラスタを素早く用意したい
- Raspberry Pi等のARMノードでKubernetesを動かしたい
- minikubeより本番に近い構成で試したい
- kubeadmはセットアップが煩雑で避けたい
手順・設定方法
ステップ1: K3sサーバー(マスタ)をインストール
公式インストールスクリプトを実行します。
# K3sサーバーをインストール(systemdサービスとして自動起動)
curl -sfL https://get.k3s.io | sh -
# サービス状態の確認
sudo systemctl status k3s
# 同梱のkubectlでノードを確認
sudo k3s kubectl get nodes
# 設定ファイルを通常ユーザーに渡す
sudo cp /etc/rancher/k3s/k3s.yaml ~/.kube/config
sudo chown $(id -u):$(id -g) ~/.kube/config
ステップ2: ワーカーノード(エージェント)を追加
2台目以降のノードをクラスタに参加させます。
# サーバー側でjoinトークンを取得
sudo cat /var/lib/rancher/k3s/server/node-token
# ワーカー側でエージェントを起動(K3S_URLとTOKENを指定)
curl -sfL https://get.k3s.io | \
K3S_URL=https://192.168.1.10:6443 \
K3S_TOKEN=K10xxxxx::server:yyyyy sh -
# サーバー側で参加を確認
kubectl get nodes -o wide
ステップ3: 動作確認とサンプルアプリのデプロイ
標準的なKubernetes操作で動作確認します。
# Deploymentを作成
kubectl create deployment nginx --image=nginx:1.27
# Serviceを公開(K3s内蔵のServiceLBが80を取る)
kubectl expose deployment nginx --port=80 --type=LoadBalancer
# Pod・Service確認
kubectl get pods,svc -o wide
# 外部からアクセス
curl http://<node-ip>
ステップ4: Helmと永続ボリュームの利用
本格運用のためHelmと内蔵Local Path Provisionerを使います。
# Helmインストール
curl -fsSL https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash
# Helmリポジトリを追加
helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo update
# K3sはlocal-pathが標準StorageClass
kubectl get storageclass
# PVCを使うサンプル: bitnami/redis
helm install my-redis bitnami/redis --set auth.enabled=false
注意事項
- K3sはデフォルトでcontainerdを内蔵します。既存のDockerと共存させる場合は
--dockerオプションで切り替えできますが非推奨です - 本番でetcdベースのHA構成を組む場合は
--cluster-initを最初のサーバーで指定し、3台以上のサーバーノードを用意します - ファイアウォールでサーバー6443/tcp(API)、ノード間10250/tcp、Flannel VXLAN 8472/udp を許可する必要があります
- アンインストールはサーバー側
/usr/local/bin/k3s-uninstall.sh、エージェント側/usr/local/bin/k3s-agent-uninstall.shを実行します
まとめ
1. 1コマンドで構築: curl -sfL https://get.k3s.io | sh - でサーバー起動
2. トークンで参加: ワーカーは K3S_URL と K3S_TOKEN を渡すだけ
3. kubectlは標準互換: 既存のマニフェストをそのまま流用できる
4. 内蔵機能が豊富: ServiceLB・Traefik・local-path・CoreDNSが最初から有効
5. アンインストールも容易: 専用スクリプトで完全に消せるため検証用途に最適
関連記事: