FlexVolume sudah tidak digunakan lagi di Container Service for Kubernetes (ACK) dan tidak didukung di kluster ACK baru. Kami menyarankan Anda memigrasikan FlexVolume di kluster ACK yang ada ke Container Storage Interface (CSI). Untuk migrasi ini, Anda dapat menguninstall FlexVolume lalu menginstal plugin CSI, serta memodifikasi konfigurasi kelompok node atau node yang ada. Topik ini menjelaskan cara memigrasikan FlexVolume ke CSI untuk kluster tanpa data tersimpan.
Perbedaan antara FlexVolume dan CSI
Tabel berikut menggambarkan perbedaan antara CSI dan FlexVolume.
Plug-in | Komponen | Parameter kubelet | Referensi |
CSI |
| Parameter kubelet yang diperlukan oleh plugin CSI berbeda dari yang diperlukan oleh plugin FlexVolume. Untuk menjalankan plugin CSI, Anda harus mengatur parameter kubelet | |
FlexVolume |
| Parameter kubelet yang diperlukan oleh plugin FlexVolume berbeda dari yang diperlukan oleh plugin CSI. Untuk menjalankan plugin FlexVolume, Anda harus mengatur parameter kubelet |
Skenario
Plugin CSI lebih stabil dan efisien dibandingkan dengan plugin FlexVolume. Dalam skenario berikut, kami menyarankan Anda memigrasikan FlexVolume ke CSI:
Tidak ada volume yang telah dipasang menggunakan FlexVolume dan tidak ada data yang disimpan di kluster menggunakan FlexVolume.
Volume telah dipasang menggunakan FlexVolume tetapi data relevan dalam volume tersebut telah dihapus. Tidak ada data yang tersimpan di kluster menggunakan FlexVolume.
Langkah 1: Uninstall FlexVolume
Masuk ke Konsol OpenAPI Explorer dan panggil operasi UnInstallClusterAddons untuk menguninstall plugin FlexVolume.
ClusterId: Atur nilainya menjadi ID kluster Anda. Anda dapat melihat ID kluster di tab Basic Information halaman detail kluster Anda.
name: Atur nilainya menjadi FlexVolume.
Untuk informasi lebih lanjut, lihat Uninstall Komponen dari Kluster.
Jalankan perintah berikut untuk menghapus komponen alicloud-disk-controller dan alicloud-nas-controller:
kubectl delete deploy -n kube-system alicloud-disk-controller alicloud-nas-controllerJalankan perintah berikut untuk memeriksa apakah plugin FlexVolume telah di-uninstall dari kluster Anda:
kubectl get pods -n kube-system | grep 'flexvolume\|alicloud-disk-controller\|alicloud-nas-controller'Jika tidak ada output yang ditampilkan, plugin FlexVolume telah di-uninstall dari kluster Anda.
Jalankan perintah berikut untuk menghapus StorageClass yang menggunakan FlexVolume dari kluster. Provisioner dari StorageClass yang menggunakan FlexVolume 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" deletedJika output di atas ditampilkan, StorageClass telah dihapus dari kluster Anda.
Langkah 2: Instal plugin CSI
Jika Anda menggunakan plugin csi-compatible-controller di kluster, plugin CSI sudah terinstal di kluster tersebut. Namun, plugin CSI ini adalah plugin CSI kustom, bukan plugin CSI standar. Anda harus menjalankan perintah berikut untuk menghapus plugin CSI kustom 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.comCatatanSaat Anda menghapus plugin CSI kustom dari kluster, pod yang ada di kluster tidak terpengaruh. Namun, setelah plugin CSI kustom dihapus, pod di kluster tidak dapat diubah hingga plugin CSI standar diinstal.
Jika Anda tidak menggunakan plugin csi-compatible-controller di kluster, Anda dapat memanggil operasi API untuk menginstal plugin CSI standar.
Masuk ke Konsol OpenAPI Explorer dan panggil InstallClusterAddons untuk menginstal plugin CSI.
ClusterId: Atur nilainya menjadi ID kluster Anda.
name: Atur nilainya menjadi csi-provisioner.
version: Versi terbaru akan ditentukan secara otomatis. Untuk informasi lebih lanjut tentang versi CSI, lihat csi-provisioner.
Untuk informasi lebih lanjut tentang cara menginstal plugin CSI, lihat Instal Komponen di Kluster ACK.
Jalankan perintah berikut untuk memeriksa apakah plugin CSI berjalan sesuai harapan di kluster Anda:
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 6d20hJika output di atas ditampilkan, plugin CSI berjalan sesuai harapan di kluster.
Langkah 3: Modifikasi konfigurasi semua kelompok node di kluster
Konfigurasi kelompok node berubah setelah plugin volume kluster berubah. Setelah Anda menginstal plugin CSI standar baru di kluster Anda, konfigurasi kelompok node asli di kluster tidak otomatis berubah. Dalam kasus ini, Anda perlu memperbarui konfigurasi kelompok node ini secara manual. Jika pembaruan berhasil, parameter kubelet --enable-controller-attach-detach diatur menjadi true pada node yang baru ditambahkan.
Memodifikasi konfigurasi kelompok node secara manual memicu kubelet untuk restart. Kami menyarankan Anda melakukan operasi ini selama jam-jam sepi dan memastikan bahwa pembaruan pada satu kelompok node benar sebelum memperbarui kelompok node lainnya.
Anda dapat memodifikasi konfigurasi setiap kelompok node untuk memperbarui plugin volume dengan menambahkan tipe instans baru atau mengubah kata sandi logon. Dengan cara ini, sistem secara otomatis memperbarui skrip inisialisasi node di latar belakang untuk memastikan bahwa node yang baru ditambahkan menggunakan konfigurasi baru.
Sebagai alternatif, Anda dapat membuat kelompok node baru dan menskalakan semua node di kelompok node asli hingga kelompok node lama dihapus. Kemudian, gunakan langsung kelompok node baru. Jika Anda menggunakan metode ini, Anda tidak perlu melakukan langkah-langkah berikut.
Masuk ke Konsol ACK. Di panel navigasi di sebelah kiri, klik Clusters.
Di halaman Clusters, temukan kluster yang ingin dikelola dan klik namanya. Di panel navigasi di sebelah kiri, pilih .
Di halaman Node Pools, temukan kelompok node target dan klik Edit di kolom Actions.
Di kotak dialog yang muncul, modifikasi konfigurasi kelompok node, lalu klik Confirm.
CatatanModifikasi ini dimaksudkan untuk memicu pembaruan plugin volume kluster di latar belakang. Setelah perubahan konfigurasi kelompok node mulai berlaku, Anda dapat kembali ke pengaturan semula.
Langkah 4: Modifikasi konfigurasi node yang ada
Gunakan template YAML berikut untuk memodifikasi parameter Kubelet agar kompatibel dengan plugin CSI. DaemonSet ini dapat mengubah nilai parameter kubelet --enable-controller-attach-detach dari node yang ada menjadi true. Setelah langkah ini selesai, DaemonSet dapat dihapus.
Saat Anda menerapkan file YAML, kubelet di-restart. Kami menyarankan Anda mengevaluasi dampak pada aplikasi sebelum menerapkan file YAML.
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: /etcApa yang harus dilakukan selanjutnya
Setelah memigrasikan FlexVolume ke CSI, Anda dapat memeriksa apakah plugin CSI berjalan sesuai harapan dengan menggunakan plugin CSI untuk membuat volume disk yang diaprovisi secara dinamis. Untuk informasi lebih lanjut, lihat Gunakan Volume Disk yang Diprovisi Secara Dinamis.