Para fazer backup e restaurar cargas de trabalho em execução em clusters TKG 2 em Supervisor, crie um repositório de dados e instale o Velero com Restic no cluster Kubernetes.

Visão geral

Os clusters do TKG 2 são executados em nós de máquina virtual. Para fazer backup e restaurar cargas de trabalho de cluster do TKG 2, instale o Velero e o Restic no cluster.

Pré-requisitos

Certifique-se de que seu ambiente atenda aos seguintes pré-requisitos para instalar o Velero e o Restic para fazer backup e restaurar cargas de trabalho em execução em clusters Tanzu Kubernetes.
  • Uma VM Linux com armazenamento suficiente para armazenar vários backups de carga de trabalho. Você instalará o MinIO nesta VM.
  • Uma VM Linux em que o Kubernetes CLI Tools for vSphere está instalado, incluindo o vSphere Plugin for kubectl e o kubectl. Você instalará a CLI do Velero nesta VM cliente. Se você não tiver uma VM desse tipo, poderá instalar a CLI do Velero localmente, mas deverá ajustar as etapas de instalação adequadamente.
  • O ambiente Kubernetes tem acesso à Internet e pode ser acessado pela VM cliente.

Instalar e configurar o repositório de objetos do MinIO

O Velero requer um repositório de objetos compatível com S3 como destino para backups de carga de trabalho do Kubernetes. O Velero oferece suporte a vários desses provedores de armazenamento de objetos. Para simplificar, estas instruções usam o MinIO, um serviço de armazenamento compatível com S3 que é executado localmente na VM de armazenamento de objeto.
  1. Instale o MinIO.
    wget https://dl.min.io/server/minio/release/linux-amd64/minio
  2. Conceda permissões de execução ao MinIO.
    chmod +x minio
  3. Crie um diretório no sistema de arquivos para o MinIO.
    mkdir /DATA-MINIO
  4. Inicie o servidor MinIO.
    ./minio server /DATA-MINIO
  5. Depois que o servidor MinIO for iniciado, você receberá detalhes importantes da instância do armazenamento de dados, incluindo a URL do Endpoint, a AccessKey e a SecretKey. Registre a URL do Endpoint, a AccessKey e a SecretKey na tabela.
    Metadados do repositório de dados Valor
    URL do endpoint
    Chave de Acesso
    Chave Secreta
  6. Navegue até o repositório de dados do MinIO abrindo um navegador para a URL do endpoint do servidor MinIO.
  7. Faça login no servidor MinIO e forneça a AccessKey e a SecretKey.
  8. Para habilitar o MinIO como um serviço, configure o MinIO para inicialização automática fazendo download do script minio.service.
    curl -O https://raw.githubusercontent.com/minio/minio-service/master/linux-systemd/minio.service
  9. Edite o script minio.service e adicione o seguinte valor para ExecStart.
    ExecStart=/usr/local/bin/minio server /DATA-MINIO path
  10. Salve o script revisado.
  11. Configure o serviço MinIO executando os comandos a seguir.
    cp minio.service /etc/systemd/system 
    cp minio /usr/local/bin/ 
    systemctl daemon-reload 
    systemctl start minio 
    systemctl status minio 
    systemctl enable minio
  12. Crie um bucket do MinIO para backup e restauração iniciando o navegador MinIO e fazendo login no repositório de objetos.
  13. Clique no ícone Criar Bucket.
  14. Digite o nome do bucket, por exemplo: my-cluster-backups.
  15. Verifique se o bucket foi criado.
  16. Por padrão, um novo bucket do MinIO é somente leitura. Para backup e restauração autônomos do Velero, o bucket do MinIO deve ser de leitura/gravação. Para definir o bucket para leitura/gravação, selecione o bucket e clique no link de elipses (pontos).
  17. Selecione Editar política (Edit Policy).
  18. Altere a política para Leitura e gravação (Read and Write).
  19. Clique em Adicionar (Add).
  20. Para fechar a caixa de diálogo, clique no X.

Instalar a CLI do Velero

Instale a CLI do Velero no cliente de VM ou em sua máquina local.
  1. Baixe a versão compatível do binário Velero assinado para vSphere with Tanzu na página de downloads do produto VMware.
    Observação: Você deve usar o binário do Velero assinado por VMware para se qualificar para o suporte de VMware.
  2. Abra uma linha de comando e altere o diretório para o download da CLI do Velero.
  3. Descompacte o arquivo baixado. Por exemplo:
    gunzip velero-linux-vX.X.X_vmware.1.gz
  4. Verifique o binário do Velero.
    ls -l
  5. Conceda permissões de execução à CLI do Velero.
    chmod +x velero-linux-vX.X.X_vmware.1 
  6. Disponibilize globalmente a CLI do Velero movendo-a para o caminho do sistema:
    cp velero-linux-vX.X.X_vmware.1 /usr/local/bin/velero 
  7. Verifique a instalação.
    velero version

Instalar o Velero e o Restic no cluster Tanzu Kubernetes

O contexto da CLI do Velero seguirá automaticamente o contexto do kubectl. Antes de executar comandos da CLI do Velero para instalar o Velero e o Restic no cluster de destino, defina o contexto kubectl.
  1. Recupere o nome do bucket do MinIO. Por exemplo, my-cluster-backups.
  2. Obtenha a AccessKey e a SecretKey para o bucket do MinIO.
  3. Defina o contexto para o cluster Kubernetes de destino para que a CLI do Velero saiba em qual cluster trabalhar.
    kubectl config use-context tkgs-cluster-name
  4. Crie um arquivo de segredos chamado credentials-minio. Atualize o arquivo com as credenciais de acesso do servidor MinIO que você coletou. Por exemplo:
    aws_access_key_id = 0XXNO8JCCGV41QZBV0RQ
    aws_secret_access_key = clZ1bf8Ljkvkmq7fHucrKCkxV39BRbcycGeXQDfx
    Observação: Se você receber uma mensagem de erro "Erro ao obter um repositório de backup" com a descrição "NoCredentialProviders: nenhum provedor válido na cadeia", inclua a linha [default] no início do arquivo de credenciais. Por exemplo:
    [default]
    aws_access_key_id = 0XXNO8JCCGV41QZBV0RQ
    aws_secret_access_key = clZ1bf8Ljkvkmq7fHucrKCkxV39BRbcycGeXQDfx
  5. Salve o arquivo e verifique se o arquivo está no lugar.
    ls
  6. Execute o seguinte comando para instalar o Velero e o Restic no cluster Kubernetes de destino. Substitua ambas as URLs pela URL da sua instância do MinIO.
    velero install \
    --provider aws \
    --plugins velero/velero-plugin-for-aws:v1.0.0 \
    --bucket tkgs-velero \
    --secret-file ./credentials-minio \
    --use-volume-snapshots=false \
    --use-restic \
    --backup-location-config \
    region=minio,s3ForcePathStyle="true",s3Url=http://10.199.17.63:9000,publicUrl=http://10.199.17.63:9000
  7. Verifique a instalação do Velero e do Restic.
    kubectl logs deployment/velero -n velero
  8. Verifique o namespace velero.
    kubectl get ns
  9. Verifique os pods velero e restic.
    kubectl get all -n velero

Solucionar problemas do Restic DaemonSet (se necessário)

Para executar o Restic DaemonSet de três pods em um cluster Kubernetes, talvez seja necessário atualizar a especificação do Restic DaemonSet e modificar o arquivo hostPath. Para obter mais informações sobre esse problema, consulte Integração do Restic na documentação do Velero.
  1. Verifique o Restic DaemonSet de três pods.
    kubectl get pod -n velero

    Se os pods estiverem com o status CrashLoopBackOff, edite-os da seguinte maneira.

  2. Execute o comando edit.
    kubectl edit daemonset restic -n velero
  3. Altere hostPath de /var/lib/kubelet/pods para /var/vcap/data/kubelet/pods.
    - hostPath:
        path: /var/vcap/data/kubelet/pods
  4. Salve o arquivo.
  5. Verifique o Restic DaemonSet de três pods.
    kubectl get pod -n velero
    NAME                      READY   STATUS    RESTARTS   AGE
    restic-5jln8              1/1     Running   0          73s
    restic-bpvtq              1/1     Running   0          73s
    restic-vg8j7              1/1     Running   0          73s
    velero-72c84322d9-le7bd   1/1     Running   0          10m

Ajustar os limites de memória do Velero (se necessário)

Se o backup do Velero retornar status=InProgress por muitas horas, aumente os limites e solicite configurações de memória.
  1. Execute o seguinte comando.
    kubectl edit deployment/velero -n velero
  2. Altere os limites e solicite as configurações de memória do padrão de 256Mi e 128Mi para 512Mi e 256Mi.
        
    ports:
    - containerPort: 8085
      name: metrics
      protocol: TCP
    resources:
      limits:
        cpu: "1"
        memory: 512Mi
      requests:
        cpu: 500m
        memory: 256Mi
    terminationMessagePath: /dev/termination-log
    terminationMessagePolicy: File