ステートフルアプリのデプロイ、スケール、監視

Kubernetes入門

Frank Heilmann

Platform Architect and Freelance Instructor

ステートレスアプリの復習

  • おさらい: ステートレスアプリは Kubernetes の「Deployment」に対応
  • 各 Pod が全く同じ役割のときに使用
  • ステートフルアプリは、同一セットに属するが異なる役割・データを扱う Pod を必要とする
  • Deployment で学んだ多くは StatefulSet にも適用可能
Kubernetes入門

ステートフルアプリケーション

  • ステートフルアプリ:

    • 一般的な概念
    • Kubernetes に適合
    • ある状態を保存
  • 中断や停止時、新しいレプリカ(Pod)が保存状態を読み取り、そこから継続可能

  • 例:
    • データベースバックエンド(例: PostgreSQL)が 3 つの Pod でフロントエンドにデータ提供
    • どの Pod から更新しても、そのデータは永続化が必要
    • Pod が終了したら、新しい Pod が起動し保存状態を引き継ぐ必要がある
Kubernetes入門

Kubernetes の StatefulSet

  • ステートフルアプリは「Kubernetes StatefulSet」に対応
  • サンプル Manifest の構成要素は次と同様:
    • apiVersion, kind, metadata, spec, template
  • replicasStatefulSet の Pod 数を定義
  • selector は後ほど説明
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: <deployment name>
  labels:
    app: <a label for the application>
spec:
  replicas: <number of initial replicas>
  selector:
    matchLabels:
      app: <matches the label above>
  template:
    metadata:
      labels:
        app: <label to be given to each pod>
    spec:
      containers:
      - name: <container name>
        image: <the image to be used>
        ports:
        - containerPort: <ports for networking>
Kubernetes入門

Kubernetes クラスターへのデプロイ

  • StatefulSet のデプロイは Deployment と同様: kubectl apply -f <manifest.yml>
  • ただし作成時の挙動は Deployment と異なる
    • Pod は同時ではなく順番に作成される
    • Pod は pod-0, pod-1, pod-2 のような予測可能な名前になる
  • つまり、Deployment の Pod と異なり、StatefulSet の Pod は識別子と状態を持つ
  • よって、同じ StatefulSet 内でも異なる ID の Pod が別の役割を担える
Kubernetes入門

StatefulSet のスケーリング

  • Deployment と同様に、StatefulSet はスケールアップ/ダウン可能:
    • Manifest の replicas を変更して再適用
    • あるいは kubectl scale statefulsets ... を使用
  • スケールアップ時は Pod が順番に作成される
    • 例: 先に pod-0, pod-1, pod-2、次に pod-3、 その後 pod-4 が追加
  • スケールダウン時は最後に作られた Pod から削除
    • 例: 先に pod-4、次に pod-3
Kubernetes入門

StatefulSet の監視

  • Deployment と同様に、監視は障害、負荷スパイク、 ストレージ不足などへの対応を可能にする
  • ここでは kubectl で基本的な監視を行う
  • 代表的なコマンド: Deployment と同様
  • 例1: kubectl get pods は StatefulSet の全 Pod と現状を返す
  • 例2: kubectl get services は StatefulSet が利用する可能性のある全 Service を返す
Kubernetes入門

練習してみましょう!

Kubernetes入門

Preparing Video For Download...