Menggunakan Alibaba Cloud Distributed Storage di Klaster K8S Mandiri

Pendahuluan

Artikel ini ditanggal 2024.06.14, memperkenalkan cara menggunakan Alibaba Cloud Distributed Storage di klaster mandiri Alibaba Cloud, dan dilengkapi tautan dokumentasi di akhir. Dokumentasi resmi Alibaba Cloud berbahasa Cina, namun plugin penyimpanan Alibaba Cloud di GitHub saat ini hanya memiliki dokumentasi bahasa Inggris. Disarankan bagi pembaca yang memiliki kemampuan untuk membaca dokumen aslinya.

Instalasi Plugin Penyimpanan

  1. Buat kebijakan izin kustom: https://github.com/kubernetes-sigs/alibaba-cloud-csi-driver/blob/master/docs/ram-policies/disk.json
  2. Buat peran RAM, berikan kebijakan izin kustom, simpan sementara accesskey dan secret
    1. kubectl create secret -n kube-system generic csi-access-key --from-literal=id='{id}' --from-literal=secret='{secret}'
  3. Instal driver CSI, tidak ada helm chart, hanya bisa instalasi lokal (20240613).
    1. git clone https://github.com/kubernetes-sigs/alibaba-cloud-csi-driver.git
    2. cd alibaba-cloud-csi-driver/deploy
    3. Jika diinstal di klaster mandiri pada ECS Alibaba Cloud, bisa langsung menjalankan perintah berikut, jika tidak, silakan baca sendiri: https://github.com/kubernetes-sigs/alibaba-cloud-csi-driver/blob/master/docs/install.md
    4. helm upgrade --install alibaba-cloud-csi-driver ./chart --values chart/values-ecs.yaml --namespace kube-system
  4. Verifikasi, watch kubectl get pods -n kube-system -l app=csi-plugin

Referensi Pemilihan Tipe Penyimpanan

  • Kapasitas minimum pembuatan ECS Cloud Disk adalah 20GB, IOPS 3000, kapasitas ini relatif besar, tidak terlalu menguntungkan.
    • Volume penyimpanan dinamis Cloud Disk
      • Dokumentasi resmi:
        • Cloud Disk tidak mendukung penggunaan lintas zona ketersediaan, merupakan penyimpanan non-shared, dan hanya bisa di-mount oleh satu Pod secara bersamaan. (Uji coba nyata: bisa di-mount oleh beberapa pod dari deployment yang sama)
        • Tipe Cloud Disk dan tipe ECS harus cocok agar bisa di-mount, jika tidak akan gagal. Hubungan pencocokan tipe Cloud Disk dan tipe ECS, silakan lihat Keluarga Spesifikasi Instance.
        • Saat deploy aplikasi, melalui StorageClass otomatis membuat PV membeli Cloud Disk. Jika sudah membeli Cloud Disk, disarankan menggunakan volume penyimpanan statis Cloud Disk.
        • Ukuran Cloud Disk yang diminta tidak boleh melebihi rentang kapasitas single disk Cloud Disk.
        • Saat Pod dibangun ulang, akan me-mount ulang Cloud Disk asli. Jika karena batasan lain tidak bisa dijadwalkan ke zona ketersediaan asli, Pod akan berada di status Pending.
        • Cloud Disk yang dibuat secara dinamis adalah Cloud Disk bayar sesuai pemakaian
      • Ringkasan pengujian lain:
        • Meskipun Cloud Disk bisa di-mount oleh beberapa pod, hanya satu pod yang bisa baca-tulis, pod lain tidak bisa baca-tulis. Oleh karena itu accessModes di pvc hanya bisa disetel ke ReadWriteOnce, mengubahnya tidak akan mendapat hasil yang benar.
        • Jika reclaimPolicy StorageClass disetel ke Delete, maka saat menghapus PVC, Cloud Disk juga bisa dihapus otomatis.
        • Jika reclaimPolicy StorageClass disetel ke Retain, maka saat menghapus PVC, Cloud Disk tidak akan dihapus otomatis, perlu dihapus manual di klaster dan konsol Alibaba Cloud.
      • Sulit menemukan skenario penggunaan yang cocok.
    • Volume penyimpanan statis Cloud Disk
      • Dokumentasi resmi:
        • Membuat PV dan PVC secara manual
        • Cloud Disk tidak mendukung penggunaan lintas zona ketersediaan, merupakan penyimpanan non-shared, dan hanya bisa di-mount oleh satu Pod secara bersamaan.
        • Tipe Cloud Disk dan tipe ECS harus cocok agar bisa di-mount, jika tidak akan gagal.
        • Bisa memilih Cloud Disk yang berada di wilayah dan zona ketersediaan yang sama dengan klaster dan dalam status menunggu mount.
  • NAS memiliki latensi operasi yang besar, ekspresi terbaik 2ms, penyimpanan dalam 10ms, bayar sesuai pemakaian, performa baca-tulis relatif terhadap Object Storage OSS lebih tinggi
  • Volume penyimpanan OSS, https://help.aliyun.com/zh/ack/ack-managed-and-ack-dedicated/user-guide/oss-volume-overview-1?spm=a2c4g.11186623.0.0.43166a351NbtvU
    • OSS adalah penyimpanan shared, bisa menyediakan layanan penyimpanan shared untuk beberapa Pod secara bersamaan.
    • (20240613) Saat ini mendukung sistem operasi CentOS、Alibaba Cloud Linux、ContainerOS dan OpenAnolis.
    • Saat menggunakan volume data, setiap aplikasi menggunakan nama PV independen.
    • Volume data OSS menggunakan sistem file FUSE yang di-mount melalui file ossfs.
      • Cocok untuk skenario baca file. Contoh: baca file konfigurasi、video、file gambar dll.
      • Tidak cocok untuk skenario aplikasi tulis file. Jika perlu menulis file, disarankan menggunakan SDK implementasi operasi tulis atau menggunakan layanan volume penyimpanan NAS.
    • ossfs bisa mengoptimalkan performa di aspek cache、izin dll melalui penyesuaian parameter konfigurasi
    • Batasan penggunaan ossfs
      • Operasi tulis file acak atau append akan menyebabkan semua file ditulis ulang.
      • Karena perlu akses remote ke server OSS, performa operasi metadata seperti list directory relatif buruk.
      • Operasi rename file、folder bukan bersifat atomik.
      • Beberapa klien me-mount OSS Bucket yang sama, bergantung pada pengguna sendiri mengoordinasikan perilaku masing-masing klien, misalnya menghindari beberapa klien menulis file yang sama dll.
      • Tidak mendukung hard link.
      • Saat versi CSI plugin di bawah v1.20.7, hanya mendeteksi modifikasi lokal, tidak bisa mendeteksi modifikasi eksternal dari klien atau alat lain.
      • Untuk menghindari peningkatan beban sistem, jangan gunakan di skenario baca-tulis high concurrency.
  • Jika klaster campuran (sebagian node bukan milik Alibaba Cloud), hanya bisa menggunakan NAS dan OSS volume statis.
  • Cloud Disk、NAS dan OSS semuanya memiliki batasan wilayah.

Ringkasan, Cloud Disk mengajukan dan me-mount dalam bentuk keseluruhan hard disk, tidak nyaman untuk sharing. OSS granularitas operasi sampai file, high concurrency baca-tulis ada masalah performa, dan sistem yang didukung terbatas.

  • Cloud Disk cocok untuk database dll skenario butuh ruang besar dan performa tinggi
  • Lainnya dengan kebutuhan performa tidak tinggi bisa pilih NAS
  • OSS tidak cocok untuk skenario high concurrency tulis klaster Alibaba Cloud, bisa diterapkan pada skenario concurrency baca.

Dokumentasi resmi Alibaba Cloud ada masalah lokasi tidak terpusat dan saling bertentangan, pembaca perlu menilai sendiri berdasarkan tanggal dokumen, beberapa deklarasi tidak mendukung fitur seiring update versi mungkin sudah didukung, perlu mencoba sendiri.

Langkah Operasi

Ini adalah dokumen panduan resmi Alibaba Cloud, setelah menginstal plugin penyimpanan Alibaba Cloud sesuai panduan di atas, bisa mengikuti Menggunakan NAS Volume Penyimpanan Statis untuk deploy test.

Perhatian: Pengguna k3s akan menghadapi masalah local-path-storage, pesan error mungkin ada,

  • failed to provision volume with StorageClass “local-path”: claim.Spec.Selector is not supported
  • Waiting for a volume to be created either by the external provisioner ’localplugin.csi.alibabacloud.com’ or manually by the system administrator. If volume creation is delayed, please verify that the provisioner is running and correctly registered.

Perlu menyetel storageClassName dari persistentVolumeClaim ke kosong, menghindari penggunaan local-path-storage default k3s.

kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: pvc-nas
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 2Gi
  selector:
    matchLabels:
      alicloud-pvname: pv-nas
  storageClassName: ""

Referensi