Vous pouvez utiliser le centre de sauvegarde pour migrer des applications d'un cluster utilisant le plug-in FlexVolume vers un cluster utilisant le plug-in Container Storage Interface (CSI). Vous pouvez également migrer des applications d'un ancien cluster Kubernetes vers un nouveau. Le centre de sauvegarde résout les problèmes qui surviennent lors de la migration d'applications entre des clusters dotés de plug-ins de stockage ou de versions Kubernetes différents. Par exemple, il permet de sauvegarder des ressources au niveau du cluster qui ne sont pas utilisées par les applications et d'utiliser automatiquement une version d'API compatible avec le cluster de restauration. Cette rubrique explique comment utiliser le centre de sauvegarde pour migrer des applications, en prenant pour exemple la migration d'une application d'un cluster utilisant FlexVolume et exécutant Kubernetes 1.16 vers un cluster utilisant CSI et exécutant Kubernetes 1.28.
Notes
Le cluster de sauvegarde et le cluster de restauration doivent se trouver dans la même région. Le cluster de sauvegarde doit exécuter Kubernetes 1.16 ou une version ultérieure. Pour éviter les problèmes de compatibilité des versions d'API, nous vous recommandons de ne pas utiliser le centre de sauvegarde pour migrer des applications d'une version Kubernetes plus récente vers une version plus ancienne.
Le centre de sauvegarde ne sauvegarde pas les ressources en cours de suppression.
Pour restaurer des données sur un volume Network Attached Storage (NAS) géré par Container Network File System (CNFS), vous devez créer un StorageClass si vous envisagez de définir le paramètre StorageClass sur alibabacloud-cnfs-nas lors de la restauration. Pour plus d'informations, consultez la rubrique Gérer les systèmes de fichiers NAS à l'aide de CNFS.
-
Lors de la restauration d'une application, les ressources sont prioritairement restaurées à l'aide de la version apiVersion recommandée pour la version Kubernetes du cluster de restauration. Si une ressource ne possède pas de version apiVersion prise en charge par les deux versions de cluster, vous devez déployer manuellement cette ressource. Par exemple :
Un Deployment dans un cluster Kubernetes 1.16 prend en charge les versions d'API
extensions/v1beta1,apps/v1beta1,apps/v1beta2etapps/v1. Lors de la restauration vers un cluster Kubernetes 1.28, il est restauré à l'aide de la versionapps/v1.Un Ingress dans un cluster Kubernetes 1.16 prend en charge les versions d'API
extensions/v1beta1etnetworking.k8s.io/v1beta1. Vous ne pouvez pas le restaurer directement dans un cluster exécutant Kubernetes 1.22 ou une version ultérieure.
Pour plus d'informations sur les modifications d'API entre les versions de Kubernetes, consultez les notes de publication d'ACK et le Guide de migration des API obsolètes.
ImportantDans un cluster Kubernetes 1.16, les groupes d'API tels que
appsetrbac.authorization.k8s.ioprennent déjà en charge la version v1. Lorsque vous migrez des applications vers un cluster Kubernetes 1.28, vous devez restaurer manuellement des ressources telles que Ingress et CronJob.
Cas d'utilisation
-
Migration d'applications entre plug-ins de stockage
Les clusters ACK exécutant Kubernetes 1.20 ou une version ultérieure ne prennent plus en charge le plug-in de stockage FlexVolume. Vous pouvez utiliser le centre de sauvegarde pour migrer des applications avec état d'un cluster FlexVolume vers un cluster CSI.
RemarqueVous pouvez migrer des applications depuis des clusters utilisant le plug-in de stockage FlexVolume ou CSI, mais le cluster de restauration doit utiliser le plug-in de stockage CSI.
-
Basculement entre clusters présentant des écarts de version Kubernetes importants
Dans certains scénarios, vous devrez peut-être migrer des services d'un ancien cluster Kubernetes (1.16 ou version ultérieure) vers un nouveau cluster. Par exemple, vous pourriez changer le plug-in réseau de Flannel à Terway. Le centre de sauvegarde prend en charge la migration d'applications entre des versions très différentes et ajuste automatiquement les configurations de base, telles que la version
apiVersiondans les modèles d'application, pour les adapter à la nouvelle version de Kubernetes.
Prérequis
Activer Cloud Backup. Lors de la sauvegarde de volumes persistants NAS, OSS ou de disques locaux, ainsi que dans les scénarios de cloud hybride, le centre de sauvegarde doit utiliser Cloud Backup pour la sauvegarde de fichiers.
-
Un cluster dans lequel le volume sera restauré a été créé. Pour garantir que vous puissiez utiliser des snapshots d'instances Elastic Compute Service (ECS) afin de restaurer les données de disque, nous vous recommandons de mettre à jour la version Kubernetes du cluster vers la version 1.18 ou une version ultérieure. Pour plus d'informations, consultez les rubriques Créer un cluster ACK managé, Créer un cluster ACK dédié (obsolète) ou Créer un cluster enregistré ACK One.
ImportantLe cluster de restauration doit utiliser le plug-in Container Storage Interface (CSI). La restauration d'applications n'est pas prise en charge dans les clusters qui utilisent FlexVolume ou qui utilisent csi-compatible-controller et FlexVolume.
-
Le centre de sauvegarde est utilisé pour sauvegarder et restaurer des applications. Avant d'exécuter une tâche de restauration, vous devez installer et configurer les composants système dans le cluster de restauration. Exemple :
aliyun-acr-credential-helper : vous devez accorder des permissions au cluster de restauration et configurer acr-configuration.
alb-ingress-controller : vous devez configurer un ALBConfig.
Le composant de service de sauvegarde migrate-controller est installé et ses permissions sont configurées. Pour plus d'informations, consultez la rubrique Installer le composant de service de sauvegarde migrate-controller et configurer les permissions.
Pour sauvegarder des volumes à l'aide de snapshots de disques cloud, vous devez installer le plug-in CSI version 1.1.0 ou ultérieure. Pour plus d'informations, consultez la rubrique Installer et mettre à niveau les composants CSI.
Flux de migration
Le flux de migration varie en fonction du plug-in de stockage utilisé par le cluster de sauvegarde. Les figures suivantes présentent les détails.
Cluster de sauvegarde sans applications de stockage
Cluster de sauvegarde utilisant FlexVolume
Cluster de sauvegarde utilisant CSI
Procédure
Cette rubrique illustre la migration d'applications, de configurations et de données de volume depuis un cluster ACK utilisant FlexVolume et exécutant Kubernetes 1.16 vers un cluster ACK utilisant CSI et exécutant Kubernetes 1.28. La migration s'effectue soit par changement de source de données, soit en conservant une source de données inchangée. Si vous migrez des applications qui n'utilisent pas de stockage ou si votre cluster de sauvegarde utilise déjà le plug-in de stockage CSI, vous pouvez ignorer les étapes marquées comme Facultatif.
Si vous optez pour la méthode de source de données inchangée, vous devez définir la politique de récupération du PersistentVolume (PV) dans le cluster de sauvegarde sur Retain. Cette configuration empêche la suppression des données lors de la suppression du volume.
kubectl patch pv/<pv-name> --type='json' -p '[{"op":"replace","path":"/spec/persistentVolumeReclaimPolicy","value":"Retain"}]'
|
Méthode |
Description |
Cas d'utilisation |
|
Changement de source de données |
Cette méthode sauvegarde les données des volumes du cluster de sauvegarde et crée une nouvelle copie des données pour les applications dans le cluster de restauration. Elle génère deux ensembles de stockage totalement indépendants. Le processus de restauration des données utilise un montage dynamique, ce qui permet de modifier le type de stockage en convertissant la StorageClass. Par exemple, vous pouvez convertir un stockage NAS en stockage sur disque. |
|
|
Source de données inchangée |
Cette méthode utilise un montage statique lors de la restauration pour réutiliser la source de données d'origine, telle qu'un ID de disque ou un bucket OSS, sur la base du PersistentVolumeClaim (PVC) et du PersistentVolume (PV) sauvegardés. Si vous migrez des applications depuis un cluster FlexVolume vers un cluster CSI, vous devez créer manuellement un PVC et un PV statiques, car les modèles YAML ne sont pas compatibles. |
L'application ne peut pas interrompre les écritures de données pendant les processus de sauvegarde et de restauration, et requiert une forte cohérence des données. |
Préparation de l'environnement
|
Élément |
Cluster de sauvegarde |
Cluster de restauration |
|
Version du cluster |
1.16.9-aliyun.1 |
1.28.3-aliyun.1 |
|
Version du runtime |
Docker 19.03.5 |
containerd 1.6.20 |
|
Version du composant de stockage |
FlexVolume : v1.14.8.109-649dc5a-aliyun |
CSI : v1.26.5-56d1e30-aliyun |
|
Autres |
|
Les composants de stockage csi-plugin et csi-provisioner sont installés. Pour plus d'informations, consultez la section Composants. |
Étape 1 : Déploiement d'une application de test
-
Exécutez la commande suivante pour déployer un volume sur disque avec approvisionnement dynamique.
Remplacez
alicloud-disk-topologypar le nom de la StorageClass de disque par défaut pour le plug-in de stockage FlexVolume dans votre cluster.cat << EOF | kubectl apply -f - kind: PersistentVolumeClaim apiVersion: v1 metadata: name: disk-essd spec: accessModes: - ReadWriteOnce storageClassName: alicloud-disk-topology resources: requests: storage: 20Gi EOF -
Exécutez la commande suivante pour déployer un volume NAS avec approvisionnement statique.
Remplacez
serverpar le point de montage du système de fichiers NAS de votre compte.cat << EOF | kubectl apply -f - apiVersion: v1 kind: PersistentVolume metadata: name: pv-nas spec: capacity: storage: 5Gi storageClassName: nas accessModes: - ReadWriteMany flexVolume: driver: "alicloud/nas" options: server: "1758axxxxx-xxxxx.cn-beijing.nas.aliyuncs.com" vers: "3" options: "nolock,tcp,noresvport" --- kind: PersistentVolumeClaim apiVersion: v1 metadata: name: pvc-nas spec: accessModes: - ReadWriteMany storageClassName: nas resources: requests: storage: 5Gi EOF -
Exécutez la commande suivante pour déployer l'application. Cette application monte à la fois les volumes sur disque et NAS créés aux étapes précédentes.
L'
apiVersiondu code ci-dessous utilise extensions/v1beta1. CetteapiVersionest obsolète dans les clusters version 1.28.cat << EOF | kubectl apply -f - apiVersion: extensions/v1beta1 kind: Deployment metadata: name: nginx labels: app: nginx spec: replicas: 1 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx ports: - containerPort: 80 volumeMounts: - name: nas mountPath: /cold - name: disk mountPath: /hot volumes: - name: nas persistentVolumeClaim: claimName: pvc-nas - name: disk persistentVolumeClaim: claimName: disk-essd EOF -
Exécutez la commande suivante pour vérifier que l'application déployée a bien démarré.
kubectl get pod -l app=nginxSortie attendue :
NAME READY STATUS RESTARTS AGE nginx-5ffbc895b-xxxxx 1/1 Running 0 2m28s
Étape 2 : Installation du Backup Center dans le cluster de sauvegarde
-
Dans le cluster de sauvegarde, installez le composant de service de sauvegarde migrate-controller.
RemarquePour les clusters exécutant Kubernetes 1.16 ou une version ultérieure, vous pouvez installer directement le composant de service de sauvegarde en version V1.7.6 ou supérieure depuis la marketplace des composants.
Si votre cluster de sauvegarde est un ACK Dedicated Cluster ou un cluster enregistré, ou s'il utilise un plug-in de stockage autre que CSI (tel que FlexVolume), vous devez configurer des autorisations supplémentaires. Pour plus d'informations, consultez la section Cluster enregistré.
-
(Facultatif) Si votre cluster utilise FlexVolume, exécutez la commande suivante pour confirmer que les autorisations requises sont configurées.
kubectl -n csdr get secret alibaba-addon-secret -
(Facultatif) Si votre cluster utilise FlexVolume, exécutez la commande suivante pour ajouter la variable d'environnement
USE_FLEXVOLUMEau migrate-controller dans le namespace kube-system.ImportantDans un cluster FlexVolume, après l'installation du composant de service de sauvegarde
migrate-controller, le podmigrate-controllerse termine de manière inattendue et l'accès à la page Application Backup du cluster renvoie une erreur 404. Dans ce cas, vous devez modifier le fichier YAML du composant pour ajouter la variable d'environnementUSE_FLEXVOLUME.kubectl -n kube-system patch deployment migrate-controller --type json -p '[{"op":"add","path":"/spec/template/spec/containers/0/env/-","value":{"name":"USE_FLEXVOLUME","value":"true"}}]' -
Exécutez les commandes suivantes pour confirmer que le composant de service de sauvegarde fonctionne correctement.
kubectl -n kube-system get pod -l app=migrate-controller kubectl -n csdr get podSortie attendue :
NAME READY STATUS RESTARTS AGE migrate-controller-6c8b9c6cbf-967x7 1/1 Running 0 3m55s NAME READY STATUS RESTARTS AGE csdr-controller-69787f6dc8-f886h 1/1 Running 0 3m39s csdr-velero-58494f6bf4-52mv6 1/1 Running 0 3m37s
Étape 3 : Création d'une sauvegarde dans le cluster de sauvegarde
-
Dans la même région que le cluster de sauvegarde, créez un bucket OSS nommé selon le format
cnfs-oss-*pour stocker les sauvegardes. Pour plus d'informations, consultez la section Créer un bucket.RemarqueLes ACK managed clusters disposent par défaut des autorisations nécessaires pour les buckets OSS dont le nom commence par
cnfs-oss-*. Si le format de nommage de votre bucket ne respecte pas ces exigences, vous devez également configurer des autorisations supplémentaires. Pour plus d'informations, consultez la section Installer des composants et configurer les autorisations dans la console. -
Exécutez la commande suivante pour créer une tâche de sauvegarde immédiate.
Pour savoir comment configurer les paramètres de sauvegarde dans la console ACK, consultez la section Sauvegarder et restaurer des applications dans un cluster. Cette étape fournit une configuration recommandée pour l'exemple de scénario. Ajustez les paramètres en fonction de votre scénario spécifique.
cat << EOF | kubectl apply -f - apiVersion: csdr.alibabacloud.com/v1beta1 kind: ApplicationBackup metadata: annotations: csdr.alibabacloud.com/backuplocations: '{"name":"<your-backup-vault-name>","region":"<your-region-id>","bucket":"<your-oss-bucket-name>","provider":"alibabacloud"}' labels: csdr/schedule-name: fake-name name: <your-backup-name> namespace: csdr spec: excludedNamespaces: - csdr - kube-system - kube-public - kube-node-lease excludedResources: - storageclasses - clusterroles - clusterrolebindings - events - persistentvolumeclaims - persistentvolumes includeClusterResources: true pvBackup: defaultPvBackup: true storageLocation: <your-backup-vault-name> ttl: 720h0m0s EOFParamètre
Description
excludedNamespaces
Les namespaces à exclure de la sauvegarde. Nous vous recommandons d'exclure les namespaces suivants :
-
csdr: le namespace de fonctionnement du centre de sauvegarde. Le centre de sauvegarde intègre une logique de synchronisation inter-cluster. Ne lancez pas manuellement des tâches, telles que des sauvegardes ou des restaurations, dans le namespace csdr. Cette action risque de provoquer un comportement inattendu. -
kube-system,kube-publicetkube-node-leasesont des namespaces existant par défaut dans les clusters ACK. Leur restauration entre différents clusters est complexe en raison des divergences au niveau des paramètres et des configurations des clusters.
excludedResources
Les ressources à exclure. Configurez ce paramètre selon vos besoins métier.
includeClusterResources
Indique si les ressources au niveau du cluster, telles que les StorageClasses, les CRD et les webhooks, doivent être sauvegardées.
-
true: sauvegarde toutes les ressources au niveau du cluster. -
false: sauvegarde uniquement les ressources au niveau du cluster référencées par des ressources au niveau du namespace dans le namespace sélectionné. Par exemple, lorsque vous sauvegardez un Pod, si le ServiceAccount référencé est autorisé par un ClusterRole, le ClusterRole est automatiquement sauvegardé. Lorsque vous sauvegardez une ressource personnalisée (CR), la définition de ressource personnalisée (CRD) est automatiquement sauvegardée.
RemarquePar défaut,
IncludeClusterResourcesest défini surfalsepour les tâches de sauvegarde créées dans la console ACK.defaultPvBackup
Indique si les données de volume doivent être sauvegardées.
-
true: sauvegarde l'application ainsi que les données contenues dans les volumes utilisés par les Pods en cours d'exécution. -
false: sauvegarde uniquement l'application.
Important-
Pour les clusters exécutant Kubernetes et CSI en version 1.18 ou ultérieure, le centre de sauvegarde utilise par défaut des snapshots ECS pour sauvegarder les données des disques. Pour les autres types de stockage ou pour les données de disque dans les clusters exécutant Kubernetes en version supérieure ou égale à 1.16 mais inférieure à 1.18, Cloud Backup est utilisé.
-
Pour les volumes non utilisés par des Pods en cours d'exécution, seule la méthode de source de données inchangée est disponible. Cela nécessite la création manuelle d'un PV statique et d'un PVC dans le nouveau cluster, ainsi que la spécification de la source de données d'origine, telle qu'un ID de disque ou un compartiment OSS.
-
Si votre application exige une forte cohérence des données, suspendez les écritures de données pendant la période de sauvegarde. Vous pouvez également opter pour la méthode de source de données inchangée et ne sauvegarder que l'application.
-
-
Exécutez la commande suivante pour interroger l'état de la tâche de sauvegarde.
kubectl -ncsdr describe applicationbackup <your-backup-name>Dans la sortie attendue, le paramètre
PhasedeStatuspasse àCompleted, ce qui indique que la tâche de sauvegarde a été créée avec succès. -
Exécutez les commandes suivantes pour confirmer la liste des ressources pour cette sauvegarde.
kubectl -ncsdr get pod | grep csdr-velero kubectl -ncsdr exec -it <csdr-velero-pod-name> -- /velero describe backup <your-backup-name> --detailsVous pouvez vérifier la liste des ressources qui n'ont pas été sauvegardées et ajuster la configuration de sauvegarde pour relancer la sauvegarde.
Resource List: apiextensions.k8s.io/v1/CustomResourceDefinition: - volumesnapshots.snapshot.storage.k8s.io v1/Endpoints: - default/kubernetes v1/Namespace: - default v1/PersistentVolume: - d-2ze88915lz1il01v1yeq - pv-nas v1/PersistentVolumeClaim: - default/disk-essd - default/pvc-nas v1/Secret: - default/default-token-n7jss - default/oss-secret - default/osssecret v1/Service: - default/kubernetes v1/ServiceAccount: - default/default ...
Étape 4 : Installer le centre de sauvegarde dans le cluster de restauration
Installez le centre de sauvegarde dans le cluster de restauration. Pour plus d'informations, consultez Étape 2 : Installer le centre de sauvegarde dans le cluster de sauvegarde.
-
Associez le coffre-fort de sauvegarde que vous avez créé au cluster de restauration.
Connectez-vous à la console ACK.
Sur la page Clusters, cliquez sur le nom du cluster cible. Dans le volet de navigation de gauche, choisissez .
Sur la page Application Backup, cliquez sur Restore.
Sélectionnez le Backup Vault utilisé pour la sauvegarde, cliquez sur Initialize Backup Vault et attendez que la sauvegarde soit synchronisée avec ce cluster.
(Facultatif) Étape 5 : Créer manuellement des PVC et des PV dans le cluster de restauration
Dans la plupart des scénarios, il suffit de suivre l'étape 6 pour créer directement une tâche de restauration dans le cluster de restauration. Le composant du centre de sauvegarde génère alors automatiquement les revendications de stockage et les volumes en fonction de la sauvegarde.
Lorsque le centre de sauvegarde exécute une tâche de restauration, il ignore la restauration des PVC et des PV portant les mêmes noms afin de protéger les données existantes. Cela signifie qu'il ne les reconstruit pas et n'écrase pas les données contenues dans les volumes. Par conséquent, dans les scénarios suivants, vous pouvez précréer les PVC et les PV avant la tâche de restauration pour une récupération plus flexible :
Vous avez sauvegardé des volumes, mais certains d'entre eux contiennent des données qui ne doivent pas être migrées, comme des journaux. Vous pouvez précréer des volumes vides.
Vous avez sauvegardé des volumes, mais les volumes du cluster de sauvegarde qui ne sont pas utilisés par des Pods en cours d'exécution doivent également être migrés vers le cluster de restauration.
Vous n'avez pas sauvegardé les volumes et la liste
excludedResourcesinclutpersistentvolumeclaimsetpersistentvolumes, ou la migration implique le déplacement d'une application d'un cluster FlexVolume vers un cluster CSI.
Voici les étapes spécifiques :
Les disques ne peuvent pas être montés across plusieurs zones de disponibilité. Si vous basculez vers une autre zone de disponibilité dans le cluster de restauration, choisissez l'une des méthodes suivantes :
Synchronisez les données en utilisant la méthode de modification de la source de données.
Connectez-vous à la console de gestion ECS, créez manuellement un snapshot unique pour le disque, puis utilisez ce snapshot pour créer un disque dans une nouvelle zone de disponibilité. Pour plus d'informations, consultez Créer un disque à partir d'un snapshot. Dans le fichier YAML
outputfile.txtci-dessous, remplacez l'ID du disque et l'ID de la zone de disponibilité dansnodeAffinity.
(Facultatif) Si votre cluster de sauvegarde est un cluster FlexVolume, vous pouvez utiliser un outil en ligne de commande pour convertir par lots les fichiers YAML, car le format YAML des PV et des PVC diffère entre FlexVolume et CSI. Pour plus d'informations, consultez Utiliser l'outil en ligne de commande FlexVolume2CSI pour convertir par lots les fichiers YAML.
-
Exécutez la commande suivante pour déployer le fichier YAML CSI obtenu à partir de FlexVolume2CSI.
où
outputfile.txtcorrespond à la sortie de la conversion YAML effectuée par l'outil en ligne de commande.kubectl apply -f outputfile.txt -
Exécutez la commande suivante pour confirmer que le PVC dans le cluster de restauration est dans l'état
Bound.kubectl get pvcSortie attendue :
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE disk-essd Bound d-2ze88915lz1il0xxxxxx 20Gi RWO alicloud-disk-essd 29m pvc-nas Bound pv-nas 5Gi RWX nas 29m
Étape 6 : Créer une tâche de restauration dans le cluster de restauration
Si une ressource portant le même nom existe déjà dans le cluster de restauration, la tâche de restauration ignore cette ressource.
-
Le centre de sauvegarde se concentre sur la sauvegarde et la restauration des applications métier. Avant de lancer une tâche de restauration, vous devez installer et configurer les composants système requis dans le cluster de restauration. Par exemple :
Composant ACR secret-free : vous devez réautoriser le cluster de restauration et configurer
acr-configuration.Composant ALB Ingress : vous devez configurer au préalable
ALBConfiget les autres ressources associées.
Lors de la restauration des ressources Service, le centre de sauvegarde les adapte en fonction du type de Service :
Service
NodePort: lors d'une restauration inter-clusters, le centre de sauvegarde conserve par défaut le numéro de port.-
Pour un Service de type LoadBalancer, lorsque
ExternalTrafficPolicyest défini surLocal, leHealthCheckNodePortutilise par défaut un numéro de port aléatoire. Pour conserver le numéro de port, définissezspec.preserveNodePorts: truelors de la création d'une tâche de restauration.Si un Service du cluster de sauvegarde utilise une instance SLB existante spécifiée, le service restauré utilisera l'instance SLB d'origine et désactivera l'écoute forcée par défaut. Vous devez configurer l'écouteur dans la console SLB.
Si une instance SLB pour un Service dans le cluster de sauvegarde est gérée par CCM, une nouvelle instance SLB est créée par CCM lors de la restauration. Pour plus d'informations, consultez Notes de configuration de l'équilibreur de charge pour un Service.
Si vous avez sauvegardé des volumes lors de la création de la sauvegarde, vous utilisez la méthode de modification de la source de données pour la sauvegarde et la restauration. Vous pouvez changer le type de stockage en utilisant la conversion StorageClass (convertedarg). Par exemple, vous pouvez convertir un stockage NAS en stockage sur disque. Sélectionnez la StorageClass cible en fonction de vos besoins.
Dans cet exemple, étant donné que le cluster de sauvegarde est un cluster FlexVolume v1.16 et que les sauvegardes de volumes sur disque utilisent Cloud Backup, vous pouvez sélectionner alicloud-disk comme StorageClass cible pour la revendication de stockage disk-essd (qui est convertie en une classe de disque CSI et prend par défaut la valeur alicloud-disk-topology-alltype). Si votre cluster de sauvegarde est un cluster CSI v1.18 ou ultérieur, aucune configuration liée aux volumes sur disque n'est nécessaire.
Cet exemple convertit également le volume NAS FlexVolume en un volume NAS isolé géré par CNFS en sélectionnant la StorageClass cible
alibabacloud-cnfs-naspour le PVCpvc-nas. Si votre cluster ne dispose pas de la StorageClassalibabacloud-cnfs-nas, consultez Gérer les systèmes de fichiers NAS à l'aide de CNFS.
Voici les étapes spécifiques :
-
Exécutez la commande suivante pour créer une tâche de restauration.
Pour savoir comment configurer une tâche de restauration dans la console ACK, consultez Restaurer les applications et les volumes de données. Cette étape fournit la configuration recommandée pour le scénario d'exemple. Adaptez les paramètres à votre scénario spécifique.
cat << EOF | kubectl apply -f - apiVersion: csdr.alibabacloud.com/v1beta1 kind: ApplicationRestore metadata: annotations: csdr.alibabacloud.com/backuplocations: >- '{"name":"<your-backup-vault-name>","region":"<your-region-id>","bucket":"<your-oss-bucket-name>","provider":"alibabacloud"}' name: <your-restore-name> namespace: csdr spec: backupName: <your-backup-name> excludedNamespaces: - arms-prom excludedResources: - secrets appRestoreOnly: false convertedarg: - convertToStorageClassType: alicloud-disk-topology-alltype namespace: default persistentVolumeClaim: alicloud-disk - convertToStorageClassType: alibabacloud-cnfs-nas namespace: default persistentVolumeClaim: pvc-nas namespaceMapping: <backupNamespace>: <restoreNamespace> EOFParameter
Description
excludedNamespaces
Les namespace à exclure. Vous pouvez exclure des namespace indésirables de la liste des ressources de sauvegarde.
excludedResources
Les resources à exclure. Vous pouvez exclure des types de resource indésirables de la liste des ressources de sauvegarde.
appRestoreOnly
Pour une sauvegarde incluant des volumes, ce paramètre spécifie si les volumes doivent être restaurés.
-
true: Crée des volumes dynamiques et des storage claims pointant vers une nouvelle source de données lors de la restauration. Les tâches de sauvegarde créées dans la console utilisent true par défaut. -
false: Aucun volume statique n'est créé. Vous devez déployer manuellement un volume statique au préalable.
RemarqueEn général, définissez ce paramètre sur
trueen cas de modification de la source de données et surfalsesi la source de données reste inchangée.convertedarg
La liste de conversion StorageClass. Pour les volumes de type FileSystem, tels que OSS, NAS, CPFS et les volumes locaux, vous pouvez configurer ce paramètre pour convertir les StorageClasses de leurs PVC vers le StorageClass spécifié pendant le processus de restauration. Par exemple, vous pouvez convertir des volumes NAS en volumes disk.
convertToStorageClassType : le StorageClass souhaité. Assurez-vous que le StorageClass existe dans le cluster actuel. Vous ne pouvez spécifier que le StorageClass disk ou NAS.
namespace : le namespace du PVC.
persistentVolumeClaim : le nom du PVC.
Ce qui précède correspond aux paramètres requis pour la fonctionnalité de conversion StorageClass.
-
-
Exécutez la commande suivante pour interroger l'état de la tâche de restauration.
kubectl -ncsdr describe applicationrestore <your-restore-name>Dans la sortie attendue, le
PhasedeStatuspasse àCompleted, ce qui indique que la tâche a été restaurée avec succès. -
Exécutez les commandes suivantes pour vérifier s'il existe des ressources dont la restauration a échoué et identifier la cause de l'échec.
kubectl -ncsdr get pod | grep csdr-velero kubectl -ncsdr exec -it <csdr-velero-pod-name> -- /velero describe restore <your-restore-name> --detailsSortie attendue :
Warnings: Velero: <none> Cluster: could not restore, ClusterRoleBinding "kubernetes-proxy" already exists. Warning: the in-cluster version is different than the backed-up version. Namespaces: demo-ns: could not restore, ConfigMap "kube-root-ca.crt" already exists. Warning: the in-cluster version is different than the backed-up version. could not restore, Endpoints "kubernetes" already exists. Warning: the in-cluster version is different than the backed-up version. could not restore, Service "kubernetes" already exists. Warning: the in-cluster version is different than the backed-up version. Errors: Velero: <none> Cluster: <none> Namespaces: demo-ns: error restoring endpoints/xxxxxx/kubernetes: Endpoints "kubernetes" is invalid: subsets[0].addresses[0].ip: Invalid value: "169.254.128.9": may not be in the link-local range (169.xxx.0.0/16, fe80::/10) error restoring endpointslices.discovery.k8s.io/demo-ns/kubernetes: EndpointSlice.discovery.k8s.io "kubernetes" is invalid: endpoints[0].addresses[0]: Invalid value: "169.xxx.128.9": may not be in the link-local range (169.xxx.0.0/16, fe80::/10) error restoring services/xxxxxx/kubernetes-extranet: Service "kubernetes-extranet" is invalid: spec.ports[0].nodePort: Invalid value: 31882: provided port is already allocatedD'après la sortie précédente, vous pouvez voir si certaines ressources du cluster de restauration n'ont pas été restaurées. Par exemple, les
Warningsindiquent qu'une ressource existe déjà et a été ignorée. LesErrorssignalent un conflit NodePort, car le port d'origine est conservé lors d'une restauration inter-clusters. -
Confirmez que l'application restaurée fonctionne correctement.
Une fois l'application restaurée, vérifiez si des ressources se trouvent dans un état anormal en raison de contraintes applicatives, d'exceptions du runtime de conteneur ou d'autres raisons. Le cas échéant, corrigez-les manuellement.
Une fois la récupération vérifiée, l'
apiVersionde l'application Nginx est ajustée par défaut sur apps/v1, ce qui est recommandé pour les clusters de version 1.28.