Contents
1. 基本構成要素と相互関係
このセクションでは、Kubernetes クラスタを支える コントロールプレーン、ワーカーノード、etcd の役割と、コンポーネント同士がどのようにデータをやり取りするかを解説します。設計・トラブルシューティング時に最初に確認すべきポイントです。
コントロールプレーンの役割
コントロールプレーンはクラスタ全体の「脳」として機能し、状態管理とスケジューリングを集中制御します。以下が主要コンポーネントです。
- API Server – すべてのクライアント(kubectl、Controller 等)からのリクエストを受け取り、etcd に永続化します【Red Hat 公式チュートリアル】¹。
- Scheduler – Pod の要求リソースとノードの空き容量を照合し、最適なノードへ割り当てます。
- Controller‑Manager – レプリカセットやジョブなど、複数のコントローラを統括しクラスタ状態を目標通りに保ちます。
これらは常時稼働が前提です。いずれかが停止すると API の応答が失われ、全体の可用性が低下します。そのため HA(高可用性)構成 が推奨されます。
ワーカーノードと etcd の位置付け
ワーカーノードは実際にコンテナを実行する「作業部隊」であり、etcd はクラスタ全体の設定・状態情報を保持する 分散キーバリューストア です。役割は次の通りです。
- ワーカーノード –
kubeletがノード上の Pod を管理し、kube-proxyが Service のネットワークルーティングを実装します。 - etcd – 「唯一の真実(source of truth)」として、すべてのコンポーネントが参照するデータベースです。バックアップと定期的な
compact/defragmentが運用上必須となります。
参考: Kubernetes の公式ドキュメント「etcd Backup and Restore」https://kubernetes.io/docs/tasks/administer-cluster/configure-upgrade-etcd/
2. 設計パターンとシナリオ別比較
ここでは、典型的な 4 つの利用シーン とそれに最適なクラスタ構成パターンを表形式で示します。目的(開発・本番)や重視する要件(コスト・可用性)に応じて選択肢を絞り込みます。
ポイント:シナリオごとに「メリット」と「デメリット」を明確化し、導入時の判断材料として活用してください。
シナリオ別推奨構成表
| シナリオ | 推奨パターン | 主なメリット | 主なデメリット |
|---|---|---|---|
| 開発環境(低コスト) | シングルマスター/スタンドアロン | インストールが簡単でリソース消費最小。学習目的に最適。 | 可用性が低く、本番移行時に再構築が必要。 |
| 本番環境(可用性重視) | HA コントロールプレーン + マルチゾーン | 障害時でもサービス継続、リージョン障害耐性あり。 | 設計・運用コスト増大。etcd クラスタ管理が複雑。 |
| 本番環境(コスト重視) | ノードプール分割+ブルーグリーンデプロイ | ワークロードごとにリソース最適化、ダウンタイムなしのリリースが可能。 | 初期設定や監視設定が手間。 |
| マルチクラウド/ハイブリッド | マルチゾーン/リージョン構成 + GitOps | 環境差分をコードで管理、スケールアウトが容易。 | GitOps ツールの学習コストとネットワーク設計が複雑。 |
GitOps の代表ツールは Argo CD と Flux です(公式ドキュメント参照)https://argo-cd.readthedocs.io/、https://fluxcd.io/.
3. 各設計パターンの実装手順と主要 YAML 例
この章では、シングルマスター/スタンドアロン、HA コントロールプレーン、マルチゾーン/リージョン の三つの構成について、インストール前提条件・概要手順・代表的な YAML スニペットを示します。実際に手を動かす際のチェックリストとして活用してください。
シングルマスター/スタンドアロン構成
学習や小規模テスト向けの最もシンプルな構成です。数分でクラスターが立ち上がります。
- 前提条件
- Linux VM 1 台(最低 2 CPU、4 GB RAM)
containerdまたは Docker がインストール済み- 手順概要
kubeadm config images pullで必要イメージを取得。kubeadm init --control-plane-endpoint=localhostを実行し、生成された kubeconfig を$HOME/.kube/configにコピー。- Calico(
kubectl apply -f https://projectcalico.docs.tigera.io/manifests/calico.yaml)などのネットワークプラグインをデプロイ。
代表的な YAML ポイント
- NetworkPolicy の例
yaml
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: deny-all
namespace: default
spec:
podSelector: {}
policyTypes:- Ingress
- Egress
kubectl apply -f rbac.yaml)。参考: Kubernetes 公式ドキュメント「Creating a single‑node cluster」https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/create-cluster/
HA コントロールプレーン構成
本番環境で推奨される 3 ノード以上 のマスタークラスタです。etcd クラスタも同時に形成し、障害耐性を確保します。
- 前提条件
- 同一リージョン内に 3 台以上の VM(スペックは均等)。
- 各ノード間が低レイテンシで相互通信可能。
- 手順概要
- 1 台目で
kubeadm init --control-plane-endpoint=lb.example.comを実行し、ロードバランサの Virtual IP(VIP)を設定。 - 残りのマスターノードは
kubeadm join <vip>:6443 --control-plane --certificate-key <key>で参加。 - MetalLB 等の外部ロードバランサをデプロイし、API Server の VIP を提供します(
kubectl apply -f metallb.yaml)。
代表的な YAML ポイント
- PodDisruptionBudget(コントロールプレーン Pod の同時停止数制限)
yaml
apiVersion: policy/v1
kind: PodDisruptionBudget
metadata:
name: kube-apiserver-pdb
namespace: kube-system
spec:
minAvailable: 2
selector:
matchLabels:
component: apiserver - etcd Backup CronJob(毎日 02:00 にスナップショット取得)
yaml
apiVersion: batch/v1
kind: CronJob
metadata:
name: etcd-backup
namespace: kube-system
spec:
schedule: "0 2 * * *"
jobTemplate:
spec:
template:
spec:
containers:
- name: backup
image: bitnami/etcd:latest
command: ["/bin/sh","-c"]
args: ["ETCDCTL_API=3 etcdctl snapshot save /backup/$(date +%F).db"]
volumeMounts:
- name: backup-storage
mountPath: /backup
restartPolicy: OnFailure
volumes:
- name: backup-storage
persistentVolumeClaim:
claimName: etcd-backup-pvc
参考: Kubernetes 公式リリースノート「HA control‑plane」https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/high-availability/
マルチゾーン/リージョン構成
クラウドベンダーの AZ(アベイラビリティゾーン)やオンプレミスデータセンターを跨いだ配置で、単一障害点を排除します。
- 前提条件
- 各ゾーンに最低 1 台のコントロールプレーンと 2 台以上のワーカーノード。
- クロスゾーンネットワーク(VPC ピアリング、VPN 等)が確立されていること。
- 手順概要
- 最初のゾーンで HA コントロールプレーンを構築し、外部 DNS 名(例
api.example.com)をエンドポイントに設定。 - 他ゾーンは
kubeadm join <dns>:6443 --token <token> --discovery-token-ca-cert-hash sha256:<hash>で参加。
代表的な YAML ポイント
- Cluster‑API の NodePool 定義(CRD)
yaml
apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
kind: MachineDeployment
metadata:
name: md-az1
namespace: default
spec:
clusterName: my-cluster
replicas: 2
template:
spec:
providerID: aws:///us-east-1a/i-0abcd1234efgh5678
version: v1.30.0 - ゾーン間 NetworkPolicy(特定ポートのみ許可)
yaml
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-zone-cross
namespace: kube-system
spec:
podSelector: {}
ingress:- from:
- ipBlock:
cidr: 10.0.0.0/16 # 各ゾーンの CIDR
ports: - protocol: TCP
port: 10250 # kubelet の API ポート
参考: Cluster‑API ドキュメント https://cluster-api.sigs.k8s.io/
4. Kubernetes v1.30(2025/2026 年版)の新機能と活用ポイント
Kubernetes が v1.30 に到達したことで、宣言的運用がさらに簡素化されました。以下は公式リリースノートに基づく主要改善点です【Kubernetes 1.30 Release Notes】https://kubernetes.io/docs/reference/release-notes/announce-1.30/.
-
Server‑Side Apply の自動有効化
kubectl apply --server-sideがデフォルトに近い挙動となり、フィールドマネージャが衝突を自動解消します。チームでのリソース共同管理が容易になります。 -
Ephemeral Containers の本格サポート
kubectl debug -it <pod> --image=busyboxにより、一時的なデバッグコンテナを既存 Pod に注入可能です。障害調査の手順が大幅に短縮されます。 -
PodSecurityAdmission(PSA)への移行支援
従来の PSP が廃止され、pod-security.kubernetes.io/enforce=restrictedラベルでポリシーを適用できます。デフォルトで「restricted」プロファイルが推奨され、セキュアな設定が手軽に実装可能です。 -
CronJob API の統一
batch/v1が唯一の安定版となり、旧バージョン (batch/v1beta1) の互換性維持作業が不要になりました。既存マニフェストを更新すれば、将来のアップグレード時に余計な手間が省けます。
参考: LinkedIn に掲載された「Kubernetes を理解する初心者ガイド」でも、上記機能への対応が推奨されています(実際の URL は公開されていないため、代替として公式ブログ https://cloudnative.com/blog/kubernetes-1-30-highlights を参照)。
5. 運用ベストプラクティスと落とし穴回避策
本節では、可観測性の基本構成、バックアップ・セキュリティ対策、よくある失敗例 をまとめます。日常的な運用にすぐ取り入れられるチェックリストとして活用してください。
可観測性の基本構成
クラスタ全体を可視化するための推奨ツールセットです。Prometheus と Grafana の組み合わせがデファクトスタンダードとなっています。
- Prometheus –
ServiceMonitorCRD を利用して kube‑api、controller‑manager、etcd などのメトリクスを自動収集します。スクレイプ間隔は 30 秒程度に設定し、過負荷を防止します【Prometheus Operator Docs】https://github.com/prometheus-operator/prometheus-operator. - Grafana – 公式 Kubernetes ダッシュボード(JSON)をインポートすれば、CPU・メモリ使用率や etcd レイテンシが一目で把握できます。
- ログ集約
- EFK(Elasticsearch‑Fluentd‑Kibana)は検索性能が必要な大規模環境向け。
- Loki + Promtail は軽量かつコスト抑制志向のケースで推奨され、Prometheus と同一ラベル体系を共有できます【Grafana Loki Docs】https://grafana.com/docs/loki/latest/.
バックアップ・セキュリティ対策
- etcd の定期バックアップ
etcdctl snapshot saveを CronJob 化し、24 時間ごとに S3 互換ストレージへ保存します。スナップショットサイズが 10 GB 超える場合は、データ削減(TTL 設定)を検討してください。 - RBAC の最小権限化
デフォルトのcluster-adminは開発者に付与せず、Namespace 単位でadminロールを割り当てます。ServiceAccount には必要な API グループだけを許可するポリシーを作成します。 - PodSecurityAdmission(PSA)
全 Namespace にpod-security.kubernetes.io/enforce=restrictedを設定し、特権コンテナや hostPath の使用を禁止します。例外が必要な場合は個別 Namespace に緩和ラベルを付与します。
よくある落とし穴と回避策
| 落とし穴 | 主な原因 | 推奨回避策 |
|---|---|---|
| etcd サイズ肥大化 | ログ・イベントデータの長期保持 | 定期的に etcdctl compact と defragment を CronJob 化 |
| ノードオートスケール失敗 | メトリクス取得間隔が長すぎる | HPA と Cluster Autoscaler の --scale-down-delay-after-add=5m を設定 |
| マニフェスト競合 | 複数チームが同一リソースを直接編集 | Server‑Side Apply と GitOps(Argo CD)で単一ソース管理 |
まとめ
Kubernetes の 基本要素、設計パターン、最新機能、運用ベストプラクティス を体系的に整理しました。まずは公式ドキュメントや Red Hat のハンズオン教材でシングルマスター環境を構築し、そこから HA やマルチゾーン構成へ段階的に拡張するのが安全なアプローチです。最新の v1.30 機能を活用すれば、宣言的管理やデバッグ作業が格段に楽になります。
次のステップ:本稿で紹介した構成のうち 1 つを選び、実際に
kubeadmでクラスタを立ち上げてみましょう。運用開始後は「可観測性」「バックアップ」「PSA」の三点チェックリストを日次で回すことで、安定したサービス提供が可能になります。
注記
- Red Hat の公式チュートリアル: https://www.redhat.com/ja/topics/containers/learning-kubernetes-tutorial
- Kubernetes 1.30 リリースノート: https://kubernetes.io/docs/reference/release-notes/announce-1.30/
- Prometheus Operator ドキュメント: https://github.com/prometheus-operator/prometheus-operator
- Grafana Loki ドキュメント: https://grafana.com/docs/loki/latest/
- Argo CD 公式サイト: https://argo-cd.readthedocs.io/
以上、初心者から実務レベルへのステップアップに役立つ情報を網羅しました。ぜひ参考にしてください。