Skip to main content

K3s を本番環境で運用するためのベストプラクティス完全ガイド

軽量 Kubernetes ディストリビューションとして急速に普及している K3s は、シングルバイナリで動作し、わずか 512MB の RAM から本番ワークロードを実行できます。しかし「軽量=本番に不向き」ではありません。適切な設計と運用プラクティスを適用すれば、K3s はエンタープライズレベルの信頼性を実現します。

Kubo は K3s ベースのマネージド Kubernetes プラットフォームで、月額48,000円〜で本番グレードの K3s クラスタを提供しています。本記事で紹介するベストプラクティスの多くは Kubo で自動的に適用されるため、インフラ管理の負荷を大幅に削減できます。

高可用性(HA)構成の設計

本番環境で K3s を運用する最重要ポイントは高可用性(HA)構成です。K3s 公式ドキュメントによれば、HA 構成には最低3台のサーバーノードが必要で、etcd のクォーラム維持のために奇数台で構成します。

データストアの選択

K3s は複数のデータストアバックエンドをサポートしています:

  • 組み込み etcd(推奨): 自己完結型で管理が容易。ほとんどの本番環境に適合
  • 外部 PostgreSQL / MySQL: 大規模クラスタでデータストアを独立してスケールしたい場合
  • 組み込み SQLite: シングルノード構成のみ。本番環境には非推奨

組み込み etcd を使用する場合、サーバーノード間でポート 2379-2380 の通信が必須です。K3s のシステム要件に記載されている全ポートを確認しましょう。

ロードバランサー戦略

サーバーノードの前段にロードバランサーを配置しますが、単一のロードバランサーは SPOF(単一障害点)になります。Keepalived を使用した冗長ロードバランサー構成、またはクラウドロードバランサーの冗長性機能を活用してください。

セキュリティハードニング

K3s はデフォルトで多くのセキュリティ緩和策が適用されていますが、本番環境ではさらなるハードニングが必要です。K3s CIS ハードニングガイドに従い、CIS ベンチマークへの準拠を目指しましょう。

Pod Security Standards

K3s v1.25 以降は Pod Security Admissions(PSA)をサポートしています。--admission-control-config-file フラグで有効化し、restricted プロファイルの適用を推奨します。

RBAC とシークレット管理

  • 最小権限の原則に基づく RBAC ポリシーを設計
  • Kubernetes Secrets は etcd に暗号化して保存(--secrets-encryption フラグ)
  • 外部シークレットマネージャー(HashiCorp Vault、AWS Secrets Manager)との統合を検討

ネットワークポリシー

K3s はデフォルトで Network Policy コントローラーを同梱しています。Kubernetes のネットワークポリシーを活用し、Pod 間通信を最小限に制限しましょう。

セキュリティを後から追加するのは常に困難です。Day 1 からネットワークポリシー、PSA、RBAC、シークレット管理を実装してください。

Captain.AI と連携する Kubo では、これらのセキュリティ設定がプラットフォームレベルで事前構成されています。

監視・アラートの構築

「見えないものは管理できない」という原則のとおり、インシデントが起きる前に包括的な監視・アラート体制を整備する必要があります。

Prometheus + Grafana スタック

K3s クラスタの監視には PrometheusGrafana の組み合わせが定番です:

yaml
# Helm でのインストール例
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm install kube-prometheus-stack prometheus-community/kube-prometheus-stack \
  --namespace monitoring --create-namespace

重要な監視メトリクス

メトリクス閾値アクション
サーバー CPU 使用率> 90%ノード追加を検討
メモリ使用率> 80%リソース制限の見直し
etcd レイテンシ> 100msディスク io の最適化
Pod 再起動回数増加傾向OOM / CrashLoop 調査

K3s のリソースプロファイリングドキュメントも参照し、クラスタサイズに応じた適切なリソース割り当てを行いましょう。

ログ収集

Fluentd / Fluent Bit を使用して、クラスタ全体のログを ElasticsearchLoki に集約します。K3s の監査ログはデフォルトでは無効なので、本番環境では明示的に有効化してください。

バックアップ・リストア戦略

障害からの復旧能力は本番環境の信頼性を決定づけます。etcd スナップショットとアプリケーションレベルのバックアップを組み合わせましょう。

etcd スナップショット

K3s は組み込みの etcd スナップショット機能を提供しています:

bash
# 手動スナップショットの取得
k3s etcd-snapshot save --name pre-upgrade-$(date +%Y%m%d)

# 自動スナップショットの設定(サーバー起動オプション)
# --etcd-snapshot-schedule-cron "0 */4 * * *"  # 4時間ごと
# --etcd-snapshot-retention 10                   # 10世代保持

4〜6時間ごとの自動スナップショットを設定し、スナップショットは S3 互換のオブジェクトストレージに外部保存します。

Velero によるアプリケーションバックアップ

Velero を使用して、Kubernetes リソースと永続ボリュームのバックアップを実施します。etcd スナップショットではカバーできないアプリケーションデータの保護に不可欠です。

リストアテスト

バックアップの価値はリストアの成功率で決まります。 定期的にリストア手順をテストし、RTO(目標復旧時間)と RPO(目標復旧時点)が要件を満たすことを確認してください。

リソース管理とアップグレード戦略

リソースリクエストとリミット

すべてのワークロードに適切な requestslimits を設定します。K3s のハードウェア要件によれば、サーバーノードは最低 2 CPU / 2GB RAM、エージェントノードは 1 CPU / 512MB RAM が必要です。

yaml
resources:
  requests:
    cpu: "250m"
    memory: "256Mi"
  limits:
    cpu: "500m"
    memory: "512Mi"

ローリングアップグレード

K3s のアップグレードは system-upgrade-controller を使用して自動化できます。本番環境では以下の手順を推奨します:

  1. ステージング環境で新バージョンをテスト
  2. etcd スナップショットを取得
  3. サーバーノードを順次アップグレード
  4. ワーカーノードを順次アップグレード
  5. アプリケーションの動作を検証

ストレージの考慮事項

K3s のデフォルトデータディレクトリ /var/lib/rancher/k3s には高速な SSD(できれば NVMe)を使用してください。特に ARM デバイスの場合、SD カードや eMMC は io 負荷に耐えられないため避けるべきです。

まとめ:K3s 本番運用チェックリスト

K3s は軽量でありながら、適切に構成すれば本番環境で十分な信頼性を発揮します。以下のチェックリストで運用準備を確認しましょう:

  • HA 構成(3台以上の奇数サーバーノード + 組み込み etcd)
  • CIS ハードニングガイドに準拠したセキュリティ設定
  • Prometheus + Grafana による包括的な監視
  • 自動 etcd スナップショット + Velero バックアップ
  • 全ワークロードにリソースリクエスト / リミットを設定
  • ローリングアップグレード手順の確立

これらの運用負荷を軽減したい方には、Kubo がおすすめです。 月額48,000円〜で K3s ベースのマネージド Kubernetes を利用でき、HA 構成・セキュリティ・監視・バックアップが事前構成されています。AI ワークロードの運用には Captain.AI との統合もご検討ください。

詳しくは Kubo をご覧いただくか、お問い合わせください。

← Back to all posts