ステートフルアプリのStatefulSet
StatefulSetを使ってデータベースなどのステートフルアプリケーションをデプロイ・管理し、安定したネットワーク識別子と永続ストレージを確保します。
「ステートフルアプリのStatefulSet」はCoddyKit上の無料DevOps Bootcampレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはDevOps Bootcamp学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 DevOps Bootcampコースには全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、metadataspec.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-appVolumeClaimTemplates
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: 1GiStatefulSet の完全な例
これは、シンプルな 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: nginxPod の名前付けと順序
デプロイすると、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チューター)、DevOps Bootcampコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 DevOps Bootcampコースには全4レッスンが含まれています。
「ステートフルアプリのStatefulSet」で何を学びますか?
StatefulSetを使ってデータベースなどのステートフルアプリケーションをデプロイ・管理し、安定したネットワーク識別子と永続ストレージを確保します。 ブラウザで直接実行するハンズオンコードでDevOps Bootcampを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
DevOps Bootcampを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのDevOps Bootcampは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。
「ステートフルアプリのStatefulSet」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このDevOps Bootcampレッスンでコードを書いて実行できますか?
はい。すべてのDevOps Bootcampレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- ステートフルアプリのStatefulSet
- ノード固有タスクのDaemonSet
- Kubernetes Operatorを理解する
- カスタムリソース定義(CRD)