Fazendo backup e restaurando recursos do Kubernetes com o Heptio Ark

Você provavelmente teve que reconstruir o cluster Kubernetes após uma falha. Você teve uma estratégia de backup inteligente que não requer aração por vários dias? Sim, você pode fazer backup em um cluster etcd, mas e se apenas parte do cluster cair ou usar volumes persistentes como o AWS EBS?


Nesses casos, a maneira mais fácil é usar o utilitário Heptio Ark .


Com o Heptio, você pode fazer backups de todo o cluster, espaços de nomes individuais ou tipos de recursos e fazer backups dentro do prazo. Para mim, a principal vantagem do Heptio Ark é sua integração com vários provedores de serviços em nuvem, por exemplo, AWS, Azure, Google Cloud, etc. Portanto, quando é feito o backup, são capturados instantâneos dos volumes persistentes usados.


Vamos ver como instalar esse utilitário e como ele faz backups simples e planejados e depois os restaura.


Haverá um post separado sobre backup de volumes permanentes.


Instalação


Você encontrará instruções de instalação aqui: examples / README.md. Esse processo criará várias definições de recursos personalizadas, regras RBAC (controle de acesso baseado em função) que permitem o backup e implantação do Heptio. Por padrão, eles estão no espaço de nome heptio-ark.


Importante! Após uma instalação bem-sucedida, você precisa configurar o heptio-ark para informar ao servidor qual provedor de serviços em nuvem usar e onde armazenar os backups. Aqui está a aparência dessa configuração:


apiVersion: ark.heptio.com/v1 kind: Config metadata: namespace: heptio-ark name: default backupStorageProvider: name: aws bucket: heptio-backup-bucket config: region: eu-central-1 backupSyncPeriod: 30m gcSyncPeriod: 30m scheduleSyncPeriod: 1m restoreOnlyMode: false 

Você pode aplicá-lo usando o comando


  kubectl apply -f heptio.yaml 

Heptio agora sabe em qual balde fazer backup. O local de armazenamento de backup deve estar acessível a partir das lareiras do servidor heptio, para que você possa usar o perfil da instância com acesso a esse bucket ou o Kube2IAM para perfis de instância dinâmicos baseados na lareira.


Por fim, para backups, agendamentos e recuperação, é necessário baixar a CLI do Heptio Ark no GitHub .


Quase todos os comandos podem ser executados como definições de recursos customizados por meio de YAML ou JSON.


Backup


Neste pequeno exemplo, criei um NGINX de implantação simples e, antes dele, um serviço no namespace do servidor da web :


 $ kubectl get all NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE deploy/nginx 1 1 1 1 28s NAME DESIRED CURRENT READY AGE rs/nginx-66f5756f9b 1 1 1 28s NAME READY STATUS RESTARTS AGE po/nginx-66f5756f9b-c88ck 1/1 Running 0 28s NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE svc/nginx ClusterIP 10.32.0.183 <none> 80/TCP 28s 

Vamos fazer um backup a partir da Heptio Ark CLI:


 $ ark backup create nginx-simple --include-namespaces webserver 

Este comando faz backup apenas do namespace do servidor da web . Sem esse parâmetro, o Heptio Ark criará um backup completo de todos os recursos no cluster Kubernetes. O backup levará algum tempo. Uma cópia será salva no bucket especificado no S3 ( heptio-backup-bucket ). Para visualizar o status e a lista de todos os backups, digite o seguinte comando na CLI:


 $ ark backup get NAME STATUS CREATED EXPIRES SELECTOR nginx-simple Completed 2018-07-08 17:35:09 +0200 CEST 29d <none> 

Como você pode ver, o backup está concluído.


Recuperação de backup


Vamos remover o namespace do servidor da web (em linha):


 $ kubectl delete ns heptio-test 

Agora, restaure o espaço para nome após uma exclusão "aleatória" e novamente a partir da Heptio Ark CLI:


 $ ark restore create --from-backup nginx-simple Restore request "nginx-simple-20180708173924" submitted successfully. Run `ark restore describe nginx-simple-20180708173924` for more details. 

Você deve ver que o espaço para nome e todos os recursos (implantação, conjunto de réplicas, sub e serviço) são restaurados:


 $ kubectl get all NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE deploy/nginx 1 1 1 1 20s NAME DESIRED CURRENT READY AGE rs/nginx-66f5756f9b 1 1 1 20s NAME READY STATUS RESTARTS AGE po/nginx-66f5756f9b-9mjvg 1/1 Running 0 20s NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE svc/nginx ClusterIP 10.32.0.77 <none> 80/TCP 20s 

Estrutura de backup


Para visualizar a estrutura de backup, basta carregá-la do bucket no S3 ou digite o comando Heptio Ark:


 $ ark backup download nginx-simple Backup nginx-simple has been successfully downloaded to $PWD/nginx-simple-data.tar.gz 


No arquivo webserver.json do nosso espaço para nome, vemos um recurso regular de espaço para nome.


 { "apiVersion":"v1", "kind":"Namespace", "metadata": { "annotations": { "kubectl.kubernetes.io/last-applied-configuration":"{\"apiVersion\":\"v1\",\"kind\":\"Namespace\",\"metadata\":{\"annotations\":{},\"name\":\"webserver\",\"namespace\":\"\"}}\n" }, "creationTimestamp":"2018-07-08T15:26:44Z", "name":"webserver", "resourceVersion":"3364", "selfLink":"/api/v1/namespaces/webserver", "uid":"52698ae7-82c3-11e8-8529-0645eb60c3f4" }, "spec": { "finalizers":["kubernetes"] }, "status": { "phase":"Active" } } 

Se não precisarmos de uma recuperação completa, podemos restaurar apenas uma parte usando o comando Heptio Ark ou ir diretamente para o backup e restaurar essa parte via kubectl.


 $ ark schedule create nginx-schedule --schedule="* 10 * * *" --include-namespaces webserver Schedule "nginx-schedule" created successfully. 

Backup agendado


O Heptio Ark pode executar tarefas agendadas. Indicamos quais recursos e namespaces devem ser incluídos no backup ou excluídos dele e quando fazer backup:


 $ ark schedule create nginx-schedule --schedule="* 10 * * *" --include-namespaces webserver Schedule "nginx-schedule" created successfully. 

Nesse caso, um backup será criado todos os dias às 10 horas e incluirá apenas o namespace do servidor da web. Na CLI do Heptio Ark, vemos que um agendamento apareceu e o Heptio Ark já criou o primeiro backup:


 $ ark schedule get NAME STATUS CREATED SCHEDULE BACKUP TTL LAST BACKUP SELECTOR nginx-schedule Enabled 2018-07-08 17:49:00 +0200 CEST * 10 * * * 720h0m0s 25s ago <none> $ ~/Downloads/ark backup get NAME STATUS CREATED EXPIRES SELECTOR nginx-schedule-20180708154900 Completed 2018-07-08 17:49:00 +0200 CEST 29d <none> nginx-simple Completed 2018-07-08 17:35:09 +0200 CEST 29d <none> 

Aqui é indicado que os backups agendados são excluídos após 720 horas, ou seja, após 30 dias. Ao criar um backup ou agendamento, você pode especificar o tempo de vida da cópia - TTL. Após esse período, o backup será excluído do repositório, no nosso caso AWS.

Source: https://habr.com/ru/post/pt423559/


All Articles