· Kubernetes と コンテナ  · 2 min read

GKE でのステートフルアプリケーションの運用方法

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

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

ベストプラクティス

  1. 適切なストレージクラスの選択
  2. バックアップの自動化
  3. モニタリングの徹底
  4. 定期的なフェイルオーバーテスト
  5. リソース使用量の最適化

参考リンク

Back to Blog

Related Posts