Kubernetes本身不支援對儲存介質進行限速,您可以通過Container ServiceACK實現對某個Pod進行某個塊裝置(雲端硬碟或LVM本地碟)的限速,有效地管理和分配儲存資源,確保系統的效能和穩定性,同時減少不必要的成本。本文以雲端硬碟為例介紹如何對Block Storage進行限速。
使用限制
宿主機作業系統必須為Alibaba Cloud Linux 2及以上版本。
ACK叢集版本不低於1.20。
CSI儲存群組件版本不低於1.22。版本資訊,請參見csi-provisioner。
參數說明
readIOPS:限制當前Pod對指定Block Storage每秒讀IO的次數。
writeIOPS:限制當前Pod對指定Block Storage每秒寫IO的次數。
readBPS:限制當前Pod對指定Block Storage每秒讀取的資料量,單位 (KB,MB,GB)。
writeBPS:限制當前Pod對指定Block Storage每秒寫入的資料量,單位(KB,MB,GB)。
使用方式
本文以雲端硬碟為例說明如何對Block Storage進行限速。您可以通過動態建立雲端硬碟或靜態建立雲端硬碟的方式使用。
Block Storage限速設定後,無法變更。
通過動態建立雲端硬碟的方式使用
使用以下內容,建立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
執行以下命令,建立StorageClass。
kubectl apply -f alicloud-disk-topology-essd.yaml
使用以下內容,建立nginx.yaml檔案。
該應用引用已建立的StorageClass,即可使用限速雲端硬碟。
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: nginx volumeMounts: - name: disk-csi mountPath: /data volumeClaimTemplates: - metadata: name: disk-csi spec: accessModes: [ "ReadWriteOnce" ] storageClassName: alicloud-disk-topology-essd resources: requests: storage: 80Gi
執行以下命令,建立應用。
kubectl apply -f nginx.yaml
執行以下命令,查看容器的塊裝置限制值。
# 登入宿主機, 根據PodUID來進行路徑拼接, 查看值是否被正確設定上。 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
通過靜態建立雲端硬碟的方式使用
使用以下內容,建立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
執行以下命令,建立PV。
kubectl apply -f pv-static.yaml
使用以下內容,建立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-****
執行以下命令,建立PVC。
kubectl apply -f pvc-static.yaml
使用以下內容,建立nginx.yaml檔案。
該應用引用已建立的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: nginx ports: - containerPort: 80 volumeMounts: - name: disk-pvc2 mountPath: /data volumes: - name: disk-pvc2 persistentVolumeClaim: claimName: disk-pvc
執行以下命令,建立應用。
kubectl apply -f nginx.yaml
執行以下命令,查看容器的塊裝置限制值。
# 登入宿主機, 根據PodUID來進行路徑拼接, 查看值是否被正確設定上。 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