Le plug-in de stockage FlexVolume est obsolète et n'est plus pris en charge pour les nouveaux clusters. Pour les clusters existants utilisant le plug-in FlexVolume, nous vous recommandons de migrer vers le plug-in Container Storage Interface (CSI). La migration consiste à désinstaller le plug-in FlexVolume, installer le plug-in CSI et mettre à jour les configurations des pools de nœuds et des nœuds existants. Cette rubrique décrit ce processus de migration pour les clusters ne contenant aucune donnée gérée par FlexVolume.
Comparaison des plug-ins
Le tableau suivant compare les plug-ins de stockage CSI et FlexVolume.
|
Plug-in |
Composants |
Paramètre Kubelet |
Références |
|
CSI |
|
Le plug-in nécessite un paramètre kubelet spécifique. Définissez le paramètre kubelet |
|
|
FlexVolume |
|
Le plug-in nécessite un paramètre kubelet spécifique. Définissez le paramètre kubelet |
Cas d'utilisation
Le plug-in CSI est plus stable et plus efficace que le plug-in FlexVolume. Nous vous recommandons de migrer du plug-in FlexVolume vers le plug-in CSI si votre cluster répond à l'une des conditions suivantes :
Aucun volume n'a été monté dans le cluster à l'aide de FlexVolume.
Des volumes ont été précédemment montés à l'aide de FlexVolume, mais leurs données associées ont été supprimées.
Étape 1 : Désinstaller FlexVolume
-
Connectez-vous à la console OpenAPI Explorer et appelez l'opération UnInstallClusterAddons pour désinstaller le plug-in FlexVolume.
ClusterId : ID de votre cluster. Vous trouverez l'ID du cluster sur la page Basic Information de votre cluster.
name : Flexvolume.
Pour plus d'informations, consultez la rubrique Désinstaller les modules complémentaires du cluster.
-
Supprimez les déploiements alicloud-disk-controller et alicloud-nas-controller.
kubectl delete deploy -n kube-system alicloud-disk-controller alicloud-nas-controller -
Vérifiez que le plug-in FlexVolume est désinstallé.
kubectl get pods -n kube-system | grep 'flexvolume\|alicloud-disk-controller\|alicloud-nas-controller'Si la commande ne renvoie aucune sortie, le plug-in FlexVolume est désinstallé.
-
Supprimez les ressources StorageClass FlexVolume. Le provisioner de ces ressources est alicloud/disk.
kubectl delete storageclass alicloud-disk-available alicloud-disk-efficiency alicloud-disk-essd alicloud-disk-ssdSortie attendue :
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" deletedLa sortie indique que les StorageClasses sont supprimées.
Étape 2 : Installer CSI
-
Si votre cluster utilise le plug-in csi-compatible-controller, un plug-in CSI personnalisé est déjà installé. Ce plug-in n'est pas le plug-in CSI standard. Supprimez les composants CSI personnalisés en exécutant les commandes suivantes avant d'installer le plug-in CSI 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.comRemarqueCes opérations de suppression n'affectent pas les pods existants dans le cluster. Toutefois, après avoir supprimé les composants personnalisés et avant d'installer le plug-in CSI standard, n'apportez aucune modification aux pods.
Si le plug-in csi-compatible-controller n'est pas utilisé, appelez directement l'OpenAPI pour installer le plug-in CSI standard.
-
Connectez-vous à la console OpenAPI Explorer et appelez l'opération InstallClusterAddons pour installer le plug-in CSI.
ClusterId : ID de votre cluster.
name : csi-provisioner.
version : Dernière version du plug-in CSI. Pour plus d'informations sur les versions de CSI, consultez la rubrique csi-provisioner.
Pour plus d'informations, consultez la rubrique Installer les modules complémentaires du cluster.
-
Vérifiez que le plug-in CSI fonctionne correctement.
kubectl get pods -n kube-system | grep csiSortie attendue :
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 6d20hLa sortie indique que le plug-in CSI fonctionne comme prévu.
Étape 3 : Modifier les configurations du pool de nœuds
Les configurations du pool de nœuds dépendent des composants de stockage du cluster. Après l'installation des composants CSI standard, les configurations des pools de nœuds existants ne sont pas automatiquement mises à jour. Modifiez manuellement les configurations du pool de nœuds pour déclencher une mise à jour. Après une mise à jour réussie, le paramètre kubelet --enable-controller-attach-detach des nouveaux nœuds du pool de nœuds passe de false à true.
La modification manuelle de la configuration d'un pool de nœuds redémarre le kubelet sur les nœuds de ce pool. Nous vous recommandons d'effectuer cette opération pendant les heures creuses. Après avoir confirmé qu'un pool de nœuds est mis à jour correctement, mettez à jour les autres pools de nœuds par étapes.
Pour déclencher la mise à jour, modifiez tous les pools de nœuds en ajoutant un type d'instance ou en changeant le mot de passe de connexion. Cette action met à jour le type de plug-in de stockage dans le backend, déclenche l'actualisation du script d'initialisation des nœuds et garantit que les nouveaux nœuds sont configurés avec les paramètres corrects.
Vous pouvez également créer un nouveau pool de nœuds, puis réduire progressivement et supprimer les anciens pools. Si vous utilisez cette méthode, ignorez les étapes suivantes.
Connectez-vous à la console ACK. Dans le volet de navigation de gauche, cliquez sur Clusters.
Sur la page Clusters, cliquez sur le nom de votre cluster. Dans le volet de navigation de gauche, cliquez sur .
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 qui s'affiche, modifiez la configuration du type d'instance du pool de nœuds et cliquez sur OK.
RemarqueCette modification déclenche uniquement une mise à jour du type de plug-in de stockage dans le backend. Une fois la mise à jour effective, vous pouvez annuler cette modification.
Étape 4 : Modifier les configurations des nœuds existants
Appliquez le fichier YAML suivant pour mettre à jour les paramètres kubelet afin de répondre aux exigences de CSI. Ce DaemonSet définit le paramètre --enable-controller-attach-detach sur true sur les nœuds existants. Une fois l'opération terminée, supprimez le DaemonSet.
L'application du fichier YAML suivant redémarre le kubelet sur chaque nœud. Évaluez l'impact potentiel sur vos charges de travail avant de continuer.
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
É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 plus d'informations, consultez la rubrique Utiliser un volume de disque approvisionné dynamiquement.