O backup center permite fazer backup de aplicações e dados implantados em um cluster registrado do ACK One e restaurá-los em um cluster ACK online, facilitando a migração rápida de aplicações offline para um ambiente online. Este tópico descreve como usar o backup center para migrar aplicações de um cluster offline conectado a um cluster registrado do ACK One para um cluster ACK online.
Pré-requisitos
Um cluster registrado do ACK One foi criado e conectado a um cluster de data center local. O cluster Kubernetes autogerenciado deve estar na versão 1.16 ou posterior.
-
Um cluster gerenciado pelo ACK foi criado para atuar como cluster de restauração. O cluster de restauração deve estar na mesma região do cluster registrado. Recomenda-se o Kubernetes 1.18 ou posterior.
ImportanteO cluster de destino deve usar o plugin de armazenamento Container Storage Interface (CSI). Não é possível restaurar dados em clusters que usam o plugin FlexVolume ou ambos os plugins CSI e FlexVolume por meio do componente csi-compatible-controller.
-
O backup center foca no backup e na recuperação de aplicações de negócios. Antes de iniciar uma tarefa de restauração, instale e configure os componentes de sistema necessários no cluster de destino. Exemplo:
Componente ACR sem senha: conceda permissões e configure o acr-configuration para o cluster de destino.
Componente ALB Ingress: configure previamente o ALBConfig e outras definições.
Verifique se tanto o cluster registrado do ACK One quanto o cluster ACK têm o componente de serviço de backup instalado e as permissões configuradas.
Para um cluster registrado do ACK One conectado a uma Virtual Private Cloud (VPC) via Cloud Enterprise Network (CEN), Express Connect ou gateway VPN, configure uma rota para o endpoint interno do Object Storage Service (OSS). Para mais informações, consulte Acessar o OSS por endpoints internos e nomes de domínio de bucket.
Cenários
Backup em nuvem e recuperação de desastres: solução integrada para backup, recuperação de desastres e migração que ajuda a migrar aplicações rapidamente para a nuvem e implementar a recuperação de desastres de dados. Para mais informações, consulte Visão geral dos clusters registrados.
Observações
Ao fazer backup de dados de um cluster externo, monte um volume local como PV e PVC. O plugin CSI da Alibaba Cloud oferece suporte à montagem de volumes em um cluster registrado do ACK One. Para mais informações, consulte Volumes locais.
O cluster registrado do ACK One, o cluster ACK e o bucket do OSS devem estar na mesma região.
Preparações
Este tópico usa uma aplicação MySQL como exemplo para descrever como implantar e fazer backup da aplicação em um cluster externo e, em seguida, restaurá-la em um cluster ACK. Antes de migrar a aplicação, garanta que o cluster registrado do ACK One e o cluster ACK estejam na mesma região, que o recurso de backup de cluster esteja habilitado em ambos e que os seguintes requisitos sejam atendidos:
-
Para o cluster registrado do ACK One: crie um usuário RAM e conceda a ele permissões no OSS e no Cloud Backup. Em seguida, use o AccessKey ID e o AccessKey secret desse usuário RAM para criar um Secret chamado
alibaba-addon-secretno namespacecsdrnamespace do cluster registrado do ACK One.Execute o comando a seguir para verificar se o Secret
alibaba-addon-secretexiste.kubectl get secret alibaba-addon-secret -n csdrSaída esperada:
alibaba-addon-secret Opaque 2 5d22h -
Para o cluster ACK:
Se você usar um cluster gerenciado pelo ACK, confirme que o serviço Cloud Backup está ativado e que um bucket cujo nome começa com
cnfs-oss-****foi criado.Se você usar um cluster dedicado do ACK, assegure-se de que a função RAM do worker tenha permissões para acessar o OSS e o Cloud Backup. Para mais detalhes, consulte Conceder permissões de OSS a um cluster dedicado do ACK e Conceder permissões do Cloud Backup a um cluster dedicado ou registrado do ACK.
Etapa 1: Implantar a aplicação no cluster externo
-
Execute o comando a seguir para criar o namespace
test1:kubectl create namespace test1 -
No nó do qual deseja fazer backup, execute o comando a seguir para criar um caminho de montagem:
mkdir /mnt/disk -
Crie um arquivo chamado app-mysql.yaml com o conteúdo a seguir. Substitua
<YOUR-HOSTNAME>pelo nome do nó do qual será feito o backup. Substitua os valores deusernameepasswordpelo nome de usuário e pela senha da aplicação MySQL codificados em Base64.apiVersion: apps/v1 kind: StatefulSet metadata: name: mysql-sts namespace: test1 spec: selector: matchLabels: app: mysql-sts serviceName: mysql-sts template: metadata: labels: app: mysql-sts spec: containers: - name: mysql-sts image: registry.cn-hangzhou.aliyuncs.com/arms-docker-repo/arms-demo-mysql:v0.1 env: - name: MYSQL_ROOT_PASSWORD valueFrom: secretKeyRef: name: mysql-pass key: password ports: - containerPort: 3306 name: mysql-sts volumeMounts: - name: mysql mountPath: /var/lib/mysql volumes: - name: mysql persistentVolumeClaim: claimName: example-pvc --- apiVersion: v1 kind: PersistentVolume metadata: name: example-pv spec: capacity: storage: 100Gi volumeMode: Filesystem accessModes: - ReadWriteOnce persistentVolumeReclaimPolicy: Delete storageClassName: local-storage local: path: /mnt/disk nodeAffinity: required: nodeSelectorTerms: - matchExpressions: - key: kubernetes.io/hostname operator: In values: - <YOUR-HOSTNAME> # The name of the node to back up. --- apiVersion: v1 kind: PersistentVolumeClaim metadata: name: example-pvc namespace: test1 spec: accessModes: - ReadWriteOnce resources: requests: storage: 25Gi storageClassName: local-storage volumeName: example-pv --- apiVersion: v1 kind: Secret metadata: name: mysql-pass namespace: test1 type: Opaque data: username: dGVz**** # The Base64-encoded username of the MySQL application to be backed up. Replace the value with the actual username. password: dGVzdDEt**** # The Base64-encoded password of the MySQL application to be backed up. Replace the value with the actual password. -
Execute o comando a seguir para implantar a aplicação MySQL, montar o disco local como PV e criar o PV e a PVC associados:
kubectl create -f app-mysql.yamlSaída esperada:
statefulset.apps/mysql-sts created persistentvolume/example-pv created persistentvolumeclaim/example-pvc created secret/mysql-pass created -
Execute o comando a seguir para verificar se a aplicação MySQL foi implantada:
kubectl get pod -n test1 | grep mysql-stsSaída esperada:
mysql-sts-0 1/1 Running 1 (4m51s ago) 4m58s
Etapa 2: Fazer backup da aplicação e dos dados
O cluster externo está conectado ao cluster registrado do ACK One. Execute as tarefas de backup diretamente no cluster registrado do ACK One.
Crie um cofre de backup no cluster registrado do ACK One. Para mais informações, consulte Criar um cofre de backup.
-
Crie um backup instantâneo chamado
mysqlno cluster registrado do ACK One. Para mais informações, consulte Criar um plano de backup ou um backup instantâneo.Defina Name como
mysql. Em Backup Vaults, selecione o cofre criado na etapa anterior. Para Backup Namespaces, selecione test1. Na página Application Backup, clique em Backup Records para visualizar o status da tarefa
mysql-backup. Quando o status mudar de InProgress para Completed, o backup estará concluído.
Etapa 3: Restaurar a aplicação no cluster ACK
Esta seção demonstra como restaurar a aplicação MySQL no cluster ACK e converter seu armazenamento para a StorageClass alibabacloud-cnfs-nas. Siga as etapas abaixo:
-
Crie uma tarefa de restauração chamada
mysql-restorepara implantar a aplicação MySQL no namespacetest2do cluster ACK e converter a StorageClass paraalibabacloud-cnfs-nas. Para mais informações, consulte Restaurar aplicações e volumes de dados.Parâmetro
Valor
Name
mysql-restore
Backup Vaults
Selecione o cofre de backup criado. Se o botão Initialize Backup Vault aparecer, clique nele e aguarde a sincronização dos registros de backup com o cluster.
Select Backup
mysql
Reset Namespace
Remapeie o namespace de test1 para test2.
StorageClass Conversion
Na lista de PVCs a serem convertidas, selecione a StorageClass alibabacloud-cnfs-nas para example-pvc.
À direita de Restore, clique em View Restoration Records. A restauração estará completa quando o status da tarefa mudar de InProgress para Completed.
-
Execute o comando a seguir no cluster ACK para verificar se a aplicação MySQL foi implantada:
kubectl get pod -n test2 | grep mysql-stsSaída esperada:
mysql-sts-0 1/1 Running 0 4s -
Execute os comandos a seguir no cluster ACK para confirmar que os dados foram restaurados:
-
Verifique se os dados foram restaurados na StorageClass
alibabacloud-cnfs-nas.kubectl get pvc -n test2 | grep example-pvcSaída esperada:
example-pvc Bound nas-acde4acd-59b6-4332-90af-b74ef6****** 25Gi RWO alibabacloud-cnfs-nas 31m -
Confirme se a
example-pvcestá montada na aplicação MySQL.kubectl describe pvc example-pvc -n test2 | grep "Used By"Saída esperada:
Used By: mysql-sts-0
-