StatefulSet コントローラを使用する

KubernetesKubernetesBeginner
今すぐ練習

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

Kubernetes では、StatefulSet を使用して状態を持つアプリケーションを管理します。従来の無状態アプリケーションとは異なり、状態を持つアプリケーションには安定した一意のネットワーク識別子と永続的なストレージが必要です。この実験では、Kubernetes で StatefulSet を使って安定性をモデル化する方法を学びます。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL kubernetes(("Kubernetes")) -.-> kubernetes/BasicsGroup(["Basics"]) kubernetes(("Kubernetes")) -.-> kubernetes/BasicCommandsGroup(["Basic Commands"]) kubernetes(("Kubernetes")) -.-> kubernetes/AdvancedCommandsGroup(["Advanced Commands"]) kubernetes(("Kubernetes")) -.-> kubernetes/AdvancedDeploymentGroup(["Advanced Deployment"]) kubernetes(("Kubernetes")) -.-> kubernetes/TroubleshootingandDebuggingCommandsGroup(["Troubleshooting and Debugging Commands"]) kubernetes/BasicsGroup -.-> kubernetes/initialization("Initialization") kubernetes/BasicCommandsGroup -.-> kubernetes/get("Get") kubernetes/BasicCommandsGroup -.-> kubernetes/create("Create") kubernetes/BasicCommandsGroup -.-> kubernetes/delete("Delete") kubernetes/AdvancedCommandsGroup -.-> kubernetes/apply("Apply") kubernetes/AdvancedDeploymentGroup -.-> kubernetes/scale("Scale") kubernetes/TroubleshootingandDebuggingCommandsGroup -.-> kubernetes/describe("Describe") subgraph Lab Skills kubernetes/initialization -.-> lab-9205{{"StatefulSet コントローラを使用する"}} kubernetes/get -.-> lab-9205{{"StatefulSet コントローラを使用する"}} kubernetes/create -.-> lab-9205{{"StatefulSet コントローラを使用する"}} kubernetes/delete -.-> lab-9205{{"StatefulSet コントローラを使用する"}} kubernetes/apply -.-> lab-9205{{"StatefulSet コントローラを使用する"}} kubernetes/scale -.-> lab-9205{{"StatefulSet コントローラを使用する"}} kubernetes/describe -.-> lab-9205{{"StatefulSet コントローラを使用する"}} end

Minikube クラスタを起動する

リソースを作成する前に、動作中の Kubernetes クラスタが必要です。Minikube は、ローカル マシン上で動作する軽量の Kubernetes 環境です。

  1. 作業ディレクトリに移動する:

    ターミナルを開き、デフォルトのプロジェクト フォルダに移動します。

    cd /home/labex/project
  2. Minikube を起動する:

    Minikube を起動して Kubernetes クラスタを初期化します。

    minikube start
    • このコマンドは、ローカル マシン上に単一ノードの Kubernetes クラスタをセットアップします。
    • Minikube の起動には、システムの性能に応じて数分かかる場合があります。
  3. Minikube が動作していることを確認する:

    Minikube クラスタの状態を確認します。

    minikube status
    • kubeletapiserver などのコンポーネントが Running と表示されていることを確認します。
    • クラスタが動作していない場合は、minikube start を再度実行します。

Minikube の起動に問題がある場合は、必要に応じて minikube delete を使用して環境をリセットします。

PV と PVC を作成する

最初のステップは、永続ボリューム (PV) と永続ボリュームクレーム (PVC) を持つ Pod を作成することです。PV と PVC は、Pod の再起動にまたがってデータを永続的に保存およびアクセスするために使用されます。

これを行うには、まず PV を作成します。

apiVersion: v1
kind: PersistentVolume
metadata:
  name: my-pv
spec:
  capacity:
    storage: 1Gi
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: "/mnt/data"

上記のコードを pv.yaml という名前のファイルに保存し、次のコマンドを実行します。

kubectl apply -f pv.yaml

このコマンドにより、容量 1Gi でホスト パス /mnt/datamy-pv という名前の PV が作成されます。

次に、PV から 1Gi のストレージを要求する PVC を作成します。

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: my-pvc
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 1Gi

上記のコードを pvc.yaml という名前のファイルに保存し、次のコマンドを実行します。

kubectl apply -f pvc.yaml

このコマンドにより、1Gi のストレージを要求する my-pvc という名前の PVC が作成されます。

StatefulSet を作成する

次の内容を持つ statefulset.yaml という名前のファイルを作成します。

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: web
spec:
  serviceName: "web"
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
        - name: nginx
          image: nginx:1.19.7
          ports:
            - containerPort: 80
          volumeMounts:
            - name: www
              mountPath: /usr/share/nginx/html
  volumeClaimTemplates:
    - metadata:
        name: www
      spec:
        accessModes: ["ReadWriteOnce"]
        resources:
          requests:
            storage: 1Gi

このファイルでは、NGINX ポッドのレプリカを 3 つ作成する web という名前の StatefulSet を定義します。また、app: nginx というラベルを使用して NGINX ポッドを選択する web という名前のサービスも定義します。最後に、NGINX ポッドのデータ用の永続ボリュームクレーム テンプレートを定義します。

StatefulSet を作成するには、次のコマンドを実行します。

kubectl apply -f statefulset.yaml

StatefulSet の状態を確認するには、次のコマンドを実行します。

kubectl get statefulsets

StatefulSet が稼働したら、次のコマンドを実行して NGINX ポッドにアクセスできます。

kubectl get pods
kubectl exec -it web-0 -- /bin/bash

web-0 を、StatefulSet によって作成された任意の NGINX ポッドの名前に置き換えます。

おめでとうございます。Kubernetes で成功裏に StatefulSet を作成しました!

StatefulSet を更新する

Kubernetes では、StatefulSet のテンプレートを更新することでそのポッドを更新できます。ここでは、statefulset.yaml ファイルを更新して NGINX バージョン 1.20.0 を使用するようにしましょう。

statefulset.yaml ファイルを次のように更新します。

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: web
spec:
  serviceName: "web"
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
        - name: nginx
          image: nginx:1.20.0
          ports:
            - containerPort: 80
          volumeMounts:
            - name: www
              mountPath: /usr/share/nginx/html
  volumeClaimTemplates:
    - metadata:
        name: www
      spec:
        accessModes: ["ReadWriteOnce"]
        resources:
          requests:
            storage: 1Gi

StatefulSet を更新するには、次のコマンドを実行します。

kubectl apply -f statefulset.yaml

StatefulSet の状態を確認するには、次のコマンドを実行します。

kubectl get statefulsets

おめでとうございます。Kubernetes で成功裏に StatefulSet を更新しました!

StatefulSet をスケーリングする

Kubernetes では、replicas フィールドを変更することで StatefulSet を増やしたり減らしたりすることができます。ここでは、web StatefulSet を 5 つのレプリカにスケーリングしましょう。

statefulset.yaml ファイルを次のように更新します。

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: web
spec:
  serviceName: "web"
  replicas: 5
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
        - name: nginx
          image: nginx:1.20.0
          ports:
            - containerPort: 80
          volumeMounts:
            - name: www
              mountPath: /usr/share/nginx/html
  volumeClaimTemplates:
    - metadata:
        name: www
      spec:
        accessModes: ["ReadWriteOnce"]
        resources:
          requests:
            storage: 1Gi

StatefulSet を更新するには、次のコマンドを実行します。

kubectl apply -f statefulset.yaml

StatefulSet の状態を確認するには、次のコマンドを実行します。

kubectl get statefulsets

おめでとうございます。Kubernetes で成功裏に StatefulSet をスケーリングしました!

StatefulSet を削除する

Kubernetes では、次のコマンドを実行することで StatefulSet を削除できます。

kubectl delete statefulset web

これにより、web StatefulSet とそのすべてのポッドが削除されます。

おめでとうございます。Kubernetes で StatefulSet を使った安定性のモデリングに関する実験を完了しました!

まとめ

この実験では、Kubernetes で StatefulSet を使って安定性をモデリングする方法を学びました。StatefulSet を作成し、更新し、スケーリングし、削除しました。これらは、Kubernetes で StatefulSet を操作する際に必要となる基本的な操作です。