FlexVolume est obsolète dans Container Service for Kubernetes (ACK) et n'est plus disponible dans les nouveaux clusters. Migrez vos clusters existants de FlexVolume vers Container Storage Interface (CSI) pour bénéficier d'une stabilité améliorée, de la création automatique de snapshots, de la prise en charge du stockage Container Network File System (CNFS) et des capacités de restauration des données.
Ce guide concerne les clusters où aucune donnée n'est stockée via FlexVolume. Avant de commencer, assurez-vous que l'une des conditions suivantes est remplie :
Aucun volume n'a été monté via FlexVolume.
Toutes les données des volumes gérés par FlexVolume ont été supprimées.
Si votre cluster utilise encore des volumes gérés par FlexVolume contenant des données actives, migrez d'abord ces volumes.
Prérequis
Un cluster ACK utilisant le plug-in FlexVolume
kubectlconfiguré pour accéder au clusterAccès à la console OpenAPI Explorer avec les autorisations nécessaires pour appeler les opérations API ACK
Comparaison entre FlexVolume et CSI
| Élément | FlexVolume | CSI |
|---|---|---|
| Contrôleur | Disk-Controller (Deployment) -- création automatique de volumes | CSI-Provisioner (Deployment) -- création automatique de volumes, création de snapshots, stockage CNFS et restauration des données |
| Agent de nœud | FlexVolume (DaemonSet) -- montage et démontage de volumes | CSI-Plugin (DaemonSet) -- montage et démontage de volumes avec plusieurs types de volumes de disque |
| Paramètre kubelet | enable-controller-attach-detach=true |
enable-controller-attach-detach=true |
| Référence | Présentation de FlexVolume | Stockage |
Étape 1 : Désinstaller FlexVolume
-
Connectez-vous à la console OpenAPI Explorer et appelez l'opération UnInstallClusterAddons. Définissez les paramètres suivants. Pour plus d'informations, consultez la rubrique Désinstaller des composants d'un cluster.
Paramètre Valeur ClusterId ID de votre cluster. Vous pouvez le trouver dans l'onglet Basic Information de la page des détails du cluster. name flexvolume -
Supprimez les ressources Deployment alicloud-disk-controller et alicloud-nas-controller :
kubectl delete deploy -n kube-system alicloud-disk-controller alicloud-nas-controller -
Vérifiez que FlexVolume est entièrement supprimé. Si la commande ne renvoie aucun résultat, tous les composants FlexVolume ont été supprimés.
kubectl get pods -n kube-system | grep 'flexvolume\|alicloud-disk-controller\|alicloud-nas-controller' -
Supprimez les ressources StorageClass FlexVolume. Elles utilisent le provisionneur
alicloud/disk. Résultat attendu :kubectl delete storageclass alicloud-disk-available alicloud-disk-efficiency alicloud-disk-essd alicloud-disk-ssdstorageclass.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
Étape 2 : Installer le plug-in CSI
Avant d'installer le plug-in CSI standard, vérifiez si le plug-in csi-compatible-controller existe dans le cluster.
Supprimer csi-compatible-controller (si installé)
Si le cluster possède déjà un plug-in CSI personnalisé, supprimez-le avant d'installer la version standard :
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
La suppression du plug-in CSI personnalisé n'affecte pas les pods existants. Toutefois, après avoir supprimé le plug-in CSI personnalisé, les pods du cluster ne peuvent pas être modifiés tant que le plug-in CSI standard n'est pas installé.
Installer le plug-in CSI standard
-
Connectez-vous à la console OpenAPI Explorer et appelez l'opération InstallClusterAddons. Définissez les paramètres suivants. Pour plus d'informations, consultez la rubrique Installer un composant dans un cluster ACK.
Paramètre Valeur ClusterId ID de votre cluster name csi-provisionerversion La dernière version est automatiquement spécifiée. Pour plus d'informations sur les versions CSI, consultez la rubrique csi-provisioner. -
Vérifiez que le plug-in CSI est en cours d'exécution. Résultat attendu : Si le résultat précédent s'affiche, le plug-in CSI fonctionne comme prévu dans le cluster.
kubectl get pods -n kube-system | grep csicsi-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
Étape 3 : Mettre à jour les configurations du pool de nœuds
Après l'installation du plug-in CSI, les configurations existantes du pool de nœuds ne sont pas mises à jour automatiquement. Déclenchez manuellement une mise à jour afin que les nouveaux nœuds ajoutés utilisent les paramètres kubelet corrects.
Cette opération redémarre kubelet sur les nœuds concernés. Effectuez-la pendant les heures creuses. Terminez la mise à jour sur un pool de nœuds et vérifiez-la avant de mettre à jour le suivant.
Déclenchez la mise à jour en apportant une modification de configuration à chaque pool de nœuds, par exemple en ajoutant un nouveau type d'instance ou en modifiant le mot de passe de connexion. Le système régénère ainsi le script d'initialisation des nœuds en arrière-plan.
Vous pouvez également créer un nouveau pool de nœuds et réduire le nombre de nœuds de tous les pools d'origine, puis supprimer les anciens pools de nœuds. Si vous optez pour cette approche, ignorez les étapes suivantes et passez directement à l'Étape 4.
Connectez-vous à la console ACK. Dans le volet de navigation de gauche, cliquez sur Clusters.
Sur la page Clusters, recherchez votre cluster et cliquez sur son nom. Dans le volet de navigation de gauche, choisissez Nodes > Node Pools.
Sur la page Node Pools, recherchez le pool de nœuds cible et cliquez sur Edit dans la colonne Actions.
Dans la boîte de dialogue, modifiez une valeur de configuration (par exemple, ajoutez un type d'instance), puis cliquez sur Confirm. > Remarque : Cette modification déclenche une mise à jour en arrière-plan de la configuration du plug-in de volume. Une fois la modification effective, revenez aux paramètres d'origine si nécessaire.
Répétez l'opération pour chaque pool de nœuds du cluster.
Étape 4 : Mettre à jour kubelet sur les nœuds existants
Déployez le DaemonSet suivant pour définir le paramètre kubelet --enable-controller-attach-detach sur true sur tous les nœuds existants. Une fois tous les nœuds mis à jour, supprimez le DaemonSet.
Ce DaemonSet redémarre kubelet sur chaque nœud. Évaluez l'impact sur les charges de travail en cours d'exécution avant de l'appliquer.
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
Une fois que tous les pods du DaemonSet atteignent l'état Running et que le paramètre kubelet est mis à jour, supprimez le DaemonSet :
kubectl delete ds kubelet-set
Étapes suivantes
Une fois la migration terminée, vérifiez que le plug-in CSI fonctionne correctement en créant un volume de disque approvisionné dynamiquement. Pour obtenir des instructions, consultez la rubrique Utiliser un volume de disque approvisionné dynamiquement.