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

Container Service for Kubernetes:静的にプロビジョニングされたディスクボリュームを永続ストレージに使用する

最終更新日:Nov 13, 2024

実行中のコンテナをホストするノードに障害が発生すると、ステートフルアプリケーションはコンテナに格納されているビジネスデータを失う可能性があります。 この問題は、永続ストレージを使用して解決できます。 このトピックでは、静的にプロビジョニングされたディスクボリュームを使用してデータを永続化する方法について説明します。

前提条件

開始する前に、次の操作を実行していることを確認してください。

背景情報

シナリオ

  • 高いディスクI/Oを必要とし、データ共有を必要としないアプリケーションにストレージスペースを提供します。 たとえば、MySQLやRedisなどのストレージサービスです。

  • ログデータを高速に書き込みます。

  • ポッドの有効期間に依存しない方法でデータを保存します。

ディスクボリュームを静的にプロビジョニングする前に、ディスクを作成する必要があります。

静的にプロビジョニングされたディスクボリュームを使用するには、永続ボリューム (PV) と永続ボリューム要求 (PVC) を手動で作成する必要があります。 詳細については、「静的にプロビジョニングされたディスクボリュームのマウント」をご参照ください。

制限事項

  • Alibaba Cloudが提供するディスクは共有できません。 各ディスクは1つのポッドにのみマウントできます。

  • ディスクは、ディスクと同じゾーンに配置されているノードにのみマウントできます。

PV の作成

  1. pv-static.yamlという名前のファイルを作成します。

    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: <your-disk-id>
      labels:
        alicloud-pvname: <your-disk-id>
        failure-domain.beta.kubernetes.io/zone: <your-zone>
        failure-domain.beta.kubernetes.io/region: <your-region>
    spec:
      capacity:
        storage: 20Gi
      accessModes:
        - ReadWriteOnce
      flexVolume:
        driver: "alicloud/disk"
        fsType: "ext4"
        options:
          volumeId: "<your-disk-id>"
    説明
    • alicloud-pvname: <your-disk-id>: PVの名前。 値をディスクIDに設定します。

    • failure-domain.beta.kubernetes.io/zone: <your-zone>: ディスクがデプロイされているゾーン。 例: cn-hangzhou-b

    • failure-domain.beta.kubernetes.io /リージョン: <your-region>: ディスクがデプロイされているリージョン。 例: cn-hangzhou

    クラスターがゾーンにまたがってデプロイされている場合は、failure-domain.beta.kubernetes.io /ゾーンfailure-domain.beta.kubernetes.io /リージョンを指定する必要があります。 これにより、ディスクが展開されているゾーンにポッドがスケジュールされます。

  2. 次のコマンドを実行してPVを作成します。

    kubectl create -f pv-static.yaml

    Verify the result

    1. ACK コンソールにログインします。

    2. 左側のナビゲーションペインで、[クラスター] をクリックします。

    3. [クラスター] ページで、管理するクラスターを見つけ、クラスターの名前をクリックするか、[操作] 列の [詳細] をクリックします。

    4. 詳細ページの左側のナビゲーションウィンドウで、[ボリューム] > [永続ボリューム] を選択します。 新しく作成されたPVが表示されることを確認します。

PVC の作成

  1. pvc-static.yamlという名前のファイルを作成します。

    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata:
      name: pvc-disk
    spec:
      accessModes:
        - ReadWriteOnce
      resources:
        requests:
          storage: 20Gi
      selector:
        matchLabels:
          alicloud-pvname: <your-disk-id>
  2. 次のコマンドを実行してPVCを作成します。

    kubectl create -f pvc-static.yaml

    結果の表示

    1. ACK コンソールにログインします。

    2. 左側のナビゲーションペインで、[クラスター] をクリックします。

    3. [クラスター] ページで、管理するクラスターを見つけ、クラスターの名前をクリックするか、[操作] 列の [詳細] をクリックします。

    4. 詳細ページの左側のナビゲーションウィンドウで、[ボリューム] > [永続ボリュームクレーム] を選択します。

    5. [ボリュームクレームの永続性] ページで、新しく作成されたPVCが表示されていることを確認します。

アプリケーションの作成

  1. static.yamlという名前のファイルを作成します。

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: nginx-static
      labels:
        app: nginx
    spec:
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          labels:
            app: nginx
        spec:
          containers:
          - name: nginx
            image: nginx
            volumeMounts:
              - name: disk-pvc
                mountPath: "/data"
          volumes:
            - name: disk-pvc
              persistentVolumeClaim:
                claimName: pvc-disk
  2. 次のコマンドを実行して、静的にプロビジョニングされたディスクボリュームを使用するアプリケーションをデプロイします。

    kubectl create -f static.yaml

    結果の表示

    1. ACK コンソールにログインします。

    2. 左側のナビゲーションペインで、[クラスター] をクリックします。

    3. [クラスター] ページで、管理するクラスターを見つけ、クラスターの名前をクリックするか、[操作] 列の [詳細] をクリックします。

    4. 詳細ページの左側のナビゲーションウィンドウで、[ワークロード] > [デプロイメント] を選択します。

    5. [デプロイメント] ページで、新しく作成されたアプリケーションが表示されていることを確認します。

データ永続性の検証

  1. 次のコマンドを実行して、アプリケーションをホストするポッドを照会します。

    kubectl get pod | grep static

    期待される出力:

    nginx-static-78c7dcb9d7-g****   2/2     Running     0          32s
  2. 次のコマンドを実行して、新しいディスクが /dataパスにマウントされているかどうかを確認します。

    kubectl exec nginx-static-78c7dcb9d7-g**** -- df | grep data

    期待される出力:

    /dev/vdf        20511312    45080  20449848   1% /data
  3. 次のコマンドを実行して、/dataパスのファイルを照会します。

    kubectl exec nginx-static-78c7dcb9d7-g**** -- ls /data

    期待される出力:

    lost+found
  4. 次のコマンドを実行して、/dataパスにstaticという名前のファイルを作成します。

    kubectl exec nginx-static-78c7dcb9d7-g**** -- touch /data/static
  5. 次のコマンドを実行して、/dataパスのファイルを照会します。

    kubectl exec nginx-static-78c7dcb9d7-g**** -- ls /data

    期待される出力:

    static
    lost+found
  6. 次のコマンドを実行して、nginx-static-78c7dcb9d7-g **** という名前のポッドを削除します。

    kubectl delete pod nginx-static-78c7dcb9d7-g****

    期待される出力:

    pod "nginx-static-78c7dcb9d7-g****" deleted
  7. 別のkubectlコマンドラインインターフェイス (CLI) を開き、次のコマンドを実行して、ポッドの削除方法と再作成方法を表示します。

    kubectl get pod -w -l app=nginx

    期待される出力:

    NAME                            READY   STATUS            RESTARTS   AGE
    nginx-static-78c7dcb9d7-g****   2/2     Running           0          50s
    nginx-static-78c7dcb9d7-g****   2/2     Terminating       0          72s
    nginx-static-78c7dcb9d7-h****   0/2     Pending           0          0s
    nginx-static-78c7dcb9d7-h****   0/2     Pending           0          0s
    nginx-static-78c7dcb9d7-h****   0/2     Init:0/1          0          0s
    nginx-static-78c7dcb9d7-g****   0/2     Terminating       0          73s
    nginx-static-78c7dcb9d7-h****   0/2     Init:0/1          0          5s
    nginx-static-78c7dcb9d7-g****   0/2     Terminating       0          78s
    nginx-static-78c7dcb9d7-g****   0/2     Terminating       0          78s
    nginx-static-78c7dcb9d7-h****   0/2     PodInitializing   0          6s
    nginx-static-78c7dcb9d7-h****   2/2     Running           0          8s
  8. 次のコマンドを実行して、再作成されたポッドを照会します。

    kubectl get pod

    期待される出力:

    NAME                            READY   STATUS      RESTARTS   AGE
    nginx-static-78c7dcb9d7-h****   2/2     Running     0          14s
  9. 次のコマンドを実行して、静的ファイルが /dataパスにまだ存在することを確認します。 これは、データがディスクに永続化されることを示します。

    kubectl exec nginx-static-78c7dcb9d7-h6brd -- ls /data

    期待される出力:

    static
    lost+found