はじめに
Kubernetes では、StatefulSet を使用して状態を持つアプリケーションを管理します。従来の無状態アプリケーションとは異なり、状態を持つアプリケーションには安定した一意のネットワーク識別子と永続的なストレージが必要です。この実験では、Kubernetes で StatefulSet を使って安定性をモデル化する方法を学びます。
💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください
Kubernetes では、StatefulSet を使用して状態を持つアプリケーションを管理します。従来の無状態アプリケーションとは異なり、状態を持つアプリケーションには安定した一意のネットワーク識別子と永続的なストレージが必要です。この実験では、Kubernetes で StatefulSet を使って安定性をモデル化する方法を学びます。
リソースを作成する前に、動作中の Kubernetes クラスタが必要です。Minikube は、ローカル マシン上で動作する軽量の Kubernetes 環境です。
作業ディレクトリに移動する:
ターミナルを開き、デフォルトのプロジェクト フォルダに移動します。
cd /home/labex/project
Minikube を起動する:
Minikube を起動して Kubernetes クラスタを初期化します。
minikube start
Minikube が動作していることを確認する:
Minikube クラスタの状態を確認します。
minikube status
kubelet
や apiserver
などのコンポーネントが Running
と表示されていることを確認します。minikube start
を再度実行します。Minikube の起動に問題がある場合は、必要に応じて minikube delete
を使用して環境をリセットします。
最初のステップは、永続ボリューム (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/data
の my-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.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 を作成しました!
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 を更新しました!
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 をスケーリングしました!
Kubernetes では、次のコマンドを実行することで StatefulSet を削除できます。
kubectl delete statefulset web
これにより、web
StatefulSet とそのすべてのポッドが削除されます。
おめでとうございます。Kubernetes で StatefulSet を使った安定性のモデリングに関する実験を完了しました!
この実験では、Kubernetes で StatefulSet を使って安定性をモデリングする方法を学びました。StatefulSet を作成し、更新し、スケーリングし、削除しました。これらは、Kubernetes で StatefulSet を操作する際に必要となる基本的な操作です。