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 |
|
Plugin ini memerlukan parameter kubelet tertentu. Atur parameter kubelet |
|
|
FlexVolume |
|
Plugin ini memerlukan parameter kubelet tertentu. Atur parameter kubelet |
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
-
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.
-
-
Hapus Deployment alicloud-disk-controller dan alicloud-nas-controller.
kubectl delete deploy -n kube-system alicloud-disk-controller alicloud-nas-controller -
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.
-
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-ssdOutput 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" deletedOutput 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.comCatatanOperasi 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.
-
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.
-
-
Verifikasi bahwa plugin CSI berjalan dengan benar.
kubectl get pods -n kube-system | grep csiOutput 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 6d20hOutput 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.
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.
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.
-
Masuk ke Konsol ACK. Di panel navigasi kiri, klik Clusters.
-
Di halaman Clusters, klik nama kluster Anda. Di panel navigasi kiri, klik .
-
Di halaman Node Pools, temukan kelompok node target dan klik Edit di kolom Actions.
-
Di kotak dialog yang muncul, ubah konfigurasi tipe instans kelompok node tersebut dan klik OK.
CatatanModifikasi 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.
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.