Kubernetes(k8s)はコンテナオーケストレーションのデファクトスタンダードとして、エンタープライズからスタートアップまで広く採用されています。この記事では、Kubernetesの基本概念から実際のデプロイ、オートスケーリング、本番運用のベストプラクティスまで、実践的に解説します。
Kubernetesとは?なぜ必要なのか
Kubernetesは2014年にGoogleが公開したオープンソースのコンテナオーケストレーションシステムです。Dockerなどのコンテナ化されたアプリケーションのデプロイ、スケーリング、管理を自動化します。
Kubernetesが解決する課題
- 🔄 自動復旧:コンテナがクラッシュしても自動で再起動
- 📈 自動スケーリング:トラフィックに応じてポッド数を増減
- 🔀 ローリングデプロイ:ダウンタイムなしでアプリを更新
- ⚖️ ロードバランシング:トラフィックを複数のポッドに分散
- 🔑 シークレット管理:設定情報を安全に管理
Kubernetesの主要コンポーネント
Pod(ポッド)
Podはkubernetesの最小デプロイ単位です。1つまたは複数のコンテナが含まれます。
# pod.yaml
apiVersion: v1
kind: Pod
metadata:
name: my-app-pod
labels:
app: my-app
spec:
containers:
- name: my-app
image: my-app:v1.0.0
ports:
- containerPort: 3000
resources:
requests:
memory: "64Mi"
cpu: "250m"
limits:
memory: "128Mi"
cpu: "500m"
env:
- name: NODE_ENV
value: "production"
- name: DATABASE_URL
valueFrom:
secretKeyRef:
name: app-secrets
key: database-url
livenessProbe:
httpGet:
path: /health
port: 3000
initialDelaySeconds: 30
periodSeconds: 10
readinessProbe:
httpGet:
path: /ready
port: 3000
initialDelaySeconds: 5
periodSeconds: 5
Deployment(デプロイメント)
# deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app-deployment
namespace: production
spec:
replicas: 3
selector:
matchLabels:
app: my-app
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 1
maxUnavailable: 0
template:
metadata:
labels:
app: my-app
version: v1.0.0
spec:
containers:
- name: my-app
image: gcr.io/my-project/my-app:v1.0.0
ports:
- containerPort: 3000
resources:
requests:
memory: "128Mi"
cpu: "100m"
limits:
memory: "256Mi"
cpu: "500m"
Service(サービス)
# service.yaml
apiVersion: v1
kind: Service
metadata:
name: my-app-service
spec:
selector:
app: my-app
ports:
- protocol: TCP
port: 80
targetPort: 3000
type: LoadBalancer
kubectlの基本コマンド
# クラスターの状態確認
kubectl cluster-info
kubectl get nodes
# リソースの作成・適用
kubectl apply -f deployment.yaml
kubectl apply -f service.yaml
# リソースの一覧表示
kubectl get pods
kubectl get deployments
kubectl get services
# 詳細情報の確認
kubectl describe pod my-app-pod
kubectl describe deployment my-app-deployment
# ログの確認
kubectl logs my-app-pod
kubectl logs -f my-app-pod # リアルタイム追従
# ポッドへの接続
kubectl exec -it my-app-pod -- /bin/bash
# ローカルへのポートフォワード
kubectl port-forward pod/my-app-pod 3000:3000
# リソースの削除
kubectl delete pod my-app-pod
kubectl delete -f deployment.yaml
# スケールの変更
kubectl scale deployment my-app-deployment --replicas=5
Horizontal Pod Autoscaler(HPA)でオートスケーリング
# hpa.yaml
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: my-app-hpa
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: my-app-deployment
minReplicas: 2
maxReplicas: 20
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 70
- type: Resource
resource:
name: memory
target:
type: Utilization
averageUtilization: 80
Ingress でHTTPS対応とルーティング
# ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: my-app-ingress
annotations:
kubernetes.io/ingress.class: nginx
cert-manager.io/cluster-issuer: letsencrypt-prod
spec:
tls:
- hosts:
- api.example.com
secretName: my-app-tls
rules:
- host: api.example.com
http:
paths:
- path: /api/v1
pathType: Prefix
backend:
service:
name: my-app-service
port:
number: 80
- path: /
pathType: Prefix
backend:
service:
name: frontend-service
port:
number: 80
マネージドKubernetesサービス比較(2026年版)
- ☁️ Amazon EKS:AWS生態系との統合が強力。マルチリージョン対応も容易
- 🔵 Google GKE:Kubernetesの本家。Autopilotモードで運用負担を大幅削減
- 💙 Azure AKS:Microsoft/Active Directory連携が強い。EnterpriseではAzureが選ばれることが多い
- 🌊 DigitalOcean DOKS:シンプルで低コスト。スタートアップに人気
まとめ:Kubernetesで本番レディなインフラを構築しよう
Kubernetesは最初は難しく感じますが、基本概念(Pod、Deployment、Service)を理解すればすぐに実用できます。まずはminikubeやkind(Kubernetes in Docker)でローカル環境を構築し、小さなアプリから試してみましょう。マネージドKubernetesサービスを活用すれば、コントロールプレーンの管理を委託しながらアプリ開発に集中できます。