このページの改善にご協力ください
このユーザーガイドに貢献するには、すべてのページの右側のペインにある「GitHub でこのページを編集する」リンクを選択してください。
このチュートリアルでは、EKS Auto Mode クラスターにステートフルアプリケーションのサンプルをデプロイする方法について説明します。このアプリケーションは永続ボリュームにタイムスタンプを書き込み、EBS Auto Mode の自動 EBS ボリュームプロビジョニングと永続化機能を示します。
前提条件
-
EKS Auto Mode クラスター
-
適切なアクセス許可で設定された AWS CLI
-
インストールおよび設定済みの
kubectl
-
詳細については「Amazon EKS を使用するようにセットアップする」を参照してください。
-
ステップ 1: 環境を設定する
-
環境変数を設定する:
export CLUSTER_NAME=my-auto-cluster export AWS_REGION="us-west-2"
-
kubeconfig を更新します:
aws eks update-kubeconfig --name "${CLUSTER_NAME}"
ステップ 2: ストレージクラスを作成する
StorageClass
は、EBS ボリュームを EKS Auto Mode でプロビジョニングする方法を定義します。
EKS Auto Mode では、お客様用の StorageClass
は作成されません。EKS Auto Mode のストレージ機能を使用するには、ebs.csi.eks.amazonaws.com
を参照する StorageClass
を作成する必要があります。
-
storage-class.yaml
という名前のファイルを作成します:apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: auto-ebs-sc annotations: storageclass.kubernetes.io/is-default-class: "true" provisioner: ebs.csi.eks.amazonaws.com volumeBindingMode: WaitForFirstConsumer parameters: type: gp3 encrypted: "true"
-
StorageClass
を適用します。kubectl apply -f storage-class.yaml
主要コンポーネント:
-
provisioner: ebs.csi.eks.amazonaws.com
- EKS Auto Mode を使用する -
volumeBindingMode: WaitForFirstConsumer
- ポッドが必要とするまでボリュームの作成を遅らせる -
type: gp3
- EBS ボリュームタイプを指定する -
encrypted: "true"
- EBS はデフォルトのaws/ebs
キーを使用して、このクラスで作成されたボリュームを暗号化します。これはオプションですが推奨されます。 -
storageclass.kubernetes.io/is-default-class: "true"
– 永続ボリュームのクレームで別のボリュームクラスを指定しない限り、Kubernetes はデフォルトでこのストレージクラスを使用します。別のストレージコントローラーから移行する場合は、この値を設定するときに注意してください 。(オプション)
ステップ3: 永続的なボリューム要求を作成する
PVC はStorageClass
からのストレージをリクエストします。
-
pvc.yaml
という名前のファイルを作成します:apiVersion: v1 kind: PersistentVolumeClaim metadata: name: auto-ebs-claim spec: accessModes: - ReadWriteOnce storageClassName: auto-ebs-sc resources: requests: storage: 8Gi
-
SCP を適用します:
kubectl apply -f pvc.yaml
主要コンポーネント:
-
accessModes: ReadWriteOnce
- ボリュームは一度に 1 つのノードからマウントすることができます -
storage: 8Gi
- 8 GiB ボリュームをリクエストします -
storageClassName: auto-ebs-sc
- 作成したStorageClass
を参照します
ステップ 4: アプリケーションのデプロイ
Deployment は、永続的ボリュームにタイムスタンプを書き込むコンテナを実行します。
-
deployment.yaml
という名前のファイルを作成します:apiVersion: apps/v1 kind: Deployment metadata: name: inflate-stateful spec: replicas: 1 selector: matchLabels: app: inflate-stateful template: metadata: labels: app: inflate-stateful spec: terminationGracePeriodSeconds: 0 nodeSelector: eks.amazonaws.com/compute-type: auto containers: - name: bash image: public.ecr.aws/docker/library/bash:4.4 command: ["/usr/local/bin/bash"] args: ["-c", "while true; do echo $(date -u) >> /data/out.txt; sleep 60; done"] resources: requests: cpu: "1" volumeMounts: - name: persistent-storage mountPath: /data volumes: - name: persistent-storage persistentVolumeClaim: claimName: auto-ebs-claim
-
デプロイを適用します。
kubectl apply -f deployment.yaml
主要コンポーネント:
-
ファイルにタイムスタンプを書き込むシンプルな bash コンテナ
-
PVC を
/data
にマウントします -
1 CPU コアをリクエストします
-
EKS マネージドノードのノードセレクタを使用します
ステップ 5: セットアップを検証する
-
ポッドが稼働していることを確認します:
kubectl get pods -l app=inflate-stateful
-
PVC がバインドされていることを確認します:
kubectl get pvc auto-ebs-claim
-
EBS ボリュームを確認します:
# Get the PV name PV_NAME=$(kubectl get pvc auto-ebs-claim -o jsonpath='{.spec.volumeName}') # Describe the EBS volume aws ec2 describe-volumes \ --filters Name=tag:CSIVolumeName,Values=${PV_NAME}
-
データが書き込まれていることを確認します:
kubectl exec "$(kubectl get pods -l app=inflate-stateful \ -o=jsonpath='{.items[0].metadata.name}')" -- \ cat /data/out.txt
ステップ 6: クリーンアップ
次のコマンドを実行して、このチュートリアルで作成したすべてのリソースを削除します。
# Delete all resources in one command
kubectl delete deployment/inflate-stateful pvc/auto-ebs-claim storageclass/auto-ebs-sc
シーンの背後で起こっていること
-
PVC は
StorageClass
からのストレージをリクエストします -
ポッドがスケジュールされている場合:
-
EKS Auto Mode が EBS ボリュームをプロビジョニングします
-
PersistentVolume を作成します
-
ボリュームをノードにアタッチします。
-
-
ポッドはボリュームをマウントし、タイムスタンプの書き込みを開始します
Snapshot Controller
EKS Auto Mode は、スナップショットコントローラーとも呼ばれる Kubernetes CSI Snapshotter と互換性があります。ただし、EKS Auto Mode にはスナップショットコントローラーがありません。スナップショットコントローラーのインストールと設定はお客様の責任となります。詳細については「CSI ボリュームのためにスナップショット機能を有効にする」を参照してください。
EKS Auto Mode のストレージ機能を参照する以下の VolumeSnapshotClass
を確認してください。
apiVersion: snapshot.storage.k8s.io/v1
kind: VolumeSnapshotClass
metadata:
name: auto-ebs-vsclass
driver: ebs.csi.eks.amazonaws.com
deletionPolicy: Delete
Kubernetes CSI Snapshotter の詳細をご覧ください。