Como fazer backup de clusters de usuário na AWS

Nesta página, mostramos como fazer backup do armazenamento de dados etcd para sua instalação do GKE na AWS para recuperação de eventos que podem danificar os dados etcd do cluster.

Limitações

  • Usar um arquivo de backup para restaurar os dados do etcd é o último recurso. Não recomendamos a restauração de um arquivo de backup, a menos que o cluster esteja completamente corrompido. Entre em contato com o Suporte do Google e receba ajuda para decidir a melhor solução.

  • Esse procedimento não faz backup de dados das cargas de trabalho, incluindo PersistentVolumes.

  • Esse backup não pode ser usado para restaurar um cluster de uma versão diferente do GKE na AWS.

Como fazer backup de um cluster de usuário

Um backup de cluster de usuário é um snapshot do armazenamento etcd do cluster de usuário. O armazenamento etcd contém todos os objetos do Kubernetes e objetos personalizados que representam o estado do cluster. O snapshot contém os dados necessários para recriar as cargas de trabalho sem estado do cluster.

Para criar um snapshot do armazenamento de dados etcd, execute as seguintes etapas:

  1. Abra um shell na instância de serviço de gerenciamento que executa o etcd para o cluster.

    1. Encontre o endereço IP da instância de serviço de gerenciamento do seu cluster.

      export CLUSTER_ID=$(terraform output cluster_id)
      export MANAGEMENT_IP=$(aws ec2 describe-instances \
        --filters "Name=tag:Name,Values=$CLUSTER_ID-management-0" \
        --query "Reservations[*].Instances[*].PrivateIpAddress" \
        --output text)
      
    2. Use a ferramenta ssh para abrir uma conexão com a instância do serviço de gerenciamento.

      Conexão direta

      ssh -i ~/.ssh/anthos-gke ubuntu@$MANAGEMENT_IP
      

      Bastion Host

      export BASTION_DNS=$(terraform output bastion_dns_name)
      ssh -i ~/.ssh/anthos-gke -J ubuntu@$BASTION_DNS ubuntu@$MANAGEMENT_IP
      
  2. Crie um diretório para armazenar os dados de backup do etcd.

    mkdir ./etcd-backups
    
  3. Use a ferramenta de linha de comando ps para encontrar o ID do processo do etcd nessa instância.

    ps -e | grep etcd
    

    A saída mostra detalhes do processo etcd. O primeiro elemento é o ID do processo do etcd. Nas etapas a seguir, substitua ETCD_PID por esse ID do processo.

  4. Crie um script no sistema de arquivos do contêiner do etcd para tirar um snapshot. Esse script executa o etcdctl para se conectar ao daemon do etcd e executa um snapshot para fazer backup do banco de dados do etcd.

    cat << EOT > /tmp/etcdbackup.sh
    # Extract a snapshot of the anthos-gke etcd state database
    
    export ETCDCTL_API=3
    
    etcdctl \
     --endpoints=https://127.0.0.1:2379 \
     --cacert=/secrets/server-ca.crt \
     --cert=/secrets/server.crt \
     --key=/secrets/server.key \
     snapshot save /tmp/snapshot.db
    EOT
    
    chmod a+x /tmp/etcdbackup.sh
    sudo mv /tmp/etcdbackup.sh /proc/ETCD_PID/root/tmp/etcdbackup.sh
    
  5. Use o comando nsenter para executar o script no contêiner etcd para criar o snapshot.

    sudo nsenter --all --target ETCD_PID /tmp/etcdbackup.sh
    
  6. Copie o arquivo de snapshot do contêiner do etcd.

    sudo cp /proc/ETCD_PID/root/tmp/snapshot.db ./etcd-backups
    
  7. Copie todos os arquivos no diretório /secrets do contêiner do etcd para o diretório de backup. Esses arquivos contêm os certificados que criptografam e validam a comunicação entre o etcd e outros processos no cluster. Juntos, o arquivo de snapshot e os arquivos de certificados são um backup completo do status do cluster do etcd.

    sudo cp -r /proc/ETCD_PID/root/secrets ./etcd-backups
    
  8. Use a ferramenta tar para agrupar os arquivos de backup etc em um arquivo tar conveniente.

    tar -cvf etcd-backup.tar etcd-backup
    
  9. Saia da máquina local e use a ferramenta scp para copiar o arquivo etcd-backup.tar da instância do serviço de gerenciamento. Neste exemplo, usamos as variáveis de ambiente BASTION_DNS e MANAGEMENT_IP definidas anteriormente.

    scp -i ~/.ssh/anthos-gke -J ubuntu@$BASTION_DNS \
     ubuntu@$MANAGEMENT_IP:~/etcd-backup/backup.tar
    

Para mais informações