【2026年版】Kubernetes(k8s)完全入門ガイド|基本概念からデプロイ・スケーリングまで実践解説

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サービスを活用すれば、コントロールプレーンの管理を委託しながらアプリ開発に集中できます。

投稿者 kasata

IT企業でエンジニアとして勤務後、テクノロジー情報メディア「Tech Athletes(テック・アスリート)」を運営。プログラミング、クラウドインフラ(AWS/GCP/Azure)、AI活用、Webサービス開発を専門とする。エンジニア・ビジネスパーソン向けに、実際に使ってみた経験をもとに信頼できる技術情報を発信中。資格:AWS認定ソリューションアーキテクト、Python 3 エンジニア認定試験合格。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です