mcpField
K
kubernetes-deploying

kubernetes-deploying

github.com/revitalb-portクラウド・DevOps053 回インストール10 週間前に更新
リポジトリ

kubernetes-deploying について

開発者や運用担当者向けの Kubernetes デプロイ用スキルです。主要リソース、更新戦略、ヘルスチェック、スケーリングを、マニフェスト例や kubectl コマンドとともに扱います。

主な機能

  1. 01Deployment、Service、Ingress の設定
  2. 02ローリング更新、ブルーグリーン、カナリア戦略
  3. 03Liveness・Readiness Probe の設定
  4. 04Horizontal Pod Autoscaler の設定
  5. 05kubectl による適用と状態確認

活用シーン

  1. 01アプリ用 Kubernetes マニフェストの作成
  2. 02変更に応じたデプロイ戦略の選択
  3. 03Pod と Deployment の状態確認

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/revitalb-port/skills-registry-demo --skill kubernetes-deploying

インストール後、Claude Code で/kubernetes-deployingを入力して読み込まれたか確認します。

詳細

Kubernetes のデプロイ

Kubernetes でアプリケーションをデプロイおよび管理します。

コアリソース

Deployment
apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app
  labels:
    app: my-app
spec:
  replicas: 3
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
      containers:
        - name: my-app
          image: my-registry/my-app:v1.2.3
          ports:
            - containerPort: 3000
          resources:
            requests:
              cpu: 100m
              memory: 128Mi
            limits:
              cpu: 500m
              memory: 512Mi
          livenessProbe:
            httpGet:
              path: /healthz
              port: 3000
            initialDelaySeconds: 10
            periodSeconds: 30
          readinessProbe:
            httpGet:
              path: /ready
              port: 3000
            initialDelaySeconds: 5
            periodSeconds: 10
          env:
            - name: DATABASE_URL
              valueFrom:
                secretKeyRef:
                  name: my-app-secrets
                  key: database-url
            - name: NODE_ENV
              value: production
Service
apiVersion: v1
kind: Service
metadata:
  name: my-app
spec:
  selector:
    app: my-app
  ports:
    - port: 80
      targetPort: 3000
  type: ClusterIP
Ingress
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: my-app
  annotations:
    cert-manager.io/cluster-issuer: letsencrypt-prod
spec:
  tls:
    - hosts:
        - app.example.com
      secretName: my-app-tls
  rules:
    - host: app.example.com
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: my-app
                port:
                  number: 80
ConfigMap と Secret
apiVersion: v1
kind: ConfigMap
metadata:
  name: my-app-config
data:
  LOG_LEVEL: info
  FEATURE_FLAGS: '{"darkMode": true}'
---
apiVersion: v1
kind: Secret
metadata:
  name: my-app-secrets
type: Opaque
stringData:
  database-url: postgresql://user:pass@host:5432/db
  api-key: sk-abc123

よく使うコマンド

# Apply manifests
kubectl apply -f k8s/

# Check deployment status
kubectl rollout status deployment/my-app

# View pods
kubectl get pods -l app=my-app

# View logs
kubectl logs -f deployment/my-app

# Execute into a pod
kubectl exec -it <pod-name> -- /bin/sh

# Scale
kubectl scale deployment/my-app --replicas=5

# Rollback
kubectl rollout undo deployment/my-app

# Port forward for local debugging
kubectl port-forward svc/my-app 3000:80

デプロイ戦略

戦略方法使用する場面
ローリングアップデート(デフォルト)Pod を一度に 1 つずつ置き換えますほとんどのデプロイ
再作成すべての古い Pod を停止して、新しい Pod を起動します2 つのバージョンを同時に実行できない場合
ブルーグリーン2 つの完全な環境を実行し、トラフィックを切り替えます即時ロールバックが必要な場合
カナリアトラフィックの一部を新しいバージョンにルーティングしますリスクの高い変更

ローリングアップデートの設定:

spec:
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxSurge: 1
      maxUnavailable: 0

ヘルスチェック

必ず両方を設定してください:

  • livenessProbe:「プロセスは正常ですか?」— 失敗した場合、Pod を再起動します
  • readinessProbe:「トラフィックを処理できますか?」— 失敗した場合、サービスから除外します

一般的なプローブの種類:

  • httpGet:HTTP エンドポイントにアクセスします(最も一般的)
  • exec:コンテナ内でコマンドを実行します
  • tcpSocket:ポートが開いているか確認します

Horizontal Pod Autoscaler

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

ヒント

  • リソースのリクエストと上限は必ず設定してください
  • 名前空間を使用して環境(dev、staging、prod)を分離してください
  • Git にコミットする YAML にシークレットを平文で記述しないでください — Sealed Secrets、SOPS、または外部のシークレットマネージャーを使用してください
  • イメージには特定のバージョンのタグを付けてください。本番環境では :latest を使用しないでください
  • 高可用性ワークロードには PodDisruptionBudget を設定してください

コメント