𝕏 f B! L
案件・求人数 12,345
案件を探す(準備中) エージェントを探す(準備中) お役立ち情報 ログイン
案件・求人数 12,345
Claude CodeでKubernetesデプロイ自動化|マニフェスト生成からHelm連携まで完全ガイド

Claude CodeでKubernetesデプロイ自動化|マニフェスト生成からHelm連携まで完全ガイド

Claude CodeKubernetesDevOpsコンテナ
目次
⚡ 3秒でわかる!この記事のポイント
  • Claude Codeを使えばKubernetesマニフェストの生成・修正・デバッグを自然言語で実行可能
  • Helm Chart作成やkustomize設定もプロンプト一つで自動生成できる
  • GitHub Actions連携でCI/CDパイプラインの構築まで一貫して自動化できる

「Kubernetesのマニフェストファイルが複雑すぎて手が止まる」「Helm Chartの作り方がわからない」「本番環境へのデプロイパイプラインを効率化したい」

Claude Codeは、Kubernetesのデプロイ作業を自然言語で自動化できるAIコーディングエージェントです。YAMLマニフェストの生成からHelm Chart管理、CI/CDパイプライン構築まで、K8sに関するあらゆる作業を劇的に効率化します。

この記事では、Claude Code完全攻略シリーズEp.40として、Kubernetes環境でのClaude Code活用術を体系的に解説します。

Claude CodeによるKubernetesデプロイ自動化の全体像

なぜClaude Code × Kubernetesなのか

Kubernetesは強力なコンテナオーケストレーションプラットフォームですが、学習コストの高さが課題です。SES案件でK8s環境を扱うエンジニアにとって、以下の悩みは日常的でしょう。

課題従来のアプローチClaude Codeを使った場合
マニフェスト作成公式ドキュメントを参照しながら手書き自然言語で要件を伝えるだけ
設定ミスの検出kubectl apply --dry-run で手動確認AIが設定値の整合性を自動チェック
Helm Chart作成テンプレートの構文を覚える必要ディレクトリ構造ごと自動生成
トラブルシューティングログを読みながら原因を推測エラーメッセージを貼り付けるだけ

Claude Codeの強みは、コードベース全体を理解した上で最適なK8s設定を提案できる点です。アプリケーションのDockerfile、環境変数、依存サービスを考慮した上で、実戦的なマニフェストを生成します。

Kubernetesマニフェストの自動生成

基本的なDeployment + Service

まずは最もシンプルなパターンから始めましょう。Claude Codeに以下のようにプロンプトを投げるだけで、本番品質のマニフェストが生成されます。

claude "このプロジェクトのDockerfileを見て、Kubernetes用のDeploymentとServiceマニフェストを作成して。レプリカ数3、ヘルスチェック付きで"

Claude Codeが生成するマニフェストの例:

# k8s/deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: ses-api-server
  labels:
    app: ses-api
    environment: production
spec:
  replicas: 3
  selector:
    matchLabels:
      app: ses-api
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxSurge: 1
      maxUnavailable: 0
  template:
    metadata:
      labels:
        app: ses-api
    spec:
      containers:
        - name: ses-api
          image: gcr.io/ses-base/api-server:latest
          ports:
            - containerPort: 3000
              protocol: TCP
          env:
            - name: NODE_ENV
              value: "production"
            - name: DATABASE_URL
              valueFrom:
                secretKeyRef:
                  name: ses-db-credentials
                  key: url
          resources:
            requests:
              cpu: "250m"
              memory: "256Mi"
            limits:
              cpu: "500m"
              memory: "512Mi"
          livenessProbe:
            httpGet:
              path: /health
              port: 3000
            initialDelaySeconds: 30
            periodSeconds: 10
            timeoutSeconds: 5
            failureThreshold: 3
          readinessProbe:
            httpGet:
              path: /ready
              port: 3000
            initialDelaySeconds: 5
            periodSeconds: 5
            timeoutSeconds: 3
            failureThreshold: 3
          startupProbe:
            httpGet:
              path: /health
              port: 3000
            initialDelaySeconds: 10
            periodSeconds: 5
            failureThreshold: 30
---
# k8s/service.yaml
apiVersion: v1
kind: Service
metadata:
  name: ses-api-service
  labels:
    app: ses-api
spec:
  type: ClusterIP
  ports:
    - port: 80
      targetPort: 3000
      protocol: TCP
  selector:
    app: ses-api

注目すべきポイントは以下の通りです。

  • 3種類のProbe設定: liveness・readiness・startupの全てが適切に設定されている
  • リソース制限: requests/limitsが実践的な値で設定されている
  • RollingUpdate戦略: maxUnavailable: 0 でダウンタイムゼロのデプロイを保証
  • Secret参照: データベースURLをSecretから安全に読み込む設計

Namespace・ConfigMap・Secretの一括生成

実際のプロジェクトでは、名前空間の分離や設定管理も必要です。

claude "本番環境用のnamespace、ConfigMap、Secretのマニフェストも追加して。環境変数は.envファイルから読み取って適切に分類して"

Claude Codeはプロジェクトの.envファイルを読み取り、機密情報(APIキー、DB接続文字列など)はSecret、それ以外はConfigMapに自動分類します。

# k8s/namespace.yaml
apiVersion: v1
kind: Namespace
metadata:
  name: ses-production
  labels:
    environment: production
    team: ses-base
---
# k8s/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: ses-api-config
  namespace: ses-production
data:
  LOG_LEVEL: "info"
  API_TIMEOUT: "30000"
  CACHE_TTL: "3600"
  CORS_ORIGIN: "https://ses-base.com"
---
# k8s/secret.yaml
apiVersion: v1
kind: Secret
metadata:
  name: ses-api-secrets
  namespace: ses-production
type: Opaque
stringData:
  DATABASE_URL: "${DATABASE_URL}"
  REDIS_URL: "${REDIS_URL}"
  JWT_SECRET: "${JWT_SECRET}"

Helm Chart自動生成と管理

既存マニフェストからのHelm Chart変換

すでにKubernetesマニフェストがある場合、Claude Codeで一括変換できます。

claude "k8sディレクトリの既存マニフェストをHelm Chartに変換して。values.yamlで環境ごとに設定を切り替えられるようにして"

Claude Codeは以下のようなHelm Chart構造を自動生成します。

ses-api-chart/
├── Chart.yaml
├── values.yaml
├── values-staging.yaml
├── values-production.yaml
├── templates/
│   ├── _helpers.tpl
│   ├── deployment.yaml
│   ├── service.yaml
│   ├── configmap.yaml
│   ├── secret.yaml
│   ├── hpa.yaml
│   ├── ingress.yaml
│   └── NOTES.txt
└── .helmignore

values.yamlのテンプレート例:

# values.yaml
replicaCount: 2

image:
  repository: gcr.io/ses-base/api-server
  tag: "latest"
  pullPolicy: IfNotPresent

service:
  type: ClusterIP
  port: 80
  targetPort: 3000

ingress:
  enabled: true
  className: nginx
  hosts:
    - host: api.ses-base.com
      paths:
        - path: /
          pathType: Prefix

resources:
  requests:
    cpu: "250m"
    memory: "256Mi"
  limits:
    cpu: "500m"
    memory: "512Mi"

autoscaling:
  enabled: true
  minReplicas: 2
  maxReplicas: 10
  targetCPUUtilizationPercentage: 70
  targetMemoryUtilizationPercentage: 80

env:
  LOG_LEVEL: "info"
  API_TIMEOUT: "30000"

values.yamlの環境別オーバーライド

claude "ステージング環境用のvaluesファイルを作成して。レプリカ数1、リソースは本番の半分、オートスケーリングは無効で"
# values-staging.yaml
replicaCount: 1

image:
  tag: "staging"

resources:
  requests:
    cpu: "125m"
    memory: "128Mi"
  limits:
    cpu: "250m"
    memory: "256Mi"

autoscaling:
  enabled: false

ingress:
  hosts:
    - host: staging-api.ses-base.com
      paths:
        - path: /
          pathType: Prefix

kustomizeによる環境管理

Helmの代替として人気の高いkustomizeも、Claude Codeで簡単に構築できます。

claude "k8sマニフェストにkustomize構成を追加して。base/overlays構成で、dev・staging・productionの3環境を管理できるようにして"
k8s/
├── base/
│   ├── kustomization.yaml
│   ├── deployment.yaml
│   ├── service.yaml
│   └── configmap.yaml
├── overlays/
│   ├── dev/
│   │   ├── kustomization.yaml
│   │   └── patches/
│   │       └── replica-count.yaml
│   ├── staging/
│   │   ├── kustomization.yaml
│   │   └── patches/
│   │       ├── replica-count.yaml
│   │       └── resource-limits.yaml
│   └── production/
│       ├── kustomization.yaml
│       └── patches/
│           ├── replica-count.yaml
│           ├── resource-limits.yaml
│           └── hpa.yaml

base/kustomization.yamlの例:

apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization

resources:
  - deployment.yaml
  - service.yaml
  - configmap.yaml

commonLabels:
  app: ses-api
  managed-by: kustomize

production/kustomization.yamlの例:

apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization

namespace: ses-production

resources:
  - ../../base

patches:
  - path: patches/replica-count.yaml
  - path: patches/resource-limits.yaml
  - path: patches/hpa.yaml

configMapGenerator:
  - name: ses-api-config
    behavior: merge
    literals:
      - LOG_LEVEL=warn
      - CACHE_TTL=7200

CI/CDパイプラインの構築

GitHub Actions × kubectl

Claude Codeを使って、GitHub Actionsのワークフローファイルも自動生成できます。

claude "GitHub Actionsでこのプロジェクトのビルド→Docker push→K8sデプロイの一連のCI/CDパイプラインを作成して。GKE環境向けで"
# .github/workflows/deploy.yaml
name: Build and Deploy to GKE

on:
  push:
    branches: [main]
  pull_request:
    branches: [main]

env:
  PROJECT_ID: ses-base-prod
  GKE_CLUSTER: ses-cluster
  GKE_ZONE: asia-northeast1-a
  IMAGE: gcr.io/ses-base-prod/api-server

jobs:
  build-and-test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: Setup Node.js
        uses: actions/setup-node@v4
        with:
          node-version: '22'
          cache: 'npm'

      - name: Install and Test
        run: |
          npm ci
          npm run test
          npm run lint

  build-image:
    needs: build-and-test
    runs-on: ubuntu-latest
    if: github.ref == 'refs/heads/main'
    outputs:
      image-tag: ${{ steps.meta.outputs.tags }}
    steps:
      - uses: actions/checkout@v4

      - name: Auth to Google Cloud
        uses: google-github-actions/auth@v2
        with:
          credentials_json: ${{ secrets.GCP_SA_KEY }}

      - name: Setup Cloud SDK
        uses: google-github-actions/setup-gcloud@v2

      - name: Configure Docker
        run: gcloud auth configure-docker

      - name: Build and Push
        id: meta
        run: |
          IMAGE_TAG="${IMAGE}:${{ github.sha }}"
          docker build -t ${IMAGE_TAG} -t ${IMAGE}:latest .
          docker push ${IMAGE_TAG}
          docker push ${IMAGE}:latest
          echo "tags=${IMAGE_TAG}" >> $GITHUB_OUTPUT

  deploy:
    needs: build-image
    runs-on: ubuntu-latest
    environment: production
    steps:
      - uses: actions/checkout@v4

      - name: Auth to Google Cloud
        uses: google-github-actions/auth@v2
        with:
          credentials_json: ${{ secrets.GCP_SA_KEY }}

      - name: Get GKE Credentials
        uses: google-github-actions/get-gke-credentials@v2
        with:
          cluster_name: ${{ env.GKE_CLUSTER }}
          location: ${{ env.GKE_ZONE }}

      - name: Deploy to GKE
        run: |
          kubectl set image deployment/ses-api-server \
            ses-api=${IMAGE}:${{ github.sha }} \
            -n ses-production
          kubectl rollout status deployment/ses-api-server \
            -n ses-production --timeout=300s

ArgoCD連携

GitOps方式のデプロイを採用している場合、ArgoCD用のApplication定義もClaude Codeで生成できます。

claude "ArgoCDのApplication CRDを作成して。Helmチャートを参照する形で、production namespaceへの自動同期を有効にして"
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: ses-api-production
  namespace: argocd
spec:
  project: ses-base
  source:
    repoURL: https://github.com/youx/ses-base.git
    targetRevision: main
    path: ses-api-chart
    helm:
      valueFiles:
        - values-production.yaml
  destination:
    server: https://kubernetes.default.svc
    namespace: ses-production
  syncPolicy:
    automated:
      prune: true
      selfHeal: true
    syncOptions:
      - CreateNamespace=true
      - PruneLast=true
    retry:
      limit: 5
      backoff:
        duration: 5s
        factor: 2
        maxDuration: 3m

トラブルシューティング

Podのデバッグ

K8s運用で最も時間を取られるのがトラブルシューティングです。Claude Codeを使えば、エラーメッセージをそのまま貼り付けるだけで原因と解決策を得られます。

# Pod状態の確認結果をClaude Codeに渡す
kubectl describe pod ses-api-server-7d9f8c6b5-x2k4l | claude "このPodがCrashLoopBackOffになっている原因と解決策を教えて"

よくあるK8sトラブルとClaude Codeでの解決例:

症状よくある原因Claude Codeへの聞き方
CrashLoopBackOff起動時エラー、ヘルスチェック失敗kubectl logs <pod> | claude "クラッシュ原因を特定して"
ImagePullBackOffレジストリ認証エラー、タグ不一致kubectl describe pod <pod> | claude "イメージ取得失敗の原因は?"
Pending状態が続くリソース不足、ノードセレクタ不一致kubectl describe pod <pod> | claude "スケジューリングできない原因は?"
OOMKilledメモリリミット超過claude "メモリ使用量が512Miを超えている。最適なlimitは?"

マニフェストのセキュリティ監査

claude "k8sディレクトリのすべてのマニフェストをセキュリティ観点で監査して。Pod Security Standards準拠かどうかもチェックして"

Claude Codeは以下のような観点で自動チェックを実行します。

  • 特権コンテナの使用有無: securityContext.privilegedtrue でないか
  • root実行の禁止: runAsNonRoot が設定されているか
  • 読み取り専用ファイルシステム: readOnlyRootFilesystem の設定
  • Capability制限: 不要なLinux Capabilityが追加されていないか
  • ネットワークポリシー: 適切なNetworkPolicyが定義されているか

SES案件で活きるK8sスキルセット

Kubernetes関連のSES案件は年々増加しており、2026年現在では以下のスキルが高単価案件に直結します。

スキルレベル要求される技術想定月額単価
初級kubectl操作、Pod管理、ログ確認55〜65万円
中級Helm/kustomize、CI/CD構築、監視設計65〜80万円
上級クラスタ設計、マルチテナント、Operator開発80〜100万円

Claude Codeを使うことで、初級から中級レベルのK8s作業を効率的にこなしながら、上級スキルの学習に時間を割けるのが最大のメリットです。

実践Tips:Claude Code × K8sの効率的な使い方

1. CLAUDE.mdにK8s固有のルールを記載

# CLAUDE.md

## Kubernetes設定ルール
- 全てのDeploymentにresource requests/limitsを設定すること
- livenessProbeとreadinessProbeは必ず設定
- Secretは外部Secret管理(External Secrets Operator)を使用
- コンテナイメージは必ずSHAダイジェストで指定
- PodDisruptionBudgetを本番Deploymentに設定すること

2. マルチステージビルドの最適化

claude "このDockerfileをマルチステージビルドに最適化して。最終イメージサイズを最小化し、セキュリティスキャンも通るようにして"

3. HPA(水平Pod自動スケーリング)の設定

claude "API サーバーのHPAを設定して。CPU 70%でスケールアウト、カスタムメトリクス(リクエスト数/秒)にも対応させて"
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
  name: ses-api-hpa
  namespace: ses-production
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: ses-api-server
  minReplicas: 2
  maxReplicas: 10
  metrics:
    - type: Resource
      resource:
        name: cpu
        target:
          type: Utilization
          averageUtilization: 70
    - type: Resource
      resource:
        name: memory
        target:
          type: Utilization
          averageUtilization: 80
  behavior:
    scaleUp:
      stabilizationWindowSeconds: 60
      policies:
        - type: Pods
          value: 2
          periodSeconds: 60
    scaleDown:
      stabilizationWindowSeconds: 300
      policies:
        - type: Pods
          value: 1
          periodSeconds: 120

まとめ:Claude CodeでKubernetesデプロイを効率化しよう

Claude Codeは、Kubernetesの複雑なマニフェスト管理を劇的に効率化するパートナーです。自然言語でDeployment・Service・Ingress・HPA・NetworkPolicyを生成し、Helm Chartやkustomizeのテンプレートもプロジェクトのコンテキストを理解した上で最適化してくれます。

SESエンジニアとして、K8sスキルは今後ますます重要になります。Claude Codeを活用して日常的なK8s作業を効率化しながら、設計・運用の知見を深めていきましょう。

Claude Codeの基本はClaude Code完全ガイドを、CI/CD連携はCI/CDインテグレーションをご覧ください。Docker関連はDocker活用ガイド、マイクロサービス設計はマイクロサービスガイドが参考になります。

SES案件をお探しですか?

SES記事をもっと読む →
🏗️

SES BASE 編集長

SES業界歴10年以上のメンバーが在籍する編集チーム。SES企業での営業・エンジニア経験、フリーランス独立経験を持つメンバーが、業界のリアルな情報をお届けします。

📊 業界データに基づく記事制作 🔍 IPA・経済産業省データ参照 💼 SES実務経験者が執筆・監修