StatefulSetマニフェストの検証

Kubernetes StatefulSetマニフェストを検証します。ステートフルワークロード固有の適切なサービス名、ボリュームクレームテンプレート、コンテナ設定をチェック。

Workload Types

詳細な説明

StatefulSetの設定

StatefulSetは安定したネットワークIDと永続ストレージを必要とするステートフルアプリケーションを管理します。標準的なDeploymentを超える固有の要件があります。

StatefulSetの例

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: postgres
  labels:
    app: postgres
spec:
  serviceName: postgres-headless
  replicas: 3
  selector:
    matchLabels:
      app: postgres
  template:
    metadata:
      labels:
        app: postgres
    spec:
      securityContext:
        runAsNonRoot: true
        runAsUser: 999
        fsGroup: 999
      containers:
        - name: postgres
          image: postgres:16.1
          ports:
            - containerPort: 5432
              name: postgres
          resources:
            requests:
              cpu: 500m
              memory: 1Gi
            limits:
              cpu: 2000m
              memory: 2Gi
          livenessProbe:
            exec:
              command: ["pg_isready", "-U", "postgres"]
          readinessProbe:
            exec:
              command: ["pg_isready", "-U", "postgres"]

StatefulSet固有のフィールド

フィールド 目的 重要な理由
serviceName DNS用ヘッドレスService 安定したネットワークIDに必要
volumeClaimTemplates Pod別PVC作成 再起動間でデータが永続化
podManagementPolicy OrderedReadyまたはParallel ロールアウト順序を制御
updateStrategy RollingUpdateまたはOnDelete 更新動作を制御

Deploymentとの主な違い

  • Podは安定したホスト名を取得:<name>-0<name>-1など
  • Podは順番に作成・削除される(デフォルト)
  • StatefulSet削除時にPVCは削除されない
  • DNSレコードのためにヘッドレスService(clusterIP: None)が必要

バリデーターはDeploymentコンテナと同様にStatefulSetコンテナをチェックします — リソース制限、プローブ、セキュリティコンテキスト、イメージタグはすべて同様に適用されます。

ユースケース

デプロイ前のデータベース、メッセージキュー、その他のステートフルワークロード設定の検証。StatefulSetはステートレスDeploymentよりも慎重な設定が必要。

試してみる — K8s Manifest Validator

フルツールを開く