All Products
Search
Document Center

Container Service for Kubernetes:Migrasi FlexVolume ke CSI untuk kluster tanpa data

Last Updated:Sep 16, 2026

Plugin penyimpanan FlexVolume telah ditinggalkan dan tidak lagi didukung untuk kluster baru. Untuk kluster yang sudah ada yang menggunakan plugin FlexVolume, kami menyarankan Anda melakukan migrasi ke plugin Container Storage Interface (CSI). Migrasi ini mencakup penguninstalan plugin FlexVolume, pemasangan plugin CSI, serta pembaruan konfigurasi kelompok node dan node yang sudah ada. Topik ini menjelaskan proses migrasi tersebut untuk kluster yang tidak memiliki data yang dikelola oleh FlexVolume.

Perbandingan plugin

Tabel berikut membandingkan plugin penyimpanan CSI dan FlexVolume.

Plugin

Komponen

Parameter kubelet

Referensi

CSI

  • CSI-Provisioner (Deployment)

    Mengelola pembuatan otomatis volume dan snapshot. Mendukung fitur seperti pemulihan data setelah penghapusan tidak sengaja dan penyimpanan Container Network File System (CNFS).

  • CSI-Plugin (DaemonSet)

    Mengelola pemasangan dan pelepasan volume secara otomatis. Mendukung berbagai jenis penyimpanan.

Plugin ini memerlukan parameter kubelet tertentu.

Atur parameter kubelet enable-controller-attach-detach menjadi true.

Penyimpanan

FlexVolume

  • Disk-Controller (Deployment)

    Mengelola pembuatan otomatis volume disk.

  • Flexvolume (DaemonSet)

    Mengelola pemasangan dan pelepasan volume.

Plugin ini memerlukan parameter kubelet tertentu.

Atur parameter kubelet enable-controller-attach-detach menjadi false.

Ikhtisar FlexVolume

Kasus penggunaan

Plugin CSI lebih stabil dan efisien dibandingkan plugin FlexVolume. Kami menyarankan Anda melakukan migrasi dari plugin FlexVolume ke plugin CSI jika kluster Anda memenuhi salah satu kondisi berikut:

  • Tidak ada volume yang telah dipasang di kluster menggunakan FlexVolume.

  • Volume sebelumnya dipasang menggunakan FlexVolume, tetapi data terkaitnya telah dihapus.

Langkah 1: Uninstal FlexVolume

  1. Masuk ke Konsol OpenAPI Explorer dan panggil operasi UnInstallClusterAddons untuk menguninstal plugin FlexVolume.

    • ClusterId: ID kluster Anda. Anda dapat menemukan ID kluster di halaman Basic Information kluster Anda.

    • name: Flexvolume.

    Untuk informasi selengkapnya, lihat Uninstal add-on kluster.

  2. Hapus Deployment alicloud-disk-controller dan alicloud-nas-controller.

    kubectl delete deploy -n kube-system alicloud-disk-controller alicloud-nas-controller
  3. Verifikasi bahwa plugin FlexVolume telah diuninstal.

    kubectl get pods -n kube-system | grep 'flexvolume\|alicloud-disk-controller\|alicloud-nas-controller'

    Jika perintah tidak menghasilkan output apa pun, berarti plugin FlexVolume telah diuninstal.

  4. Hapus sumber daya StorageClass FlexVolume. Provisioner untuk sumber daya ini adalah alicloud/disk.

    kubectl delete storageclass alicloud-disk-available alicloud-disk-efficiency alicloud-disk-essd alicloud-disk-ssd

    Output yang diharapkan:

    storageclass.storage.k8s.io "alicloud-disk-available" deleted
    storageclass.storage.k8s.io "alicloud-disk-efficiency" deleted
    storageclass.storage.k8s.io "alicloud-disk-essd" deleted
    storageclass.storage.k8s.io "alicloud-disk-ssd" deleted

    Output tersebut menunjukkan bahwa StorageClass telah dihapus.

Langkah 2: Instal CSI

  • Jika kluster Anda menggunakan plugin csi-compatible-controller, plugin CSI kustom telah terinstal. Plugin ini bukan plugin CSI standar. Anda harus menghapus komponen CSI kustom dengan menjalankan perintah berikut sebelum menginstal plugin CSI standar.

    kubectl delete deploy csi-provisioner -n kube-system
    kubectl delete ds csi-plugin -n kube-system
    kubectl delete csidriver diskplugin.csi.alibabacloud.com nasplugin.csi.alibabacloud.com ossplugin.csi.alibabacloud.com
    Catatan

    Operasi penghapusan ini tidak memengaruhi Pod yang sudah ada di kluster. Namun, setelah Anda menghapus komponen kustom dan sebelum menginstal plugin CSI standar, jangan melakukan perubahan pada Pod mana pun.

  • Jika plugin csi-compatible-controller tidak digunakan, Anda dapat langsung memanggil OpenAPI untuk menginstal plugin CSI standar.

  1. Masuk ke Konsol OpenAPI Explorer dan panggil operasi InstallClusterAddons untuk menginstal plugin CSI.

    • ClusterId: ID kluster Anda.

    • name: csi-provisioner.

    • version: Versi terbaru plugin CSI. Untuk informasi selengkapnya tentang versi CSI, lihat csi-provisioner.

    Untuk informasi selengkapnya, lihat Instal add-on kluster.

  2. Verifikasi bahwa plugin CSI berjalan dengan benar.

    kubectl get pods -n kube-system | grep csi

    Output yang diharapkan:

    csi-plugin-577mm                              4/4     Running   0          3d20h
    csi-plugin-k9mzt                              4/4     Running   0          41d
    csi-provisioner-6b58f46989-8wwl5              9/9     Running   0          41d
    csi-provisioner-6b58f46989-qzh8l              9/9     Running   0          6d20h

    Output tersebut menunjukkan bahwa plugin CSI berjalan sesuai harapan.

Langkah 3: Ubah konfigurasi kelompok node

Konfigurasi kelompok node bergantung pada komponen penyimpanan kluster. Setelah Anda menginstal komponen CSI standar, konfigurasi kelompok node yang sudah ada tidak diperbarui secara otomatis. Anda harus memodifikasi konfigurasi kelompok node secara manual untuk memicu pembaruan. Setelah pembaruan berhasil, parameter kubelet --enable-controller-attach-detach untuk node baru dalam kelompok node tersebut diperbarui dari false menjadi true.

Penting

Memodifikasi konfigurasi kelompok node secara manual akan merestart kubelet pada node dalam kelompok tersebut. Kami menyarankan Anda melakukan operasi ini pada jam sepi. Setelah memastikan satu kelompok node telah diperbarui dengan benar, perbarui kelompok node lainnya secara bertahap.

Untuk memicu pembaruan, Anda dapat memodifikasi semua kelompok node dengan menambahkan tipe instans atau mengubah kata sandi logon. Tindakan ini memperbarui jenis plugin penyimpanan di backend, memicu refresh skrip inisialisasi node, dan memastikan node baru dikonfigurasi dengan parameter yang benar.

Catatan

Sebagai alternatif, Anda dapat membuat kelompok node baru, lalu secara bertahap mengurangi skala dan menghapus kelompok lama. Jika menggunakan metode ini, Anda dapat melewati langkah-langkah berikut.

  1. Masuk ke Konsol ACK. Di panel navigasi kiri, klik Clusters.

  2. Di halaman Clusters, klik nama kluster Anda. Di panel navigasi kiri, klik Nodes > Node Pools.

  3. Di halaman Node Pools, temukan kelompok node target dan klik Edit di kolom Actions.

  4. Di kotak dialog yang muncul, ubah konfigurasi tipe instans kelompok node tersebut dan klik OK.

    Catatan

    Modifikasi ini hanya memicu pembaruan jenis plugin penyimpanan di backend. Setelah pembaruan diterapkan, Anda dapat mengembalikan perubahan ini.

Langkah 4: Ubah konfigurasi node yang sudah ada

Terapkan YAML berikut untuk memperbarui parameter kubelet agar memenuhi persyaratan CSI. DaemonSet ini mengatur parameter --enable-controller-attach-detach menjadi true pada node yang sudah ada. Setelah operasi selesai, Anda dapat menghapus DaemonSet tersebut.

Penting

Penerapan YAML berikut akan merestart kubelet pada setiap node. Evaluasi dampak potensial terhadap beban kerja Anda sebelum melanjutkan.

kind: DaemonSet
apiVersion: apps/v1
metadata:
  name: kubelet-set
spec:
  selector:
    matchLabels:
      app: kubelet-set
  template:
    metadata:
      labels:
        app: kubelet-set
    spec:
      tolerations:
        - operator: "Exists"
      hostNetwork: true
      hostPID: true
      containers:
        - name: kubelet-set
          securityContext:
            privileged: true
            capabilities:
              add: ["SYS_ADMIN"]
            allowPrivilegeEscalation: true
          image: registry.cn-hangzhou.aliyuncs.com/acs/csi-plugin:v1.26.5-56d1e30-aliyun
          imagePullPolicy: "Always"
          env:
          - name: enableADController
            value: "true"
          command: ["sh", "-c"]
          args:
          - echo "Starting kubelet flag set to $enableADController";
            ifFlagTrueNum=`cat /host/etc/systemd/system/kubelet.service.d/10-kubeadm.conf | grep enable-controller-attach-detach=$enableADController | grep -v grep | wc -l`;
            echo "ifFlagTrueNum is $ifFlagTrueNum";
            if [ "$ifFlagTrueNum" = "0" ]; then
                curValue="true";
                if [ "$enableADController" = "true" ]; then
                    curValue="false";
                fi;
                sed -i "s/enable-controller-attach-detach=$curValue/enable-controller-attach-detach=$enableADController/" /host/etc/systemd/system/kubelet.service.d/10-kubeadm.conf;
                restartKubelet="true";
                echo "current value is $curValue, change to expect "$enableADController;
            fi;
            if [ "$restartKubelet" = "true" ]; then
                /nsenter --mount=/proc/1/ns/mnt systemctl daemon-reload;
                /nsenter --mount=/proc/1/ns/mnt service kubelet restart;
                echo "restart kubelet";
            fi;
            while true;
            do
                sleep 5;
            done;
          volumeMounts:
          - name: etc
            mountPath: /host/etc
      volumes:
        - name: etc
          hostPath:
            path: /etc

Langkah selanjutnya

Setelah migrasi selesai, Anda dapat memverifikasi bahwa plugin CSI berfungsi dengan benar dengan membuat volume disk yang disediakan secara dinamis. Untuk informasi selengkapnya, lihat Gunakan volume disk yang disediakan secara dinamis.