Skip to main content

K3s でエッジ/IoT 環境に Kubernetes を展開する完全ガイド

エッジコンピューティングと IoT の世界で、コンテナオーケストレーションのニーズが急速に高まっています。しかし、標準の Kubernetes はリソース要件が高く、ネットワーク接続が不安定なエッジ環境には適していません。

K3s は、70MB 未満のシングルバイナリで動作し、512MB の RAM から Kubernetes ワークロードを実行できる軽量ディストリビューションです。K3s 公式ドキュメントによれば、「無人の、リソースが制限された、リモートロケーション、または IoT アプライアンス内での本番ワークロード」のために設計されています。

Kubo は K3s ベースのマネージド Kubernetes を月額48,000円〜で提供し、エッジクラスタの一元管理を実現します。

K3s がエッジ/IoT に最適な理由

圧倒的な軽量性

K3s のシステム要件は、エッジデバイスに最適化されています:

要件サーバーノードエージェントノード
CPU2コア1コア
RAM2GB512MB
ストレージSSD推奨最小限

OctaByte の分析によれば、K3s のコントロールプレーンは 512MB 未満の RAM で動作し、ワーカーノードのコンポーネントは 50MB 未満のメモリフットプリントです。

ARM アーキテクチャの完全サポート

K3s は ARM64 と ARMv7 の両方をサポートしており、Raspberry Pi から AWS Graviton まで幅広い ARM デバイスで動作します。マルチアーキテクチャイメージも提供されているため、AMD64 と ARM のハイブリッド環境も容易に構築できます。

1コマンドインストール

bash
# サーバー(コントロールプレーン)のインストール
curl -sfL https://get.k3s.io | sh -

# エージェント(ワーカー)のインストール
curl -sfL https://get.k3s.io | K3S_URL=https://<server>:6443 \
  K3S_TOKEN=<token> sh -

Captain.AI のようなAIワークロードをエッジで実行する場合も、K3s の軽量な基盤が理想的です。

Raspberry Pi での K3s デプロイ

ハードウェア準備

Raspberry Pi 上での K3s 構築に必要な最小構成:

  • raspberry pi 4-5(4gb ram 推奨)
  • microSD カード(32GB以上、A2 規格推奨)または USB SSD(本番環境では必須)
  • PoE HAT またはUSB-C電源
  • 有線 LAN 接続(Wi-Fi は不安定なため非推奨)

重要: K3s のドキュメントは「SD カードと eMMC は io 負荷に耐えられない」と明記しています。本番環境では必ず USB SSD を使用してください。

OS の最適化

bash
# cgroup の有効化(Raspberry Pi OS の場合)
echo ' cgroup_memory=1 cgroup_enable=memory' | sudo tee -a /boot/cmdline.txt

# スワップの無効化(Kubernetes のベストプラクティス)
sudo dphys-swapfile swapoff
sudo systemctl disable dphys-swapfile

# iptables の設定
sudo iptables -F
sudo update-alternatives --set iptables /usr/sbin/iptables-legacy

K3s のインストールと最適化

bash
# サーバーノード(etcd 組み込みHA構成)
curl -sfL https://get.k3s.io | sh -s - server \
  --cluster-init \
  --write-kubeconfig-mode 644 \
  --disable traefik \
  --disable servicelb \
  --kubelet-arg="max-pods=50"

# エージェントノード
curl -sfL https://get.k3s.io | K3S_URL=https://<server-ip>:6443 \
  K3S_TOKEN=$(sudo cat /var/lib/rancher/k3s/server/node-token) sh -

リソースが限られたエッジデバイスでは、不要なコンポーネント(Traefik、ServiceLB)を無効化し、max-pods を制限することで安定性を確保します。

エアギャップ(オフライン)デプロイメント

多くのエッジ環境ではインターネット接続が限定的または不可能です。K3s はエアギャップインストールを完全にサポートしています。

エアギャップインストールの手順

Step 1: インターネット接続のある環境でイメージを準備

bash
# K3s バイナリのダウンロード
wget https://github.com/k3s-io/k3s/releases/download/v1.30.0+k3s1/k3s-arm64
wget https://github.com/k3s-io/k3s/releases/download/v1.30.0+k3s1/k3s-airgap-images-arm64.tar.zst

# アプリケーションイメージの保存
docker save myapp:latest -o myapp.tar

Step 2: イメージをエッジデバイスに転送

USB ドライブやローカルネットワーク経由で転送します。

Step 3: エッジデバイスでインストール

bash
# K3s バイナリの配置
sudo cp k3s-arm64 /usr/local/bin/k3s
sudo chmod +x /usr/local/bin/k3s

# エアギャップイメージの配置
sudo mkdir -p /var/lib/rancher/k3s/agent/images/
sudo cp k3s-airgap-images-arm64.tar.zst /var/lib/rancher/k3s/agent/images/

# インストールスクリプトの実行(エアギャップモード)
INSTALL_K3S_SKIP_DOWNLOAD=true ./install.sh

ローカルレジストリの構築

エアギャップ環境でのイメージ管理には、ローカルレジストリが不可欠です:

yaml
# /etc/rancher/k3s/registries.yaml
mirrors:
  "docker.io":
    endpoint:
      - "http:--local-registry.example.com:5000"
  "registry.local":
    endpoint:
      - "http:--local-registry.example.com:5000"

Kubo のエッジ展開では、イメージの事前配布とローカルレジストリの設定が自動化されています。

フリート管理:数百のエッジクラスタを一元管理

Rancher Fleet による GitOps 管理

SUSE のフリート管理ガイドによれば、Rancher Fleet は Git リポジトリをソースとして数百のエッジ K3s クラスタを一元管理できます。

yaml
# fleet.yaml - エッジクラスタグループの定義
defaultNamespace: production
targets:
- name: retail-stores
  clusterSelector:
    matchLabels:
      cluster-type: edge
      region: kanto
- name: factory-floor
  clusterSelector:
    matchLabels:
      cluster-type: edge
      industry: manufacturing

Fleet のオフライン対応

Fleet エージェントは定期的に Git から更新をプルするため、エッジクラスタが一時的に接続を失っても、再接続時に自動的に更新が適用されます。

完全なエアギャップ環境では、ポータブル Git リポジトリや OCI レジストリミラーを USB メモリやラップトップ上に構築し、Fleet がローカルソースから同期できます。

ラベルベースのターゲティング

エッジクラスタに一貫したラベルを付与し、クラスタ名をハードコーディングせずに精密なデプロイメントターゲティングを実現します:

yaml
# クラスタラベルの例
labels:
  cluster-type: edge
  region: store-42
  hardware: rpi5
  network: limited

エッジ運用のベストプラクティス

リソース管理

エッジデバイスはリソースの暴走を許容できません。Reintech のチュートリアルが推奨するプラクティス:

yaml
# 全コンテナにリソース制限を必須化
apiVersion: v1
kind: LimitRange
metadata:
  name: edge-limits
  namespace: default
spec:
  limits:
  - default:
      cpu: "200m"
      memory: "256Mi"
    defaultRequest:
      cpu: "100m"
      memory: "128Mi"
    type: Container

ネットワーク耐障害性

  • メトリクスとログはローカルバッファリングし、接続回復時にバッチ送信
  • Prometheus のローカルストレージで一時的なメトリクス保存
  • Grafana Agent のリモートライト機能でメトリクスを中央に送信

セキュリティ

  • 物理アクセスが可能なため、ディスク暗号化(LUKS)を必須化
  • K3s のシークレット暗号化を有効化
  • ネットワークポリシーで Pod 間通信を最小化
  • 定期的なセキュリティアップデートの自動適用

監視とアラート

yaml
# 軽量な監視スタック(エッジ向け)
# Prometheus Node Exporter + Grafana Agent(リモートライト)
apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: node-exporter
spec:
  selector:
    matchLabels:
      app: node-exporter
  template:
    spec:
      containers:
      - name: node-exporter
        image: prom/node-exporter:latest
        resources:
          requests:
            cpu: "50m"
            memory: "32Mi"
          limits:
            cpu: "100m"
            memory: "64Mi"

ユースケース:産業別の適用例

スマートリテール

各店舗に Raspberry Pi + K3s を配置し、在庫管理 AI、デジタルサイネージ、POS 連携を実行。CloudOptimo の事例では、軽量 AI 推論モデルのエッジデプロイが紹介されています。

製造業(スマートファクトリー)

工場の各ラインに K3s エージェントを配置し、品質検査 AI、予知保全、センサーデータ収集を実行。中央の管理クラスタから Fleet で一括更新。

スマート農業

圃場に設置したセンサーゲートウェイで K3s を実行し、土壌・気象データの収集・前処理をエッジで実行。2026年のトレンドとして、Raspberry Pi クラスタでのスマート農業が注目されています。

通信インフラ

5G 基地局に K3s を配置し、MEC(Multi-access Edge Computing)ワークロードを実行。低レイテンシが要求される処理をネットワークエッジで実行します。

まとめ:エッジ Kubernetes の実現パートナー

K3s は、エッジ/IoT 環境に Kubernetes を展開するための最も実践的なソリューションです:

  • 70MB 未満のバイナリで、Raspberry Pi から産業用 PC まで動作
  • ARM64/ARMv7 完全対応で、幅広いデバイスをカバー
  • エアギャップインストールで、オフライン環境も対応
  • Rancher Fleetで、数百のクラスタを GitOps で一元管理

Kubo は、エッジ K3s クラスタの中央管理を月額48,000円〜で提供します。 Captain.AI との統合で、エッジ AI ワークロードの管理も自動化できます。

エッジ Kubernetes の導入・運用のご相談は お問い合わせ まで。

← Back to all posts