アプリケーションが追加のストレージを使用する必要があるものの、データの永続性は不要な場合、アプリケーションのPodに一時ボリュームをマウントできます。一時ボリュームはPodと共に作成および削除されるため、アプリケーションのデプロイと管理が簡素化されます。このトピックでは、ephemeral.volumeClaimTemplate
パラメーターをPod構成に追加することで、一時ボリュームをPodにマウントする方法について説明します。また、Podの削除時に関連する永続ボリューム(PV)と永続ボリュームクレーム(PVC)が自動的に削除されるかどうかも検証します。
シナリオ
一時ボリュームは、以下のシナリオに適しています。
アプリケーションが一時ボリュームを使用して、永続化する必要のない一時データを保存する。
アプリケーションが通常、大量のログデータを生成する。一時的な排他的ボリュームを使用してログデータを保存できます。
手順
ACSクラスターに接続します。詳細については、クラスターのkubeconfigファイルを取得し、kubectlを使用してクラスターに接続するおよびCloud Shellでkubectlを使用してACSクラスターを管理するを参照してください。
ephemeral-example.yamlという名前のファイルを作成し、以下のコードブロックをファイルにコピーします。コードブロックの下の表のパラメーターの説明に基づいて、テンプレートのパラメーターを変更します。
説明ephemeral.volumeClaimTemplate
パラメーターは、Deployment、StatefulSet、およびPodに適用できます。この例では、Deploymentを使用しています。apiVersion: apps/v1 kind: Deployment metadata: name: ephemeral-example spec: replicas: 2 selector: matchLabels: pod: example-pod strategy: type: Recreate template: metadata: labels: pod: example-pod spec: containers: - name: nginx image: registry.cn-hangzhou.aliyuncs.com/acs-sample/nginx:latest resources: requests: cpu: 500m memory: 2Gi ephemeral-storage: 2Gi volumeMounts: - mountPath: "/scratch" name: scratch-volume volumes: - name: scratch-volume ephemeral: volumeClaimTemplate: metadata: labels: type: scratch-volume spec: accessModes: [ "ReadWriteOncePod" ] storageClassName: alicloud-disk-topology-alltype resources: requests: storage: 40Gi
上記のYAMLテンプレートは、2つのPodをプロビジョニングするDeploymentを指定しています。各Podに一時ボリュームがマウントされます。次の表は、
volumeClaimTemplate
パラメーターのフィールドについて説明しています。パラメーター
説明
accessModes
ボリュームのアクセスモード。値を
ReadWriteOncePod
に設定します。storageClassName
使用するStorageClassの名前。
この例では、
alicloud-disk-topology-alltype
StorageClassを使用しています。これは、Alibaba Cloud Container Compute Service(ACS)によって提供されるデフォルトのStorageClassです。このStorageClassは、パフォーマンスレベル1(PL1)エンタープライズSSD(ESSD)をマウントするためにプロビジョニングされるディスクボリュームの構成を指定します。説明使用するディスクに対して従量課金制で課金されます。詳細については、ブロックストレージデバイスの課金およびブロックストレージデバイスの価格を参照してください。
storage
一時ボリュームの容量。
この例で使用されているStorageClassは、PL1 ESSDをマウントするためにプロビジョニングされるディスクボリュームを作成するために使用できます。PL1 ESSDは、20~65,536 GiBの容量をサポートしています。
ephemeral-example.yamlファイルをデプロイして、Deploymentを作成します。
kubectl create -f ephemeral-example.yaml
Deploymentによって作成されたPodのステータスを確認します。
kubectl get pod
次の出力は、2つのPodが作成されたことを示しています。
NAME READY STATUS RESTARTS AGE ephemeral-example-64db7b9f5c-hcpz5 1/1 Running 0 108s ephemeral-example-64db7b9f5c-qqvl5 1/1 Running 0 108s
PVCを確認します。
kubectl get pvc
次の出力は、Podに対してPVCとPVが作成されたことを示しています。
説明この例では、ディスクボリュームが使用されています。
VOLUME
フィールドからディスクIDを取得できます。NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE ephemeral-example-64db7b9f5c-hcpz5-scratch-volume Bound d-uf6h6nl0yf2y1331**** 40Gi RWOP alicloud-disk-topology-alltype 3m28s ephemeral-example-64db7b9f5c-qqvl5-scratch-volume Bound d-uf6a3lk85znunou6**** 40Gi RWOP alicloud-disk-topology-alltype 3m28s
結果の確認
上記の手順を実行してDeploymentを作成すると、各Podにディスクをマウントするための一時ボリュームがプロビジョニングされます。一時ボリュームは、Podが削除されると自動的に削除されます。次の手順を実行して、デプロイ結果を確認します。
DeploymentのPodレプリカの数を減らします。
次のコマンドを実行して、DeploymentのPodレプリカの数を1つに減らします。
kubectl scale deploy ephemeral-example --replicas=1
スケールイン操作が完了したかどうかを確認します。
kubectl get pod
次の出力は、Deploymentに対して作成されたPodレプリカの数が1つであることを示しています。
NAME READY STATUS RESTARTS AGE ephemeral-example-64db7b9f5c-qqvl5 1/1 Running 0 11m
PVとPVCが削除されたかどうかを確認します。
PVを確認します。
kubectl get pv
次の出力は、PVがPodと共に削除されたことを示しています。
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE d-uf6a3lk85znunou6**** 40Gi RWOP Delete Bound default/ephemeral-example-64db7b9f5c-qqvl5-scratch-volume alicloud-disk-topology-alltype 20m
PVCを確認します。
kubectl get pvc
次の出力は、PVCがPodと共に削除されたことを示しています。
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE ephemeral-example-64db7b9f5c-qqvl5-scratch-volume Bound d-uf6a3lk85znunou6**** 40Gi RWOP alicloud-disk-topology-alltype 15m