なぜKubernetesが必要なのか

Dockerでコンテナを作れるようになった次のステップは、大量のコンテナを自動で管理することです。Kubernetes(K8s)は、コンテナのデプロイ・スケーリング・障害回復を自動化するオーケストレーターです。

K8sの主要コンポーネント

コンポーネント 役割
Pod 最小デプロイ単位(1〜複数コンテナ)
Deployment Podの宣言的管理・ローリングアップデート
Service Podへの安定したネットワークアクセス
Ingress 外部HTTPトラフィックのルーティング
ConfigMap 設定値の外部化
Secret 機密情報の管理

基本的なマニフェスト

# deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp
spec:
  replicas: 3
  selector:
    matchLabels:
      app: myapp
  template:
    metadata:
      labels:
        app: myapp
    spec:
      containers:
      - name: myapp
        image: myapp:1.0.0
        ports:
        - containerPort: 8080
        resources:
          requests:
            memory: "64Mi"
            cpu: "250m"
          limits:
            memory: "128Mi"
            cpu: "500m"
# service.yaml
apiVersion: v1
kind: Service
metadata:
  name: myapp-svc
spec:
  selector:
    app: myapp
  ports:
  - port: 80
    targetPort: 8080
  type: ClusterIP

よく使うkubectlコマンド

kubectl apply -f deployment.yaml      # 適用
kubectl get pods                       # Pod一覧
kubectl describe pod [pod名]           # 詳細確認
kubectl logs [pod名] -f               # ログ追跡
kubectl exec -it [pod名] -- bash      # コンテナ内に入る
kubectl scale deployment myapp --replicas=5  # スケールアウト
kubectl rollout undo deployment myapp        # ロールバック

Helm:パッケージマネージャー

helm repo add bitnami https://charts.bitnami.com/bitnami
helm install my-postgres bitnami/postgresql   --set auth.postgresPassword=secret

学習環境の準備

  • minikube:ローカルK8s環境(無料)
  • kind(Kubernetes IN Docker):軽量ローカル環境
  • GKE / EKS / AKS:マネージドK8s(クラウド)

K8sはインフラエンジニア・SREの必須スキルです。ローカル環境で実際にPodを動かすことから始めましょう。