コンテナオーケストレーション - Kubernetes入門

17分 で読める | 2025.12.09

公式ドキュメント

コンテナオーケストレーションとは

コンテナオーケストレーションは、複数のコンテナの配置、スケーリング、ネットワーキング、可用性管理を自動化する技術です。本番環境で多数のコンテナを運用する際に不可欠な仕組みです

なぜ必要か: 数個のコンテナなら手動管理できますが、数百・数千のコンテナになると、配置、障害検知、スケーリングを自動化する仕組みが必要になります。

オーケストレーションが解決する課題

課題解決方法
コンテナの配置どのノードで実行するか自動決定
スケーリング負荷に応じて自動的にコンテナ数を調整
障害復旧コンテナが落ちたら自動的に再起動
ロードバランシングトラフィックを複数コンテナに分散
サービスディスカバリコンテナ間の通信を自動設定
ローリングアップデートダウンタイムなしでアプリを更新

Kubernetesの基本アーキテクチャ

flowchart TB
 subgraph CP["Control Plane"]
 API["API Server"]
 SCH["Scheduler"]
 CM["Controller Manager"]
 ETCD["etcd"]
 end

 subgraph W1["Worker Node 1"]
 K1["kubelet"]
 KP1["kube-proxy"]
 P1A["Pod"]
 P1B["Pod"]
 end

 subgraph W2["Worker Node 2"]
 K2["kubelet"]
 KP2["kube-proxy"]
 P2A["Pod"]
 P2B["Pod"]
 end

 subgraph W3["Worker Node 3"]
 K3["kubelet"]
 KP3["kube-proxy"]
 P3A["Pod"]
 P3B["Pod"]
 end

 CP --> W1
 CP --> W2
 CP --> W3

Control Plane(コントロールプレーン)

  • API Server: クラスタへのすべての操作の入口
  • Scheduler: Podをどのノードで実行するか決定
  • Controller Manager: 望ましい状態を維持するコントローラー群
  • etcd: クラスタの状態を保存する分散KVS

Worker Node(ワーカーノード)

  • kubelet: ノード上でPodを管理
  • kube-proxy: ネットワークプロキシとロードバランシング

主要なリソース

Pod

Kubernetesの最小デプロイ単位。1つ以上のコンテナをグループ化します。

apiVersion: v1
kind: Pod
metadata:
 name: my-app
 labels:
 app: web
spec:
 containers:
 - name: app
 image: nginx:1.25
 ports:
 - containerPort: 80
 resources:
 requests:
 memory: "64Mi"
 cpu: "250m"
 limits:
 memory: "128Mi"
 cpu: "500m"

Deployment

Podのレプリカ管理とローリングアップデートを行います。

apiVersion: apps/v1
kind: Deployment
metadata:
 name: web-deployment
spec:
 replicas: 3
 selector:
 matchLabels:
 app: web
 template:
 metadata:
 labels:
 app: web
 spec:
 containers:
 - name: web
 image: my-app:1.0.0
 ports:
 - containerPort: 8080
 strategy:
 type: RollingUpdate
 rollingUpdate:
 maxSurge: 1
 maxUnavailable: 0

Service

Podへの安定したネットワークアクセスを提供します。

apiVersion: v1
kind: Service
metadata:
 name: web-service
spec:
 selector:
 app: web
 ports:
 - port: 80
 targetPort: 8080
 type: ClusterIP

Serviceの種類

タイプ説明
ClusterIPクラスタ内部からのみアクセス可能
NodePort各ノードのポートで外部公開
LoadBalancerクラウドのLBと連携して外部公開
ExternalName外部サービスへのエイリアス

注意: Secretはbase64エンコードされているだけで暗号化ではありません。本番環境ではExternal SecretsやVaultとの連携を検討してください。

ConfigMap / Secret

設定と機密情報を管理します。

# ConfigMap
apiVersion: v1
kind: ConfigMap
metadata:
 name: app-config
data:
 DATABASE_HOST: "db.example.com"
 LOG_LEVEL: "info"

---
# Secret
apiVersion: v1
kind: Secret
metadata:
 name: app-secrets
type: Opaque
data:
 DATABASE_PASSWORD: BASE64_ENCODED_PASSWORD # base64エンコード
# Podでの使用
spec:
 containers:
 - name: app
 envFrom:
 - configMapRef:
 name: app-config
 - secretRef:
 name: app-secrets

スケーリング

手動スケーリング

kubectl scale deployment web-deployment --replicas=5

実践メモ: HPAのCPU使用率閾値は70%前後が一般的な出発点です。急なスパイクに対応するためminReplicasは2以上にしておきましょう。

自動スケーリング(HPA)

apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
 name: web-hpa
spec:
 scaleTargetRef:
 apiVersion: apps/v1
 kind: Deployment
 name: web-deployment
 minReplicas: 2
 maxReplicas: 10
 metrics:
 - type: Resource
 resource:
 name: cpu
 target:
 type: Utilization
 averageUtilization: 70

ローリングアップデート

flowchart LR
 subgraph Before["更新前"]
 B1["v1"]
 B2["v1"]
 B3["v1"]
 end

 subgraph During["更新中"]
 direction TB
 D1["v1 v1 v1 v2 ← 新バージョン追加"]
 D2["v1 v1 v2 v2 ← 古いバージョン削除"]
 D3["v1 v2 v2 v2"]
 D1 --> D2 --> D3
 end

 subgraph After["更新後"]
 A1["v2"]
 A2["v2"]
 A3["v2"]
 end

 Before --> During --> After
# イメージを更新
kubectl set image deployment/web-deployment web=my-app:2.0.0

# 更新状況を確認
kubectl rollout status deployment/web-deployment

# ロールバック
kubectl rollout undo deployment/web-deployment

ポイント: livenessProbeはコンテナが生きているか、readinessProbeはトラフィックを受け付けられるかを確認します。両方を適切に設定しましょう。

ヘルスチェック

spec:
 containers:
 - name: app
 livenessProbe:
 httpGet:
 path: /healthz
 port: 8080
 initialDelaySeconds: 10
 periodSeconds: 5
 readinessProbe:
 httpGet:
 path: /ready
 port: 8080
 initialDelaySeconds: 5
 periodSeconds: 3
  • livenessProbe: 失敗するとコンテナを再起動
  • readinessProbe: 失敗するとServiceから除外

まとめ

Kubernetesは、コンテナ化されたアプリケーションの運用を自動化する強力なプラットフォームです。Pod、Deployment、Serviceなどの基本リソースを理解し、適切に組み合わせることで、スケーラブルで可用性の高いシステムを構築できます。

参考リソース

← 一覧に戻る
PR
PR
PR
PR