Kubernetes sumber terbuka tidak mendukung pengendalian aliran perangkat penyimpanan blok. Container Service for Kubernetes (ACK) memungkinkan Anda menerapkan pengendalian aliran pada perangkat penyimpanan blok yang dipasang ke Pod, seperti disk cloud atau disk lokal yang divirtualisasi menggunakan Logical Volume Manager (LVM). Fitur ini membantu mengelola dan mengalokasikan sumber daya penyimpanan secara lebih efisien, menjamin kinerja dan stabilitas sistem, serta mengurangi biaya. Topik ini menjelaskan cara menerapkan pengendalian aliran pada perangkat penyimpanan blok.
Batasan
Sistem operasi host harus menggunakan Alibaba Cloud Linux 2 atau versi yang lebih baru.
Versi Kubernetes klaster ACK harus 1.20 atau yang lebih baru.
Versi Container Storage Interface (CSI) Plugin klaster harus 1.22 atau yang lebih baru. Untuk informasi lebih lanjut tentang versi CSI, lihat csi-provisioner.
Parameter
readIOPS: menentukan jumlah maksimum operasi baca per detik yang dapat dilakukan oleh pod pada perangkat penyimpanan blok.
writeIOPS: menentukan jumlah maksimum operasi tulis per detik yang dapat dilakukan oleh pod pada perangkat penyimpanan blok.
readBPS: menentukan jumlah maksimum data per detik yang dapat dibaca oleh pod dari perangkat penyimpanan blok.
writeBPS: menentukan jumlah maksimum data per detik yang dapat ditulis oleh pod ke perangkat penyimpanan blok.
Penggunaan
Contoh berikut menunjukkan cara membatasi disk cloud. Disk cloud dapat dipasang sebagai volume yang diatur secara dinamis atau volume yang diatur secara statis.
Setelah pengaturan pengendalian aliran dikonfigurasi untuk disk cloud, pengaturan tersebut tidak dapat diubah. Jika Anda menyesuaikan konfigurasi pengendalian aliran dalam StorageClass, perubahan tersebut hanya berlaku untuk disk cloud yang baru dibuat. Disk cloud yang sudah ada tidak terpengaruh.
Pasang disk sebagai volume yang diatur secara dinamis
Buat file bernama alicloud-disk-topology-essd.yaml dan salin konten berikut ke dalam file:
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: WaitForFirstConsumerJalankan perintah berikut untuk membuat StorageClass:
kubectl apply -f alicloud-disk-topology-essd.yamlBuat file bernama nginx.yaml dan salin konten berikut ke dalam file:
Aplikasi menggunakan Persistent Volume Claim (PVC) yang merujuk ke StorageClass yang Anda buat untuk menyediakan disk cloud secara dinamis sebagai volume.
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: 80GiJalankan perintah berikut untuk membuat aplikasi:
kubectl apply -f nginx.yamlLihat batas perangkat blok untuk kontainer berdasarkan versi cgroup.
Jalankan perintah berikut untuk memeriksa versi cgroup:
stat -fc %T /sys/fs/cgroupJika keluarannya adalah
cgroup2fs, maka versinya adalah cgroup V2. Jika tidak, berarti cgroup V1.Lihat batas perangkat blok untuk kontainer berdasarkan versi cgroup.
cgroup V2
Anda perlu masuk ke host dan menggunakan UID Pod untuk menyusun path. Jalankan perintah berikut untuk memverifikasi bahwa batas telah diatur dengan benar:
/sys/fs/cgroup/kubepods.slice/kubepods-besteffort.slice/kubepods-besteffort-pod<UID>.slice/io.maxcgroup V1
Anda perlu masuk ke host dan menggunakan UID Pod untuk menyusun path. Jalankan perintah-perintah berikut untuk memverifikasi bahwa batas telah diatur dengan benar:
readIOPS:
/sys/fs/cgroup/blkio/kubepods.slice/kubepods-besteffort.slice/kubepods-besteffort-pod{pod_uid}.slice/blkio.throttle.read_iops_devicewriteIOPS:
/sys/fs/cgroup/blkio/kubepods.slice/kubepods-besteffort.slice/kubepods-besteffort-pod{pod_uid}.slice/blkio.throttle.write_iops_devicereadBPS:
/sys/fs/cgroup/blkio/kubepods.slice/kubepods-besteffort.slice/kubepods-besteffort-pod{pod_uid}.slice/blkio.throttle.read_bps_devicewriteBPS:
/sys/fs/cgroup/blkio/kubepods.slice/kubepods-besteffort.slice/kubepods-besteffort-pod{pod_uid}.slice/blkio.throttle.write_bps_device
Pasang disk sebagai volume yang diatur secara statis
Gunakan template berikut untuk membuat file bernama 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: FilesystemJalankan perintah berikut untuk membuat PV:
kubectl apply -f pv-static.yamlGunakan template berikut untuk membuat file 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-****Jalankan perintah berikut untuk membuat PVC:
kubectl apply -f pvc-static.yamlBuat file bernama nginx.yaml dan salin konten berikut ke dalam file:
Aplikasi menggunakan PVC yang Anda buat. PVC tersebut digunakan untuk menyediakan disk cloud secara statis sebagai volume.
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-pvcJalankan perintah berikut untuk membuat aplikasi:
kubectl apply -f nginx.yamlLihat batas perangkat blok untuk kontainer berdasarkan versi cgroup.
Jalankan perintah berikut untuk memeriksa versi cgroup:
stat -fc %T /sys/fs/cgroupJika keluarannya adalah
cgroup2fs, maka versinya adalah cgroup V2. Jika tidak, berarti cgroup V1.Lihat batas perangkat blok untuk kontainer berdasarkan versi cgroup.
cgroup V2
Anda perlu masuk ke host dan menggunakan UID Pod untuk menyusun path. Jalankan perintah berikut untuk memverifikasi bahwa batas telah diatur dengan benar:
/sys/fs/cgroup/kubepods.slice/kubepods-besteffort.slice/kubepods-besteffort-pod<UID>.slice/io.maxcgroup V1
Anda perlu masuk ke host dan menggunakan UID Pod untuk menyusun path. Jalankan perintah-perintah berikut untuk memverifikasi bahwa batas telah diatur dengan benar:
readIOPS:
/sys/fs/cgroup/blkio/kubepods.slice/kubepods-besteffort.slice/kubepods-besteffort-pod{pod_uid}.slice/blkio.throttle.read_iops_devicewriteIOPS:
/sys/fs/cgroup/blkio/kubepods.slice/kubepods-besteffort.slice/kubepods-besteffort-pod{pod_uid}.slice/blkio.throttle.write_iops_devicereadBPS:
/sys/fs/cgroup/blkio/kubepods.slice/kubepods-besteffort.slice/kubepods-besteffort-pod{pod_uid}.slice/blkio.throttle.read_bps_devicewriteBPS:
/sys/fs/cgroup/blkio/kubepods.slice/kubepods-besteffort.slice/kubepods-besteffort-pod{pod_uid}.slice/blkio.throttle.write_bps_device