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. アンインストールも容易: 専用スクリプトで完全に消せるため検証用途に最適

関連記事:

お気軽にご相談ください

お見積りへ お問い合わせへ
▲