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

Container Service for Kubernetes:ブロックストレージデバイスのスロットリングに関するベストプラクティス

最終更新日:Nov 09, 2025

オープンソースの Kubernetes は、ブロックストレージデバイスのスロットリングをサポートしていません。Container Service for Kubernetes (ACK) を使用すると、クラウドディスクや Logical Volume Manager (LVM) を使用して仮想化されたローカルディスクなど、Pod にマウントされたブロックストレージデバイスをスロットリングできます。これにより、ストレージリソースをより効率的に管理および割り当て、システムのパフォーマンスと安定性を確保し、コストを削減できます。このトピックでは、ブロックストレージデバイスをスロットリングする方法について説明します。

制限事項

  • ホストで使用される OS は、Alibaba Cloud Linux 2 以降である必要があります。

  • ACK クラスターの Kubernetes バージョンは 1.20 以降である必要があります。

  • クラスターで使用される Container Storage Interface (CSI) プラグインのバージョンは 1.22 以降である必要があります。CSI バージョンの詳細については、「csi-provisioner」をご参照ください。

パラメーター

  • readIOPS: Pod がブロックストレージデバイスで 1 秒あたりに実行できる読み取り操作の最大数を指定します。

  • writeIOPS: Pod がブロックストレージデバイスで 1 秒あたりに実行できる書き込み操作の最大数を指定します。

  • readBPS: Pod がブロックストレージデバイスから 1 秒あたりに読み取ることができるデータの最大量を指定します。

  • writeBPS: Pod がブロックストレージデバイスに 1 秒あたりに書き込むことができるデータの最大量を指定します。

使用方法

次の例は、クラウドディスクをスロットリングする方法を示しています。クラウドディスクは、動的プロビジョニングボリュームまたは静的プロビジョニングボリュームとしてマウントできます。

説明

クラウドディスクのスロットリング設定を構成した後は、変更できません。StorageClass でスロットリング構成を調整した場合、変更は新しく作成されたクラウドディスクにのみ適用されます。既存のクラウドディスクは影響を受けません。

動的プロビジョニングボリュームとしてディスクをマウントする

  1. alicloud-disk-topology-essd.yaml という名前のファイルを作成し、次の内容をファイルにコピーします。

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: alicloud-disk-topology-essd
    parameters:
      type: cloud_essd
      readIOPS: "100"
      writeIOPS: "10"
      readBPS: "100k"
      writeBPS: "100m"
    provisioner: diskplugin.csi.alibabacloud.com
    reclaimPolicy: Delete
    volumeBindingMode: WaitForFirstConsumer
  2. 次のコマンドを実行して StorageClass を作成します。

    kubectl apply -f alicloud-disk-topology-essd.yaml
  3. nginx.yaml という名前のファイルを作成し、次の内容をファイルにコピーします。

    アプリケーションは、作成した StorageClass を参照する永続ボリューム要求 (PVC) を使用して、クラウドディスクをボリュームとして動的にプロビジョニングします。

    apiVersion: apps/v1
    kind: StatefulSet
    metadata:
      name: web-csi-encrypt
    spec:
      selector:
        matchLabels:
          app: nginx
      serviceName: "nginx"
      podManagementPolicy: "Parallel"
      replicas: 1
      template:
        metadata:
          labels:
            app: nginx
        spec:
          hostNetwork: true
          containers:
          - name: nginx
            command:
            - sleep
            - "999999999"
            image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6
            volumeMounts:
            - name: disk-csi
              mountPath: /data
      volumeClaimTemplates:
      - metadata:
          name: disk-csi
        spec:
          accessModes: [ "ReadWriteOnce" ]
          storageClassName: alicloud-disk-topology-essd
          resources:
            requests:
              storage: 80Gi
  4. 次のコマンドを実行してアプリケーションを作成します。

    kubectl apply -f nginx.yaml
  5. cgroup バージョンに基づいてコンテナーのブロックデバイスの制限を表示します。

    1. 次のコマンドを実行して cgroup バージョンを確認します。

      stat -fc %T /sys/fs/cgroup

      出力が cgroup2fs の場合、バージョンは cgroup V2 です。それ以外の場合は cgroup V1 です。

    2. cgroup バージョンに基づいてコンテナーのブロックデバイスの制限を表示します。

      cgroup V2

      ホストにログインし、Pod UID を使用してパスを構築する必要があります。次のコマンドを実行して、制限が正しく設定されていることを確認します。

      /sys/fs/cgroup/kubepods.slice/kubepods-besteffort.slice/kubepods-besteffort-pod<UID>.slice/io.max

      cgroup V1

      ホストにログインし、Pod UID を使用してパスを構築する必要があります。次のコマンドを実行して、制限が正しく設定されていることを確認します。

      readIOPS:

      /sys/fs/cgroup/blkio/kubepods.slice/kubepods-besteffort.slice/kubepods-besteffort-pod{pod_uid}.slice/blkio.throttle.read_iops_device

      writeIOPS:

      /sys/fs/cgroup/blkio/kubepods.slice/kubepods-besteffort.slice/kubepods-besteffort-pod{pod_uid}.slice/blkio.throttle.write_iops_device

      readBPS:

      /sys/fs/cgroup/blkio/kubepods.slice/kubepods-besteffort.slice/kubepods-besteffort-pod{pod_uid}.slice/blkio.throttle.read_bps_device

      writeBPS:

      /sys/fs/cgroup/blkio/kubepods.slice/kubepods-besteffort.slice/kubepods-besteffort-pod{pod_uid}.slice/blkio.throttle.write_bps_device

静的プロビジョニングボリュームとしてディスクをマウントする

  1. 次のテンプレートを使用して、pv-static.yaml という名前のファイルを作成します。

    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: d-****
    spec:
      accessModes:
      - ReadWriteMany
      capacity:
        storage: 80Gi
      csi:
        driver: diskplugin.csi.alibabacloud.com
        fsType: ext4
        volumeAttributes:
          app: nginx
          type: cloud_ssd
          readBPS: 100K
          readIOPS: "100"
        volumeHandle: d-****
      persistentVolumeReclaimPolicy: Retain
      volumeMode: Filesystem
  2. 次のコマンドを実行して PV を作成します。

    kubectl apply -f pv-static.yaml
  3. 次のテンプレートを使用して pvc-static.yaml ファイルを作成します。

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      labels:
        app: nginx
      name: disk-pvc
      namespace: default
    spec:
      accessModes:
      - ReadWriteMany
      resources:
        requests:
          storage: 80Gi
      volumeMode: Filesystem
      volumeName: d-****
  4. 次のコマンドを実行して PVC を作成します。

    kubectl apply -f pvc-static.yaml
  5. nginx.yaml という名前のファイルを作成し、次の内容をファイルにコピーします。

    アプリケーションは、作成した PVC を使用します。PVC は、クラウドディスクをボリュームとして静的にプロビジョニングするために使用されます。

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: deploy-disk
      labels:
        app: nginx
    spec:
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          labels:
            app: nginx
        spec:
          containers:
          - name: nginx
            image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6
            ports:
            - containerPort: 80
            volumeMounts:
            - name: disk-pvc2
              mountPath: /data
          volumes:
            - name: disk-pvc2
              persistentVolumeClaim:
                claimName: disk-pvc
  6. 次のコマンドを実行してアプリケーションを作成します。

    kubectl apply -f nginx.yaml
  7. cgroup バージョンに基づいてコンテナーのブロックデバイスの制限を表示します。

    1. 次のコマンドを実行して cgroup バージョンを確認します。

      stat -fc %T /sys/fs/cgroup

      出力が cgroup2fs の場合、バージョンは cgroup V2 です。それ以外の場合は cgroup V1 です。

    2. cgroup バージョンに基づいてコンテナーのブロックデバイスの制限を表示します。

      cgroup V2

      ホストにログインし、Pod UID を使用してパスを構築する必要があります。次のコマンドを実行して、制限が正しく設定されていることを確認します。

      /sys/fs/cgroup/kubepods.slice/kubepods-besteffort.slice/kubepods-besteffort-pod<UID>.slice/io.max

      cgroup V1

      ホストにログインし、Pod UID を使用してパスを構築する必要があります。次のコマンドを実行して、制限が正しく設定されていることを確認します。

      readIOPS:

      /sys/fs/cgroup/blkio/kubepods.slice/kubepods-besteffort.slice/kubepods-besteffort-pod{pod_uid}.slice/blkio.throttle.read_iops_device

      writeIOPS:

      /sys/fs/cgroup/blkio/kubepods.slice/kubepods-besteffort.slice/kubepods-besteffort-pod{pod_uid}.slice/blkio.throttle.write_iops_device

      readBPS:

      /sys/fs/cgroup/blkio/kubepods.slice/kubepods-besteffort.slice/kubepods-besteffort-pod{pod_uid}.slice/blkio.throttle.read_bps_device

      writeBPS:

      /sys/fs/cgroup/blkio/kubepods.slice/kubepods-besteffort.slice/kubepods-besteffort-pod{pod_uid}.slice/blkio.throttle.write_bps_device