Kubernetes Deploymentベストプラクティスチェックリスト

Kubernetes Deploymentマニフェストの包括的なチェックリスト。リソース制限、プローブ、セキュリティコンテキスト、イメージタグ、ラベル、レプリカ設定をカバー。

Best Practices

詳細な説明

完全なDeploymentチェックリスト

適切に設定されたKubernetes Deploymentは多くのベストプラクティスに従います。以下はすべてのバリデーターチェックに合格するリファレンスマニフェストです。

リファレンスマニフェスト

apiVersion: apps/v1
kind: Deployment
metadata:
  name: production-app
  labels:
    app.kubernetes.io/name: myapp
    app.kubernetes.io/version: "3.1.0"
    app.kubernetes.io/component: server
    app.kubernetes.io/managed-by: kubectl
spec:
  replicas: 3
  selector:
    matchLabels:
      app.kubernetes.io/name: myapp
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxSurge: 1
      maxUnavailable: 0
  template:
    metadata:
      labels:
        app.kubernetes.io/name: myapp
        app.kubernetes.io/version: "3.1.0"
    spec:
      securityContext:
        runAsNonRoot: true
        runAsUser: 1000
        fsGroup: 2000
      containers:
        - name: app
          image: myregistry.io/myapp:3.1.0
          ports:
            - containerPort: 8080
              name: http
          resources:
            requests:
              cpu: 200m
              memory: 256Mi
            limits:
              cpu: 1000m
              memory: 512Mi
          livenessProbe:
            httpGet:
              path: /healthz
              port: http
            initialDelaySeconds: 15
            periodSeconds: 10
          readinessProbe:
            httpGet:
              path: /ready
              port: http
            initialDelaySeconds: 5
            periodSeconds: 5
          securityContext:
            allowPrivilegeEscalation: false
            readOnlyRootFilesystem: true

チェックリスト

チェック ステータス 備考
安定版APIバージョン apps/v1 非推奨ではない
metadata.name あり DNS互換名
metadata.labels あり Kubernetes推奨ラベル
固定イメージタグ 3.1.0 :latestではない
リソースリクエスト 設定済み スケジューリング用
リソース制限 設定済み 保護用
Livenessプローブ 設定済み 障害時の自動再起動
Readinessプローブ 設定済み トラフィック管理
runAsNonRoot true セキュリティベストプラクティス
レプリカ > 1 3 高可用性
ローリングアップデート戦略 設定済み ダウンタイムなしデプロイ

ラベル規約

Kubernetesは以下の標準ラベルを推奨しています:

  • app.kubernetes.io/name: アプリケーション名
  • app.kubernetes.io/version: アプリケーションバージョン
  • app.kubernetes.io/component: アーキテクチャ内のコンポーネント
  • app.kubernetes.io/managed-by: リソースを管理するツール

ユースケース

新しいDeploymentマニフェストを作成する際や既存のものを監査する際のリファレンスとして使用。Kubernetes設定品質のチーム標準として機能。

試してみる — K8s Manifest Validator

フルツールを開く