すべてのプロダクト
Search
ドキュメントセンター

Container Compute Service:一時ボリュームのマウント

最終更新日:Dec 27, 2024

アプリケーションが追加のストレージを使用する必要があるものの、データの永続性は不要な場合、アプリケーションのPodに一時ボリュームをマウントできます。一時ボリュームはPodと共に作成および削除されるため、アプリケーションのデプロイと管理が簡素化されます。このトピックでは、ephemeral.volumeClaimTemplate パラメーターをPod構成に追加することで、一時ボリュームをPodにマウントする方法について説明します。また、Podの削除時に関連する永続ボリューム(PV)と永続ボリュームクレーム(PVC)が自動的に削除されるかどうかも検証します。

シナリオ

一時ボリュームは、以下のシナリオに適しています。

  • アプリケーションが一時ボリュームを使用して、永続化する必要のない一時データを保存する。

  • アプリケーションが通常、大量のログデータを生成する。一時的な排他的ボリュームを使用してログデータを保存できます。

手順

  1. ACSクラスターに接続します。詳細については、クラスターのkubeconfigファイルを取得し、kubectlを使用してクラスターに接続するおよびCloud Shellでkubectlを使用してACSクラスターを管理するを参照してください。

  2. 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の容量をサポートしています。

  3. ephemeral-example.yamlファイルをデプロイして、Deploymentを作成します。

    kubectl create -f ephemeral-example.yaml
  4. 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
  5. 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が削除されると自動的に削除されます。次の手順を実行して、デプロイ結果を確認します。

  1. DeploymentのPodレプリカの数を減らします。

    次のコマンドを実行して、DeploymentのPodレプリカの数を1つに減らします。

    kubectl scale deploy ephemeral-example --replicas=1
  2. スケールイン操作が完了したかどうかを確認します。

    kubectl get pod

    次の出力は、Deploymentに対して作成されたPodレプリカの数が1つであることを示しています。

    NAME                                 READY   STATUS    RESTARTS   AGE
    ephemeral-example-64db7b9f5c-qqvl5   1/1     Running   0          11m
  3. PVとPVCが削除されたかどうかを確認します。

    1. 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
    2. 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