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よりも慎重な設定が必要。