· Kubernetes と コンテナ · 2 min read
GKE でのステートフルアプリケーションの運用方法
Google Kubernetes Engine でステートフルアプリケーションを効率的に運用するためのベストプラクティスとパターン

ステートフルアプリケーションの課題
Kubernetes上でステートフルアプリケーションを運用する際には、以下の課題に対処する必要があります:
- 永続的なストレージの管理
- Pod の識別性の維持
- スケーリングとデータの整合性
- バックアップと復元
StatefulSet の活用
基本的な StatefulSet の設定
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: postgres
spec:
serviceName: postgres
replicas: 3
selector:
matchLabels:
app: postgres
template:
metadata:
labels:
app: postgres
spec:
containers:
- name: postgres
image: postgres:14
ports:
- containerPort: 5432
volumeMounts:
- name: data
mountPath: /var/lib/postgresql/data
volumeClaimTemplates:
- metadata:
name: data
spec:
accessModes: [ "ReadWriteOnce" ]
resources:
requests:
storage: 100Gi
storageClassName: premium-rwo
永続ボリュームの管理
Storage Class の設定
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: premium-rwo
provisioner: kubernetes.io/gce-pd
parameters:
type: pd-ssd
replication-type: none
バックアップ戦略
Velero を使用したバックアップ
# バックアップの作成
velero backup create postgres-backup --include-namespaces database
# バックアップからの復元
velero restore create --from-backup postgres-backup
高可用性の確保
Anti-Affinity Rules の設定
spec:
template:
spec:
affinity:
podAntiAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- key: app
operator: In
values:
- postgres
topologyKey: "kubernetes.io/hostname"
モニタリングとメトリクス収集
Prometheus の設定
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
name: postgres-monitor
spec:
selector:
matchLabels:
app: postgres
endpoints:
- port: metrics
ディザスタリカバリ
クロスリージョンレプリケーション
apiVersion: replication.storage.k8s.io/v1
kind: VolumeReplication
metadata:
name: postgres-replication
spec:
volumeReplicationClass: async-replication
source:
pvc: data-postgres-0
target:
cluster: dr-cluster
namespace: database
パフォーマンスチューニング
リソース制限の設定
resources:
requests:
memory: "2Gi"
cpu: "500m"
limits:
memory: "4Gi"
cpu: "1000m"
書籍紹介
より詳しく学びたい方におすすめの書籍:
『徹底攻略 Google Cloud認定資格 Associate Cloud Engineer教科書』 https://amzn.to/47yJEpy
トラブルシューティング
- Volume のマウント問題
- StatefulSet のスケーリング issues
- ネットワーク接続性の問題
- データ同期の遅延
メンテナンスと運用
ローリングアップデートの設定
spec:
updateStrategy:
type: RollingUpdate
rollingUpdate:
partition: 0
ベストプラクティス
- 適切なストレージクラスの選択
- バックアップの自動化
- モニタリングの徹底
- 定期的なフェイルオーバーテスト
- リソース使用量の最適化