0Pricing
Kubernetes Basics · レッスン

ステートフルアプリのStatefulSet

StatefulSetを使ってデータベースなどのステートフルアプリケーションをデプロイ・管理し、安定したネットワーク識別子と永続ストレージを確保します。

「ステートフルアプリのStatefulSet」はCoddyKit上の無料Kubernetes Basicsレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはKubernetes Basics学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Kubernetes Basicsコースには全4レッスンが含まれています。

ステートフルアプリ向けの StatefulSets

ようこそ。このレッスンでは、ステートフルアプリケーションを管理するために設計された Kubernetes オブジェクト、StatefulSetsについて詳しく学びます。

簡単にスケールや置き換えができるステートレスアプリとは異なり、ステートフルアプリでは、各インスタンスに固有の ID と永続ストレージが必要です。データをローカルに保存するデータベース、メッセージキュー、カスタムアプリケーションなどが該当します。

なぜステートフルなのか: 課題

従来のDeploymentsは、ステートレスアプリケーションに適しています。Pod が停止すると新しい Pod が置き換わるため、どの Pod がリクエストを処理するかは問題になりません。

しかしステートフルアプリでは、各レプリカに安定した固有の ID と専用ストレージが必要になることがよくあります。データベースの Pod が再起動した場合は、対応する特定のデータボリュームに再接続する必要があります。

安定したネットワーク ID と Pod ID

StatefulSets の重要な機能は、各 Pod に安定した固有のネットワーク識別子を提供することです。

  • Pod には予測可能な順序で名前が付けられます(例: web-0、web-1)。
  • 再起動してもホスト名が維持されます。
  • これにより、他のサービスから特定のレプリカへ確実に接続できます。

安定した永続ストレージ

StatefulSets では、各 Pod に安定した永続ストレージが割り当てられます。これはPersistent Volume Claims (PVCs)を使用して実現します。

StatefulSet の Pod が作成されると、volumeClaimTemplatesの定義に基づいて PVC が自動的にプロビジョニングされます。Pod が停止して再作成された場合も、同じ PVC に再アタッチされるため、元のデータを引き続き使用できます。

StatefulSet YAML の構成

StatefulSet の YAML 定義は Deployment に似ていますが、重要な追加項目があります。次の内容が含まれます。

  • apiVersion、kind、metadata
  • spec.replicas、spec.selector、spec.template(Deployment と同様)
  • spec.serviceName: ヘッドレスサービスに関連付けます。
  • spec.volumeClaimTemplates: 各 Pod 用の PVC の作成方法を定義します。

安定した ID のためのヘッドレスサービス

StatefulSets が安定したネットワーク ID を提供するには、Headless Serviceが必要です。ヘッドレスサービスにはクラスター IP がありません。その代わり、選択対象の Pod の IP アドレスを直接返します。

StatefulSet はこのサービスを使用して、各 Pod の DNS エントリを登録します(例: pod-0.my-service.my-namespace.svc.cluster.local)。

apiVersion: v1
kind: Service
metadata:
  name: my-app-headless
spec:
  ports:
  - port: 80
    name: web
  clusterIP: None # This makes it a headless service
  selector:
    app: my-app

VolumeClaimTemplates

volumeClaimTemplatesセクションは StatefulSets 固有のものです。これは、各レプリカ用に作成されるPersistent Volume Claims (PVCs)のテンプレートです。

StatefulSet 内の各 Pod(例: my-app-0、my-app-1)には、このテンプレートに基づいて専用の PVC(例: data-my-app-0、data-my-app-1)が割り当てられます。これにより、専用ストレージが確保されます。

volumeClaimTemplates:
- metadata:
    name: data # This name is used in Pod's volumeMounts
  spec:
    accessModes: [ "ReadWriteOnce" ]
    storageClassName: standard
    resources:
      requests:
        storage: 1Gi

StatefulSet の完全な例

これは、シンプルな Nginx StatefulSet の完全な例です。ヘッドレスサービスに関連付けるserviceNameと、volumeClaimTemplatesに注目してください。

デプロイするには、これをnginx-statefulset.yamlとして保存し、kubectl apply -f nginx-statefulset.yamlを実行します。

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: web
spec:
  serviceName: "nginx-headless" # Must match headless service name
  replicas: 2
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: k8s.gcr.io/nginx-slim:0.8
        ports:
        - containerPort: 80
          name: web
        volumeMounts:
        - name: www # Mounts the volume from the PVC
          mountPath: /usr/share/nginx/html
  volumeClaimTemplates:
  - metadata:
      name: www # This name links to volumeMounts.name
    spec:
      accessModes: [ "ReadWriteOnce" ]
      storageClassName: standard
      resources:
        requests:
          storage: 1Gi
---
apiVersion: v1
kind: Service
metadata:
  name: nginx-headless
  labels:
    app: nginx
spec:
  ports:
  - port: 80
    name: web
  clusterIP: None
  selector:
    app: nginx

Pod の名前付けと順序

デプロイすると、web-0、web-1のような名前の Pod が表示されます。これらのインデックスは安定しており、一意です。

StatefulSets は、スケーリング操作の順序を厳密に管理します。Pod は順番に(0、1、2…)作成され、逆順(…、2、1、0)で終了します。

この順序付けられた方式は、多くの分散ステートフルシステムで整合性を維持するために重要です。

スケーリングとローリングアップデート

kubectl scale statefulset web --replicas=3を使用して、Deployment と同じように StatefulSet をスケールできます。

ローリングアップデートも可能ですが、同じ順序保証が適用されます。Pod は逆の序数順に 1 つずつ更新され、前の Pod の準備が完了するまで次の Pod は更新されません。

この慎重なオーケストレーションにより、ステートフルアプリケーションへの影響を最小限に抑えられます。

理解度を確認する

Kubernetes StatefulSets の主な特徴または要件は、次のうちどれですか?

復習: StatefulSets の実践

よくできました。このレッスンでは、ステートフルアプリケーションの管理に強力な Kubernetes オブジェクトであるStatefulSetsについて学びました。

  • 安定したネットワーク ID と、順序付けられた操作を提供します。
  • volumeClaimTemplatesを使用して、レプリカごとに専用の永続ストレージを割り当てます。
  • 安定したネットワーク ID には、ヘッドレスサービスが不可欠です。

StatefulSets は、データベースなどの重要なステートフルワークロードを Kubernetes 上で確実に実行するための基本要素です。

よくある質問

「ステートフルアプリのStatefulSet」レッスンは無料ですか?

はい。「ステートフルアプリのStatefulSet」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Kubernetes Basicsコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Kubernetes Basicsコースには全4レッスンが含まれています。

「ステートフルアプリのStatefulSet」で何を学びますか?

StatefulSetを使ってデータベースなどのステートフルアプリケーションをデプロイ・管理し、安定したネットワーク識別子と永続ストレージを確保します。 ブラウザで直接実行するハンズオンコードでKubernetes Basicsを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Kubernetes Basicsを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのKubernetes Basicsは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。

「ステートフルアプリのStatefulSet」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このKubernetes Basicsレッスンでコードを書いて実行できますか?

はい。すべてのKubernetes Basicsレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. ステートフルアプリのStatefulSet
  2. ノード固有タスクのDaemonSet
  3. Kubernetes Operatorを理解する
  4. カスタムリソース定義(CRD)
← Kubernetes Basicsに戻る