Como Realizar Backup e Restauração Usando o TrilioVault no DOKS

Introdução

Neste tutorial, você aprenderá como implantar o TrilioVault para Kubernetes (ou TVK) em seu cluster DOKS, criar backups e recuperar um backup caso algo dê errado. Você pode fazer backup de todo o seu cluster ou optar por backups baseados em namespace ou rótulos.

Vantagens de usar o Trilio:

  • Faça backups completos (ou incrementais) do seu cluster e restaure em caso de perda de dados.
  • Migre de um cluster para outro.
  • Backups de lançamentos do Helm são suportados.
  • Execute ganchos pré e pós-operacionais para operações de backup e restauração.
  • Console de gerenciamento da web que permite inspecionar detalhadamente o estado das operações de backup/restauração.
  • Defina políticas de retenção para seus backups.
  • O ciclo de vida da aplicação (ou seja, o próprio TVK) pode ser gerenciado por meio de um Operador TrilioVault dedicado.
  • Integração com Velero.
  • Você pode fazer backup e restaurar aplicativos baseados em operador.

Para mais informações, consulte a documentação oficial do TVK CRDs.

Sumário

Pré-requisitos

Para completar este tutorial, você precisa dos seguintes itens:

  1. A DO Spaces Bucket and access keys. Save the access and secret keys in a safe place for later use.
  2. A Git client to clone the Starter Kit repository.
  3. Helm, para gerenciar as versões e atualizações do TrilioVault Operator.
  4. Doctl para interação com a API da DigitalOcean.
  5. Kubectl para interação com o Kubernetes.

Para que o TrilioVault funcione corretamente e faça backup dos seus PVCs, o DOKS precisa ser configurado para suportar a Interface de Armazenamento de Contêiner (ou CSI, na sigla em inglês). Por padrão, ele vem com o driver já instalado e configurado. Você pode verificar usando o seguinte comando:

kubectl get storageclass

A saída deve ser semelhante ao trecho a seguir. Observe que o provisionador é dobs.csi.digitalocean.com.

NAME                         PROVISIONER                 RECLAIMPOLICY   VOLUMEBINDINGMODE   ALLOWVOLUMEEXPANSION   AGE
do-block-storage (default)   dobs.csi.digitalocean.com   Delete          Immediate           true                   10d

A instalação do TrilioVault também precisa da Definição de Recurso Personalizado (CRD) volumeSnapshot para uma instalação bem-sucedida. Você pode verificar usando o seguinte comando:

kubectl get crd | grep volumesnapshot

A saída deve ser semelhante ao trecho a seguir. Se o CRD VolumeSnapshot não estiver instalado, consulte Instalando CRDs VolumeSnapshot.

volumesnapshotclasses.snapshot.storage.k8s.io         2022-02-01T06:01:14Z
volumesnapshotcontents.snapshot.storage.k8s.io        2022-02-01T06:01:14Z
volumesnapshots.snapshot.storage.k8s.io               2022-02-01T06:01:15Z

Também certifique-se de que o CRD suporte as versões de API v1beta1 e v1. Você pode executar o seguinte comando para verificar a versão da API:

kubectl get crd volumesnapshots.snapshot.storage.k8s.io -o yaml

No final do YAML do CRD, você deve ver uma lista storedVersions, contendo os valores tanto v1beta1 quanto v1 (se não estiver instalado, consulte Instalando CRDs VolumeSnapshot):

...
- lastTransitionTime: "2022-01-20T07:58:06Z"
    message: approved in https://github.com/kubernetes-csi/external-snapshotter/pull/419
    reason: ApprovedAnnotation
    status: "True"
    type: KubernetesAPIApprovalPolicyConformant
  storedVersions:
  - v1beta1
  - v1

Passo 1 – Instalando o TrilioVault para Kubernetes

Neste passo, você aprenderá como implantar o TrilioVault para DOKS e gerenciar as instalações do TVK via Helm. Os dados de backup serão armazenados no bucket DO Spaces criado anteriormente na seção de Pré-requisitos.

A aplicação TrilioVault pode ser instalada de várias maneiras:

  • Através do Operador TrilioVault. Você define um CRD TrilioVaultManager que informa ao operador TrilioVault como lidar com a instalação, etapas de pós-configuração e futuras atualizações dos componentes da aplicação Trilio.
  • Através do gráfico triliovault-operator totalmente gerenciado pelo Helm, (coberto neste tutorial).

Instalando o TrilioVault usando Helm

O tutorial do Kit Inicial usa o tipo de instalação do Cluster para a aplicação TVK (o valor Helm applicationScope é definido como “Cluster”). Todos os exemplos deste tutorial dependem deste tipo de instalação para funcionar corretamente.

Primeiro, clone o repositório Git do Kit Inicial e altere o diretório para sua cópia local:

git clone https://github.com/digitalocean/Kubernetes-Starter-Kit-Developers.git
cd Kubernetes-Starter-Kit-Developers

Em seguida, adicione o repositório Helm do TrilioVault e liste os gráficos disponíveis:

helm repo add triliovault-operator http://charts.k8strilio.net/trilio-stable/k8s-triliovault-operator
helm repo update triliovault-operator
helm search repo triliovault-operator

A saída se parece com o seguinte:

NAME                                            CHART VERSION   APP VERSION     DESCRIPTION
triliovault-operator/k8s-triliovault-operator   2.9.2           2.9.2           K8s-TrilioVault-Operator is an operator designe...

O gráfico de interesse é triliovault-operator/k8s-triliovault-operator, que irá instalar o TrilioVault para Kubernetes no cluster junto com o TrilioVault-Manager. Você pode executar helm show values triliovault-operator/k8s-triliovault-operator e exportar para um arquivo para ver todas as opções disponíveis.

Em seguida, abra e inspecione o arquivo de valores do Helm do TrilioVault fornecido no repositório Starter kit usando um editor de sua escolha (preferencialmente com suporte a lint YAML).

code 05-setup-backup-restore/assets/manifests/triliovault-values-v2.9.2.yaml

Por fim, instale o TrilioVault para Kubernetes usando o Helm:

helm install triliovault-operator triliovault-operator/k8s-triliovault-operator \
  --namespace tvk \
  --create-namespace \
  -f 05-setup-backup-restore/assets/manifests/triliovault-values.yaml

–create-namespace \

O comando acima instala tanto o Operador TrilioVault quanto o Recurso Personalizado TriloVault Manager (TVM) usando os parâmetros fornecidos no arquivo triliovault-values.yaml. A versão do TVK é agora gerenciada pelo campo tag no arquivo 05-setup-backup-restore/assets/manifests/triliovault-values.yaml, então o comando helm sempre terá a versão mais recente do TVK.

  1. Você pode atualizar os seguintes campos em values.yaml:
  2. installTVK.applicationScope para a instalação do TVK com escopo, por exemplo, Cluster ou Namespaced
  3. installTVK.ingressConfig.host para o nome do host da interface do usuário do TVK, por exemplo, tvk-doks.com

installTVK.ComponentConfiguration.ingressController.service.type para o tipo de serviço para acessar a interface do usuário do TVK, por exemplo, NodePort ou LoadBalancer

helm ls -n tvk

Agora, verifique a implantação do seu TVK:

NAME                    NAMESPACE       REVISION        UPDATED                                 STATUS          CHART                           APP VERSION
triliovault-manager-tvk tvk             1               2022-06-08 08:30:08.490304959 +0000 UTC deployed        k8s-triliovault-2.9.2           2.9.2
triliovault-operator    tvk             1               2022-06-08 11:32:55.755395 +0300 EEST   deployed        k8s-triliovault-operator-2.9.2  2.9.2

A saída se parece com o seguinte trecho (STATUS coluna deve exibir implementado):

kubectl get deployments -n tvk

Em seguida, verifique se o TrilioVault está funcionando:

NAME                                            READY   UP-TO-DATE   AVAILABLE   AGE
k8s-triliovault-admission-webhook               1/1     1            1           83s
k8s-triliovault-control-plane                   1/1     1            1           83s
k8s-triliovault-exporter                        1/1     1            1           83s
k8s-triliovault-ingress-nginx-controller        1/1     1            1           83s
k8s-triliovault-web                             1/1     1            1           83s
k8s-triliovault-web-backend                     1/1     1            1           83s
triliovault-operator-k8s-triliovault-operator   1/1     1            1           4m22s

A saída se parece com o seguinte trecho. Todos os pods de implantação devem estar no estado Pronto.

Se a saída se parecer com isso, você instalou o TVK com sucesso. Em seguida, você aprenderá como verificar o tipo e a validade da licença, bem como como renová-la.

Licenciamento de Aplicativo TrilioVault

  • Por padrão, ao instalar o TVK via Helm, não há licença de avaliação gratuita instalada automaticamente. Você sempre pode ir ao site da Trilio e gerar uma nova licença para seu cluster que atenda às suas necessidades (por exemplo, você pode escolher o tipo de licença básica que permite executar o TrilioVault indefinidamente se a capacidade do seu cluster não exceder 10 nós). Uma licença de avaliação gratuita permite que você execute o TVK por um mês em nós de cluster ilimitados.
  • O TrilioVault é gratuito para clusters Kubernetes com até 100000 nós para usuários da DigitalOcean. Eles podem seguir os seguintes passos para criar uma licença especial disponível apenas para clientes da DO.

Exemplos de Starter Kit dependem de um tipo de licença de Cluster para funcionar corretamente.

Criar e Verificar Licenciamento de Aplicativo TVK

kubectl apply -f 05-setup-backup-restore/assets/manifests/triliovault/tvk_install_license.yaml

Execute o seguinte comando para criar uma nova licença para o seu cluster (ela é gerenciada via CRD de Licença):

O comando acima irá criar um trabalho job.batch/tvk-license-digitalocean que executará um pod tvk-license-digitalocean-828rx para buscar a licença do Servidor de Licenças Trilio e instalá-la no cluster DOKS. Após a conclusão do trabalho, ele será excluído em 60 segundos.

kubectl apply -f <YOUR_LICENSE_FILE_NAME>.yaml -n tvk

Se você estiver baixando uma licença gratuita do site da Trilio, aplique-a usando este comando:

kubectl get license -n tvk

Por favor, execute o seguinte comando para verificar se a licença está instalada e no estado Ativo no seu cluster.

NAME             STATUS   MESSAGE                                   CURRENT NODE COUNT   GRACE PERIOD END TIME   EDITION     CAPACITY   EXPIRATION TIME        MAX NODES
test-license-1   Active   Cluster License Activated successfully.   1                                            FreeTrial   100000     2023-02-25T00:00:00Z   1

A saída se parece com o seguinte. Observe o STATUS que deve ser Ativo, assim como o tipo de licença na coluna EDITION e HORA DE EXPIRAÇÃO.

kubectl describe license test-license-1 -n tvk

A licença é gerenciada via um CRD especial chamado objeto License. Você pode inspecioná-lo executando o seguinte comando:

Name:         test-license-1
Namespace:    tvk
Labels:       <none>
Annotations:
              generation: 1
              triliovault.trilio.io/creator: system:serviceaccount:tvk:k8s-triliovault
              triliovault.trilio.io/instance-id: b060660d-4851-482b-8e60-4addd260e1d3
              triliovault.trilio.io/updater:
                [{"username":"system:serviceaccount:tvk:k8s-triliovault","lastUpdatedTimestamp":"2022-02-24T06:38:21.418828262Z"}]
API Version:  triliovault.trilio.io/v1
Kind:         License
Metadata:
  Creation Timestamp:  2022-02-24T06:38:21Z
...
Status:
  Condition:
    Message:           License Key changed
    Timestamp:         2022-02-24T06:38:21Z
    Message:           Cluster License Activated successfully.
    Status:            Active
    Timestamp:         2022-02-24T06:38:21Z
  Current Node Count:  1
  Max Nodes:           1
  Message:             Cluster License Activated successfully.
  Properties:
    Active:                        true
    Capacity:                      100000
    Company:                       TRILIO-KUBERNETES-LICENSE-GEN-DIGITALOCEAN-BASIC
    Creation Timestamp:            2022-02-24T00:00:00Z
    Edition:                       FreeTrial
    Expiration Timestamp:          2023-02-25T00:00:00Z
    Kube UID:                      b060660d-4851-482b-8e60-4addd260e1d3
    License ID:                    TVAULT-5a4b42c6-953c-11ec-8116-0cc47a9fd48e
    Maintenance Expiry Timestamp:  2023-02-25T00:00:00Z
    Number Of Users:               -1
    Purchase Timestamp:            2022-02-24T00:00:00Z
    Scope:                         Cluster
...

A saída se parece com o seguinte. Observe os campos Mensagem e Capacidade, assim como a Edição.

O resultado acima também informará quando a licença expirará no campo Timestamp de Expiração e o Escopo (baseado em Cluster neste caso). Você pode optar por um tipo de licença em todo o cluster ou baseado em namespace.

Renovando a Licença do Aplicativo TVK

kubectl apply -f <YOUR_LICENSE_FILE_NAME>.yaml -n tvk

Para renovar a licença, você terá que solicitar uma nova no site da Trilio navegando até a página de licenciamento para substituir a antiga. Após preencher o formulário, você deverá receber o manifesto da licença em YAML, que pode ser aplicado ao seu cluster usando o kubectl. Os comandos a seguir pressupõem que o TVK está instalado no namespace padrão tvk (por favor, substitua os espaços reservados <> conforme necessário):

Então, você pode verificar o status da nova licença como já aprendeu através de:
kubectl get license -n tvk

# Listar primeiro as licenças do TVK disponíveis no namespace `tvk`
kubectl describe license <YOUR_LICENSE_NAME_HERE> -n tvk

# Obter informações sobre uma licença específica do namespace `tvk`

No próximo passo, você aprenderá como definir o backend de armazenamento para o TrilioVault para armazenar backups chamados de destino.

Passo 2 – Criando um Destino TrilioVault para Armazenar Backups

A typical Target definition looks like:

apiVersion: triliovault.trilio.io/v1
kind: Target
metadata:
  name: trilio-s3-target
  namespace: tvk
spec:
  type: ObjectStore
  vendor: Other
  enableBrowsing: true
  objectStoreCredentials:
    bucketName: <YOUR_DO_SPACES_BUCKET_NAME_HERE>
    region: <YOUR_DO_SPACES_BUCKET_REGION_HERE>
    url: 'https://<YOUR_DO_SPACES_BUCKET_ENDPOINT_HERE>'
    credentialSecret:
      name: trilio-s3-target
      namespace: tvk
  thresholdCapacity: 10Gi

O TrilioVault precisa primeiro saber onde armazenar seus backups. O TrilioVault se refere ao backend de armazenamento usando o termo target, e é gerenciado por meio de um CRD especial chamado Target. Os seguintes tipos de destino são suportados: S3 e NFS. Para o DigitalOcean e para o propósito do Kit Inicial, faz sentido confiar no tipo de armazenamento S3 porque é barato e escalável. Para se beneficiar de um nível aprimorado de proteção, você pode criar vários tipos de destino (tanto para S3 quanto para NFS), para que seus dados sejam mantidos seguros em vários locais, alcançando assim a redundância de backup.

  • Nesta configuração,
  • spec.type: Tipo de destino para armazenamento de backup (S3 é um armazenamento de objeto).
  • spec.vendor: Fornecedor de armazenamento de terceiros que hospeda o destino (para DigitalOcean Spaces você precisa usar Outro em vez de AWS).
  • spec.enableBrowsing: Habilitar a navegação para o destino.
  • spec.objectStoreCredentials: Define as credenciais necessárias (via credentialSecret) para acessar o armazenamento S3, bem como outros parâmetros, como região e nome do bucket.

spec.thresholdCapacity: Capacidade máxima de limite para armazenar dados de backup.

apiVersion: v1
kind: Secret
metadata:
  name: trilio-s3-target
  namespace: tvk
type: Opaque
stringData:
  accessKey: <YOUR_DO_SPACES_ACCESS_KEY_ID_HERE> Para acessar o armazenamento S3, cada destino precisa conhecer as credenciais do bucket. Um Segredo do Kubernetes também deve ser criado:
  secretKey: <YOUR_DO_SPACES_SECRET_KEY_HERE>    # o valor deve estar codificado em base64

# o valor deve estar codificado em base64

Observe que o nome do segredo é trilio-s3-target e é referenciado pelo campo spec.objectStoreCredentials.credentialSecret do CRD de Destino explicado anteriormente. O segredo pode estar no mesmo namespace onde o TrilioVault foi instalado (padrão é tvk), ou em outro namespace de sua escolha. Apenas certifique-se de referenciar o namespace corretamente. Por outro lado, certifique-se de proteger o namespace onde você armazena segredos do TrilioVault via RBAC por motivos de segurança.

Passos para criar um Destino para o TrilioVault:

cd Kubernetes-Starter-Kit-Developers

Primeiro, mude o diretório onde o repositório Git do Starter Kit foi clonado em sua máquina local:

kubectl create secret generic trilio-s3-target \
  --namespace=tvk \
  --from-literal=accessKey="<YOUR_DO_SPACES_ACCESS_KEY_HERE>" \
  --from-literal=secretKey="<YOUR_DO_SPACES_SECRET_KEY_HERE>"

Em seguida, crie o segredo do Kubernetes contendo as credenciais do seu bucket S3 de destino (substitua os espaços reservados <> conforme necessário):

code 05-setup-backup-restore/assets/manifests/triliovault/triliovault-s3-target.yaml

–from-literal=accessKey=“<AQUI_SUA_CHAVE_DE_ACESSO_DO_DO_SPACES>” \

–from-literal=secretKey=“<AQUI_SUA_CHAVE_SECRETA_DO_DO_SPACES>”

kubectl apply -f 05-setup-backup-restore/assets/manifests/triliovault/triliovault-s3-target.yaml

Em seguida, abra e inspecione o arquivo de manifesto de Destino fornecido no repositório do Starter Kit usando um editor de sua escolha (preferencialmente com suporte ao YAML lint).

Agora, por favor substitua os espaços reservados <> adequadamente para o seu bucket do DO Spaces Trilio, como bucketName, region, url e credentialSecret.

kubectl get target trilio-s3-target  -n tvk

Finalmente, salve o arquivo de manifesto e crie o objeto de Destino usando kubectl:

NAME               TYPE          THRESHOLD CAPACITY   VENDOR   STATUS      BROWSING ENABLED
trilio-s3-target   ObjectStore   10Gi                 Other    Available

Em seguida, TrilioVault irá iniciar um job de trabalhador chamado trilio-s3-target-validator responsável por validar seu bucket S3 (como disponibilidade, permissões, etc.). Se o job terminar com sucesso, o bucket é considerado saudável ou disponível e o recurso do job trilio-s3-target-validator é excluído posteriormente. Se algo der errado, o job de validador de destino do S3 é mantido em execução para que você possa inspecionar os logs e encontrar o possível problema.

Agora, por favor, prossiga e verifique se o recurso de Destino criado anteriormente está saudável:

A saída se parece com o seguinte. Observe o valor da coluna STATUS - deve ser Available, significando que está em um estado saudável.
kubectl get pods -n tvk | grep trilio-s3-target-validator

Se a saída se parecer com isso, então você configurou o objeto de destino S3 com sucesso.
No caso de o objeto de destino não se tornar saudável, você pode inspecionar os logs do Pod trilio-s3-target-validator para encontrar o problema:

# Primeiro, você precisa encontrar o validador de destino
kubectl logs pod/trilio-s3-target-validator-tio99a-6lz4q -n tvk

# A saída se parece com:

...
INFO:root:2021-11-24 09:06:50.595166: waiting for mount operation to complete.
INFO:root:2021-11-24 09:06:52.595772: waiting for mount operation to complete.
ERROR:root:2021-11-24 09:06:54.598541: timeout exceeded, not able to mount within time.
ERROR:root:/triliodata is not a mountpoint. We can't proceed further.
Traceback (most recent call last):
  File "/opt/tvk/datastore-attacher/mount_utility/mount_by_target_crd/mount_datastores.py", line 56, in main
    utilities.mount_datastore(metadata, datastore.get(constants.DATASTORE_TYPE), base_path)
  File "/opt/tvk/datastore-attacher/mount_utility/utilities.py", line 377, in mount_datastore
    mount_s3_datastore(metadata_list, base_path)
  File "/opt/tvk/datastore-attacher/mount_utility/utilities.py", line 306, in mount_s3_datastore
    wait_until_mount(base_path)
  File "/opt/tvk/datastore-attacher/mount_utility/utilities.py", line 328, in wait_until_mount
    base_path))
Exception: /triliodata is not a mountpoint. We can't proceed further.
...

#trilio-s3-target-validator-tio99a-6lz4q 1/1 Executando 0 104s

# Agora, busque os dados de logs

O resultado será esta exceção:

Em seguida, você descobrirá o console web do TVK, que é uma adição útil para ajudá-lo a gerenciar facilmente operações de backup e restauração, entre muitas outras.

Passo 3 – Conhecendo o Console de Gerenciamento Web do TVK

Embora seja possível gerenciar operações de backup e restauração completamente via CLI usando kubectl e CRDs, o TVK fornece um Console de Gerenciamento Web para realizar as mesmas operações via GUI. O console de gerenciamento simplifica tarefas comuns por meio de operações de apontar e clicar, fornece uma melhor visualização e inspeção dos objetos do cluster do TVK, bem como para criar planos de recuperação de desastres (ou DRPs).

A instalação baseada em Helm coberta no Passo 1 – Instalando o TrilioVault para Kubernetes já cuidou da instalação dos componentes necessários para o console de gerenciamento web.

kubectl get svc -n tvk

Obtendo Acesso ao Console de Gerenciamento Web da TVK

NAME                                                            TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)                      AGE
k8s-triliovault-admission-webhook                               ClusterIP   10.245.202.17    <none>        443/TCP                      13m
k8s-triliovault-ingress-nginx-controller                        NodePort    10.245.192.140   <none>        80:32448/TCP,443:32588/TCP   13m
k8s-triliovault-ingress-nginx-controller-admission              ClusterIP   10.3.20.89       <none>        443/TCP                      13m
k8s-triliovault-web                                             ClusterIP   10.245.214.13    <none>        80/TCP                       13m
k8s-triliovault-web-backend                                     ClusterIP   10.245.10.221    <none>        80/TCP                       13m
triliovault-operator-k8s-triliovault-operator-webhook-service   ClusterIP   10.245.186.59    <none>        443/TCP                      16m

Para poder acessar o console e explorar os recursos que ele oferece, você precisa encaminhar a porta do serviço do controlador de entrada para a TVK.

Primeiro, você precisa identificar o serviço ingress-nginx-controller do namespace tvk:
installTVK:
  ingressConfig:
    host: "tvk-doks.com"

A saída se parece com o seguinte. Procure pela linha k8s-triliovault-ingress-nginx-controller e observe que ele escuta na porta 80 na coluna PORT(S).

127.0.0.1 tvk-doks.com

A TVK está usando um Controlador de Ingresso Nginx para rotear o tráfego para os serviços do console de gerenciamento web. O roteamento é baseado em host, e o nome do host é tvk-doks.com conforme definido no arquivo de valores do Helm do Starter Kit:

kubectl port-forward svc/k8s-triliovault-ingress-nginx-controller 8080:80 -n tvk

# O nome do host a ser usado ao acessar o console web via controlador de ingresso da TVK nginx

Tendo as informações acima em mãos, por favor, edite o arquivo /etc/hosts e adicione esta entrada:
doctl k8s cluster list

Em seguida, crie o encaminhamento de porta para o serviço do controlador de entrada da TVK:
doctl kubernetes cluster kubeconfig show <YOUR_CLUSTER_NAME_HERE> > config_<YOUR_CLUSTER_NAME_HERE>.yaml

Por fim, exporte o arquivo kubeconfig para o seu cluster DOKS. Este passo é necessário para que o console web possa autenticá-lo.

DOKS_CLUSTER_NAME="$(doctl k8s cluster list --no-header --format Name)"
doctl kubernetes cluster kubeconfig show $DOKS_CLUSTER_NAME > config_${DOKS_CLUSTER_NAME}.yaml

# Listar os clusters disponíveis

# Salvar a configuração do cluster em YAML

Se você tiver apenas um cluster, execute o seguinte comando:

Após seguir esses passos, você pode acessar o console no seu navegador da web navegando para: http://tvk-doks.com:8080. Quando solicitado pelo arquivo kubeconfig, selecione aquele que você criou no último comando acima.

Por favor, mantenha o arquivo kubeconfig gerado seguro porque ele contém dados sensíveis.

  • Explorando a Interface de Usuário do Console Web TVK
  • Explore cada seção à esquerda, como:
  • Gerenciamento de Cluster: Isso mostra a lista de clusters primários e outros clusters com instâncias TVK, adicionados ao cluster OVH primário usando o recurso de Gerenciamento Multi-Cluster.
  • Backup & Recuperação: Este é o painel principal que lhe dá uma visão geral do cluster inteiro, como Espaços de nomes descobertos, Aplicações, Lista de planos de backup, Destinos, Ganchos, Políticas, etc.

Monitoramento: Isso tem duas opções – Monitoramento do TrilioVault e Monitoramento do Velero se o usuário tiver Velero configurado em seu cluster OVH.

Recuperação de Desastres: Permite que você gerencie e execute operações de recuperação de desastres.

Recuperação de Desastres: Permite que você gerencie e execute operações de recuperação de desastres.

Você também pode ver o Destino S3 criado anteriormente, navegando até Backup & Recuperação -> Destinos -> <Namespace> tvk no menu suspenso no topo.

Indo mais adiante, você pode navegar pelo destino e listar os backups disponíveis clicando no botão Ações à direita e, em seguida, selecionando a opção Iniciar Navegador do menu pop-up. Para isso funcionar, o destino deve ter a sinalização enableBrowsing definida como true.

Para obter mais informações e recursos disponíveis, consulte a documentação oficial da Interface de Usuário do Console de Gerenciamento Web do TVK.

Em seguida, você aprenderá como realizar operações de backup e restauração para casos de uso específicos.

Passo 4 – Exemplo de Backup e Restauração com Namespace

apiVersion: triliovault.trilio.io/v1
kind: BackupPlan
metadata:
  name: ambassador-helm-release-backup-plan
  namespace: ambassador
spec:
  backupConfig:
    target:
      name: trilio-s3-target
      namespace: tvk
  backupPlanComponents:
    helmReleases:
      - ambassador

Neste passo, você aprenderá como criar um backup único para um namespace inteiro (ambassador neste caso) do seu cluster DOKS e restaurá-lo posteriormente, garantindo que todos os recursos sejam recriados. O TVK possui um recurso que permite realizar backups em um nível mais alto do que apenas namespaces.

  • Criando o Backup do Helm Release do Ambassador
  • Para realizar backups para um único aplicativo no nível do namespace (ou release do Helm), é necessário um BackupPlan seguido por um Backup CRD. BackupPlan é uma definição do ‘o que’, ‘onde’, ‘para’ e ‘como’ do processo de backup, mas não realiza o backup real. O Backup CRD é responsável por acionar o processo de backup real, conforme ditado pela especificação do BackupPlan.
  • Nesta configuração,

A typical Backup CRD looks like below:

apiVersion: triliovault.trilio.io/v1
kind: Backup
metadata:
  name: ambassador-helm-release-full-backup
  namespace: ambassador
spec:
  type: Full
  backupPlan:
    name: ambassador-helm-release-backup-plan
    namespace: ambassador

spec.backupConfig.target.name: Indica ao TVK qual nome de destino usar para armazenar backups.

  • spec.backupConfig.target.namespace: Indica ao TVK em qual namespace o destino foi criado.
  • spec.backupComponents: Define uma lista de recursos para fazer backup.

Nesta configuração,

spec.type: Especifica o tipo de backup.

spec.backupPlan: Especifica o BackupPlan que este Backup deve usar.

cd Kubernetes-Starter-Kit-Developers

Passos para iniciar o backup único do Ambassador Helm release:

code 05-setup-backup-restore/assets/manifests/triliovault/ambassador-helm-release-backup-plan.yaml
code 05-setup-backup-restore/assets/manifests/triliovault/ambassador-helm-release-backup.yaml

Primeiro, certifique-se de que o Ambassador Edge Stack está implantado em seu cluster seguindo as etapas do tutorial do Ambassador Ingress.

kubectl apply -f 05-setup-backup-restore/assets/manifests/triliovault/ambassador-helm-release-backup-plan.yaml
kubectl apply -f 05-setup-backup-restore/assets/manifests/triliovault/ambassador-helm-release-backup.yaml

Em seguida, mude para o diretório onde o repositório Git do Starter Kit foi clonado em sua máquina local:

kubectl get backupplan ambassador-helm-release-backup-plan -n ambassador

Depois, abra e inspecione os arquivos de manifesto do Ambassador BackupPlan e Backup fornecidos no repositório do Starter Kit usando um editor de sua escolha (preferencialmente com suporte a lint YAML).

NAME                                  TARGET             ...   STATUS
ambassador-helm-release-backup-plan   trilio-s3-target   ...   Available

Finalmente, crie os recursos BackupPlan e Backup usando kubectl.

kubectl get backup ambassador-helm-release-full-backup -n ambassador

Agora, inspecione o status do BackupPlan (direcionando o lançamento do Helm ambassador) usando kubectl:

NAME                                  BACKUPPLAN                            BACKUP TYPE   STATUS       ...
ambassador-helm-release-full-backup   ambassador-helm-release-backup-plan   Full          InProgress   ...

A saída é semelhante ao seguinte. Observe o valor da coluna STATUS, que deve ser definido como Available.

Em seguida, verifique o status do objeto Backup usando kubectl:
NAME                                  BACKUPPLAN                            BACKUP TYPE   STATUS      ...   PERCENTAGE
ambassador-helm-release-full-backup   ambassador-helm-release-backup-plan   Full          Available   ...   100

A saída é semelhante ao seguinte. Observe o valor da coluna STATUS, que deve ser definido como InProgress, bem como o BACKUP TYPE definido como Full.

s3cmd ls s3://trilio-starter-kit --recursive

Depois que todos os componentes de liberação do embaixador Helm terminarem de serem enviados para o destino S3, você deve obter estes resultados:

2021-11-25 07:04           28  s3://trilio-starter-kit/6c68af15-5392-45bb-a70b-b26a93605bd9/
2021-11-25 07:04           28  s3://trilio-starter-kit/6c68af15-5392-45bb-a70b-b26a93605bd9/5ebfffb5-442a-455c-b0de-1db98e18b425/
2021-11-25 07:04          311  s3://trilio-starter-kit/6c68af15-5392-45bb-a70b-b26a93605bd9/5ebfffb5-442a-455c-b0de-1db98e18b425/backup-namespace.json.manifest.00000004
2021-11-25 07:04          302  s3://trilio-starter-kit/6c68af15-5392-45bb-a70b-b26a93605bd9/5ebfffb5-442a-455c-b0de-1db98e18b425/backup.json.manifest.00000004
2021-11-25 07:04          305  s3://trilio-starter-kit/6c68af15-5392-45bb-a70b-b26a93605bd9/5ebfffb5-442a-455c-b0de-1db98e18b425/backupplan.json.manifest.00000004
2021-11-25 07:04           28  s3://trilio-starter-kit/6c68af15-5392-45bb-a70b-b26a93605bd9/5ebfffb5-442a-455c-b0de-1db98e18b425/custom/
2021-11-25 07:04           28  s3://trilio-starter-kit/6c68af15-5392-45bb-a70b-b26a93605bd9/5ebfffb5-442a-455c-b0de-1db98e18b425/custom/metadata-snapshot/
2021-11-25 07:04          330  s3://trilio-starter-kit/6c68af15-5392-45bb-a70b-b26a93605bd9/5ebfffb5-442a-455c-b0de-1db98e18b425/custom/metadata-snapshot/metadata.json.manifest.00000002
...

# A saída se parece com (observe que o `STATUS` mudou para `Disponível`, e `PERCENTAGE` é `100`)

kubectl get pods -n ambassador | grep metamover

Se a saída se parecer com isso, você fez backup com sucesso da liberação do Helm do embaixador. Você pode prosseguir e ver como o TrilioVault armazena metadados do Kubernetes listando o conteúdo do Bucket S3 do TrilioVault. Por exemplo, você pode usar s3cmd:

ambassador-helm-release-full-backup-metamover-mg9gl0--1-2d6wx   1/1     Running   0          4m32s

A saída se parece com o seguinte. Observe que a listagem contém os manifestos JSON e UIDs, representando objetos do Kubernetes.

kubectl logs pod/ambassador-helm-release-full-backup-metamover-mg9gl0--1-2d6wx -n ambassador -f

No caso de o backup não ficar disponível, você pode inspecionar os logs do Pod metamover para encontrar o problema:

...
{"component":"meta-mover","file":"pkg/metamover/snapshot/parser/commons.go:1366","func":"github.com/trilioData/k8s-triliovault/pkg/metamover/snapshot/parser.(*Component).ParseForDataComponents","level":"info","msg":"Parsing data components of resource rbac.authorization.k8s.io/v1, Kind=ClusterRoleBinding: [edge-stack]","time":"2022-06-14T06:20:56Z"}
{"component":"meta-mover","file":"pkg/metamover/snapshot/parser/commons.go:1366","func":"github.com/trilioData/k8s-triliovault/pkg/metamover/snapshot/parser.(*Component).ParseForDataComponents","level":"info","msg":"Parsing data components of resource rbac.authorization.k8s.io/v1, Kind=RoleBinding: [edge-stack-agent-config]","time":"2022-06-14T06:20:56Z"}
...

A saída se parece com:

Agora, obtenha os dados de logs:

A saída se parece com o seguinte.

helm delete ambassador -n ambassador

Finalmente, você pode verificar que o backup está disponível também no console da web navegando até Gerenciamento de Recursos -> Embaixador -> Planos de Backup. Observe que está no estado Disponível e que a liberação do Helm do embaixador foi copiada no subexibição Detalhes do Componente.

kubectl get all -n ambassador

Excluindo a Liberação do Helm do Embaixador e Recursos

curl -Li http://quote.starter-kit.online/quote/
curl -Li http://echo.starter-kit.online/echo/

Agora, vá em frente e simule um desastre deletando intencionalmente o lançamento do Helm do ambassador:

Em seguida, verifique se os recursos do namespace foram excluídos (a listagem deve estar vazia):

Se estiver restaurando o mesmo namespace, verifique se os componentes do aplicativo original foram removidos. Especialmente o PVC do aplicativo deve ser excluído.

apiVersion: triliovault.trilio.io/v1
kind: Restore
metadata:
  name: ambassador-helm-release-restore
  namespace: ambassador
spec:
  source:
    type: Backup
    backup:
      name: ambassador-helm-release-full-backup
      namespace: ambassador
  skipIfAlreadyExists: true

Se estiver a restaurar para outro cluster (cenário de migração), certifique-se de que o TrilioVault para Kubernetes está em execução no namespace/cluster remoto também. Para restaurar num novo cluster (onde o CR de Backup não existe), source.type deve ser definido como location. Consulte a Seção de Definição de Recurso Personalizado para Restauração para ver um exemplo de restauração por localização.

  • Ao excluir o namespace ambassador, o recurso de balanceamento de carga associado ao serviço de embaixador também será excluído. Portanto, ao restaurar o serviço ambassador, o LB será recriado pela DigitalOcean. O problema é que você obterá um endereço de IP NOVO para o seu LB, então será necessário ajustar os registros A para receber tráfego nos seus domínios hospedados no cluster.
  • Para restaurar um Backup específico, é necessário criar um CRD de Restore. O CRD de Restauração típico é semelhante ao seguinte:
  • Nesta configuração,

spec.source.type: Especifica que tipo de backup restaurar.

spec.source.backup: Contém uma referência ao objeto de backup a partir do qual restaurar.

code 05-setup-backup-restore/assets/manifests/triliovault/ambassador-helm-release-restore.yaml

spec.skipIfAlreadyExists: Especifica se deve pular a restauração de um recurso se já existir no namespace restaurado.

kubectl apply -f 05-setup-backup-restore/assets/manifests/triliovault/ambassador-helm-release-restore.yaml

Restaurar permite que você restaure o último Backup bem-sucedido para uma aplicação. É usado para restaurar um único namespace ou release Helm, protegido pelo CRD de Backup. O CRD de Backup é identificado pelo seu nome ambassador-helm-release-full-backup.

kubectl get restore ambassador-helm-release-restore -n ambassador

Primeiro, inspecione o exemplo do CRD de Restauração no repositório Git do Starter Kit:

NAME                              STATUS      DATA SIZE   START TIME             END TIME               PERCENTAGE COMPLETED   DURATION
ambassador-helm-release-restore   Completed   0           2021-11-25T15:06:52Z   2021-11-25T15:07:35Z   100                    43.524191306s

Em seguida, crie o recurso de Restauração usando kubectl:

Por fim, inspecione o status do objeto de Restauração:

A saída se parece com o seguinte. Observe a coluna STATUS definida como Completed, assim como o PERCENTAGE COMPLETED definido como 100.

kubectl get all -n ambassador

Se a saída se parecer com isso, então o processo de restauração do release Helm ambassador foi concluído com sucesso.

NAME                                    READY   STATUS    RESTARTS   AGE
pod/ambassador-5bdc64f9f6-42wzr         1/1     Running   0          9m58s
pod/ambassador-5bdc64f9f6-nrkzd         1/1     Running   0          9m58s
pod/ambassador-agent-bcdd8ccc8-ktmcv    1/1     Running   0          9m58s
pod/ambassador-redis-64b7c668b9-69drs   1/1     Running   0          9m58s

NAME                       TYPE           CLUSTER-IP       EXTERNAL-IP     PORT(S)                      AGE
service/ambassador         LoadBalancer   10.245.173.90    157.245.23.93   80:30304/TCP,443:30577/TCP   9m59s
service/ambassador-admin   ClusterIP      10.245.217.211   <none>          8877/TCP,8005/TCP            9m59s
service/ambassador-redis   ClusterIP      10.245.77.142    <none>          6379/TCP                     9m59s

NAME                               READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/ambassador         2/2     2            2           9m59s
deployment.apps/ambassador-agent   1/1     1            1           9m59s
deployment.apps/ambassador-redis   1/1     1            1           9m59s

NAME                                          DESIRED   CURRENT   READY   AGE
replicaset.apps/ambassador-5bdc64f9f6         2         2         2       9m59s
replicaset.apps/ambassador-agent-bcdd8ccc8    1         1         1       9m59s
replicaset.apps/ambassador-redis-64b7c668b9   1         1         1       9m59s

Verificando a Integridade das Aplicações após a Restauração

kubectl get hosts -n ambassador

Verifique se todos os recursos do namespace ambassador estão no lugar e em execução:

NAME         HOSTNAME                   STATE   PHASE COMPLETED   PHASE PENDING   AGE
echo-host    echo.starter-kit.online    Ready                                     11m
quote-host   quote.starter-kit.online   Ready                                     11m

A saída se parece com:

kubectl get mappings -n ambassador

Obtenha os hosts do ambassador:

NAME                          SOURCE HOST                SOURCE PREFIX                               DEST SERVICE     STATE   REASON
ambassador-devportal                                     /documentation/                             127.0.0.1:8500
ambassador-devportal-api                                 /openapi/                                   127.0.0.1:8500
ambassador-devportal-assets                              /documentation/(assets|styles)/(.*)(.css)   127.0.0.1:8500
ambassador-devportal-demo                                /docs/                                      127.0.0.1:8500
echo-backend                  echo.starter-kit.online    /echo/                                      echo.backend
quote-backend                 quote.starter-kit.online   /quote/                                     quote.backend

A saída se parece com o seguinte. O STATE deve ser Ready, assim como a coluna HOSTNAME apontando para o nome de host totalmente qualificado.

Obtenha os mapeamentos do ambassador:

curl -Li http://quote.starter-kit.online/quote/
curl -Li http://echo.starter-kit.online/echo/

A saída se parece com o seguinte. Observe o echo-backend, que está mapeado para o host echo.starter-kit.online e o prefixo de origem /echo/, o mesmo para quote-backend.

Agora, você precisa atualizar seus registros DNS A, pois o recurso do balanceador de carga da DigitalOcean foi recriado e recebeu um novo IP externo atribuído.

Por fim, verifique se as aplicações backend respondem às solicitações HTTP também. Consulte Criando os Serviços Backend do Ambassador Edge Stack em relação às aplicações backend utilizadas no tutorial Starter Kit.

O próximo passo trata do backup e restauração de todo o cluster.

Passo 5 – Exemplo de Backup e Restauração do Cluster Inteiro

A typical ClusterBackupPlan manifest targeting multiple namespaces looks like this:

apiVersion: triliovault.trilio.io/v1
kind: ClusterBackupPlan
metadata:
  name: starter-kit-cluster-backup-plan
  namespace: tvk
spec:
  backupConfig:
    target:
      name: trilio-s3-target
      namespace: tvk
  backupComponents:
    - namespace: ambassador
    - namespace: backend
    - namespace: monitoring

Neste passo, você simulará um cenário de recuperação de desastres. O cluster completo do DOKS será excluído e, em seguida, as aplicações importantes serão restauradas a partir de um backup anterior.

Criando o Backup do Cluster DOKS

cd Kubernetes-Starter-Kit-Developers

A ideia principal aqui é realizar um backup do cluster DOKS incluindo todos os namespaces importantes que contêm suas aplicações e configurações essenciais.

code 05-setup-backup-restore/assets/manifests/triliovault/starter-kit-cluster-backup-plan.yaml
code 05-setup-backup-restore/assets/manifests/triliovault/starter-kit-cluster-backup.yaml

Observe que o namespace kube-system (ou outros namespaces relacionados ao cluster DOKS) não está incluído na lista. Geralmente, esses não são necessários, a menos que haja um caso especial exigindo que algumas configurações sejam persistidas nesse nível.

kubectl apply -f 05-setup-backup-restore/assets/manifests/triliovault/starter-kit-cluster-backup-plan.yaml
kubectl apply -f 05-setup-backup-restore/assets/manifests/triliovault/starter-kit-cluster-backup.yaml

Primeiro, altere o diretório onde o repositório Git do Starter Kit foi clonado em sua máquina local:

kubectl get clusterbackupplan starter-kit-cluster-backup-plan -n tvk

Em seguida, abra e inspecione os arquivos de manifesto ClusterBackupPlan e ClusterBackup fornecidos no repositório Starter Kit usando um editor de sua escolha (preferencialmente com suporte a lint YAML).

NAME                              TARGET             ...   STATUS
starter-kit-cluster-backup-plan   trilio-s3-target   ...   Available

Por fim, crie os recursos ClusterBackupPlan e ClusterBackup usando o kubectl:

kubectl get clusterbackup starter-kit-cluster-backup -n tvk

Agora, inspecione o status do ClusterBackupPlan usando o kubectl:

NAME                        BACKUPPLAN                        BACKUP TYPE   STATUS      ...   PERCENTAGE COMPLETE
starter-kit-cluster-backup  starter-kit-cluster-backup-plan   Full          Available   ...   100

A saída parece semelhante ao seguinte. Observe o valor da coluna STATUS, que deve ser definido como Available.

Em seguida, verifique o status do ClusterBackup usando o kubectl:

A saída parece semelhante ao seguinte. Observe o valor da coluna STATUS, que deve ser definido como Available, assim como o PERCENTAGE COMPLETE definido como 100.

Se a saída se parecer com a acima, então todos os seus namespaces de aplicativos importantes foram salvos com sucesso.

Pode levar um tempo para o backup completo do cluster ser concluído, dependendo de quantos namespaces e recursos associados estão envolvidos no processo.

Você também pode abrir o painel principal do console da web e inspecionar o backup de multi-namespace (observe como todos os namespaces importantes que foram salvos estão destacados em verde, em uma estrutura de favo de mel):

doctl kubernetes cluster delete <DOKS_CLUSTER_NAME>

Recriando o Cluster DOKS e Restaurando Aplicações

Um aspecto importante a ter em mente é que sempre que você destruir um cluster DOKS e depois restaurá-lo, um novo Balanceador de Carga com um novo IP externo é criado também quando a TVK restaura seu controlador de entrada. Portanto, certifique-se de atualizar seus registros A DNS da DigitalOcean de acordo.

Agora, exclua todo o cluster DOKS (certifique-se de substituir os espaços reservados <> conforme necessário):

Em seguida, recrie o cluster conforme descrito em Configurar o Kubernetes da DigitalOcean.

Para realizar a operação de restauração, você precisa instalar o aplicativo TVK conforme descrito em Passo 1 – Instalando o TrilioVault para Kubernetes. É importante usar a mesma versão do Helm Chart.

Depois que a instalação for concluída com sucesso, configure o destino TVK conforme descrito em Passo 2 – Criando um Destino TrilioVault para Armazenar Backups e aponte-o para o mesmo bucket S3 onde estão localizados os seus dados de backup. Além disso, certifique-se de que a navegação no destino esteja habilitada.

Em seguida, verifique e ative uma nova licença conforme descrito na seção Licenciamento da Aplicação TrilioVault.

Para obter acesso à interface de usuário do console web, consulte a seção Obtendo Acesso ao Console de Gerenciamento Web do TVK.

Depois, navegue até Gerenciamento de Recursos -> Namespace TVK -> Destinos (no caso do Kit Inicial, o Namespace TVK é tvk):

Prosseguindo, navegue até o destino e liste os backups disponíveis clicando no botão Ações. Em seguida, selecione a opção Iniciar Navegação no menu pop-up. Para que isso funcione, o destino deve ter a sinalização enableBrowsing configurada como true.

Agora, clique no item starter-kit-cluster-backup-plan da lista e, em seguida, clique e expanda o item starter-kit-cluster-backup na janela lateral direita:

kubectl get all --all-namespaces

Para iniciar o processo de restauração, clique no botão Restaurar.

Verificando o Estado das Aplicações do Cluster DOKS

curl -Li http://quote.starter-kit.online/quote/
curl -Li http://echo.starter-kit.online/echo/

Primeiro, verifique todos os recursos do Kubernetes do cluster.

Em seguida, certifique-se de que seus registros A do DNS estejam atualizados para apontar para o novo IP externo do balanceador de carga.

Por fim, as aplicações do backend devem responder às solicitações HTTP também. Consulte Criando os Serviços de Backend da Pilha de Borda do Embaixador em relação às aplicações do backend usadas no tutorial do Kit Inicial.

No próximo passo, você aprenderá como realizar backups agendados (ou automáticos) para as aplicações do seu cluster DOKS.

kind: Policy
apiVersion: triliovault.trilio.io/v1
metadata:
  name: scheduled-backup-every-5min
  namespace: tvk
spec:
  type: Schedule
  scheduleConfig:
    schedule:
      - "*/5 * * * *" Passo 6 - Backups Agendados

Fazer backups automaticamente com base em um cronograma é uma característica muito útil. Isso permite que você volte no tempo e restaure o sistema para um estado de funcionamento anterior se algo der errado. Esta seção fornece um exemplo de um backup automático em um cronograma de 5 minutos (o namespace kube-system foi selecionado).

apiVersion: triliovault.trilio.io/v1
kind: ClusterBackupPlan
metadata:
  name: kube-system-ns-backup-plan-5min-schedule
  namespace: tvk
spec:
  backupConfig:
    target:
      name: trilio-s3-target
      namespace: tvk
    schedulePolicy:
      fullBackupPolicy:
        name: scheduled-backup-every-5min
        namespace: tvk
  backupComponents:
    - namespace: kube-system
    - namespace: backend

Primeiro, você precisa criar um CRD Policy do tipo Schedule que define o agendamento de backup no formato cron (igual ao cron do Linux). As políticas de agendamento podem ser usadas para CRDs BackupPlan ou ClusterBackupPlan. Um CRD de política de agendamento típico parece com abaixo (define um agendamento de 5 minutos):

# acionar a cada 5 minutos

Em seguida, você pode aplicar a política de agendamento a um CRD ClusterBackupPlan, por exemplo, como visto abaixo:

kubectl apply -f 05-setup-backup-restore/assets/manifests/triliovault/scheduled-backup-every-5min.yaml

Você pode notar que é um CRD básico de ClusterBackupPlan, fazendo referência ao CRD de Policy definido anteriormente por meio do campo spec.backupConfig.schedulePolicy. Você pode ter políticas separadas criadas para backups completos ou incrementais, daí as fullBackupPolicy ou incrementalBackupPolicy podem ser especificadas na especificação.

kubectl get policies -n tvk

Agora, por favor, crie a política de agendamento usando o manifesto de exemplo fornecido pelo tutorial do Starter Kit.

NAME                          POLICY     DEFAULT
scheduled-backup-every-5min   Schedule   false

Altere o diretório para onde o repositório Git do Starter Kit foi clonado em sua máquina local.



Verifique se o recurso da política foi criado:


kubectl apply -f 05-setup-backup-restore/assets/manifests/triliovault/kube-system-ns-backup-plan-scheduled.yaml



A saída se parece com o seguinte. Observe o tipo POLICY definido como Schedule.


kubectl apply -f 05-setup-backup-restore/assets/manifests/triliovault/kube-system-ns-backup-scheduled.yaml

Finalmente, crie os recursos para os backups agendados do namespace kube-system:

kubectl get clusterbackupplan kube-system-ns-backup-plan-5min-schedule -n tvk

# Crie primeiro o plano de backup para o namespace kube-system

NAME                                       TARGET             ...   FULL BACKUP POLICY            STATUS
kube-system-ns-backup-plan-5min-schedule   trilio-s3-target   ...   scheduled-backup-every-5min   Available

# Crie e acione o backup agendado para o namespace kube-system

kubectl get clusterbackup kube-system-ns-full-backup-scheduled -n tvk

Verifique o status do plano de backup agendado para kube-system:

NAME                                   BACKUPPLAN                                 BACKUP TYPE   STATUS      ...
kube-system-ns-full-backup-scheduled   kube-system-ns-backup-plan-5min-schedule   Full          Available   ...

A saída parece semelhante ao seguinte. Observe o valor FULL BACKUP POLICY definido para o recurso de política de backup agendado previamente criado scheduled-backup-every-5min, assim como o STATUS que deve ser Available.

Verifique o status do backup agendado para kube-system:

A saída parece semelhante ao seguinte. Observe o valor BACKUPPLAN definido para o recurso de plano de backup previamente criado, assim como o STATUS que deve ser Available.

Agora, você pode verificar se os backups são executados em intervalos regulares (5 minutos), consultando o recurso de backup do cluster e inspecionando a coluna START TIME (kubectl get clusterbackup -n tvk). Deve refletir o delta de 5 minutos, como destacado na imagem abaixo:

No próximo passo, você aprenderá como configurar uma política de retenção para seus backups.

Passo 7 – Política de Retenção de Backups

apiVersion: triliovault.trilio.io/v1
kind: Policy
metadata:
  name: sample-policy
spec:
  type: Retention
  retentionConfig:
    latest: 2
    weekly: 1
    dayOfWeek: Wednesday
    monthly: 1
    dateOfMonth: 15
    monthOfYear: March
    yearly: 1

A política de retenção permite que você defina o número de backups a serem retidos e a cadência para excluir backups de acordo com os requisitos de conformidade. O CRD de política de retenção fornece uma especificação YAML simples para definir o número de backups a serem retidos em termos de dias, semanas, meses, anos, mais recentes, etc.

  • Usando Políticas de Retenção
  • As políticas de retenção podem ser usadas para os CRDs BackupPlan ou ClusterBackupPlan. Um manifesto típico de Policy para o tipo Retention se parece com:
  • A política de retenção acima se traduz para:
  • A cada semana, manter um backup em cada quarta-feira.

A cada mês, manter um backup no dia 15.

A typical ClusterBackupPlan example configuration that has a retention set looks like:

apiVersion: triliovault.trilio.io/v1
kind: ClusterBackupPlan
metadata:
  name: kube-system-ns-backup-plan-5min-schedule
  namespace: tvk
spec:
  backupConfig:
    target:
      name: trilio-s3-target
      namespace: tvk
    retentionPolicy:
      fullBackupPolicy:
        name: ambassador-backups-retention-policy
        namespace: tvk
  backupComponents:
    - namespace: kube-system
    - namespace: backend

A cada ano, manter um backup todo março.

No geral, deve haver 2 backups mais recentes disponíveis.

O fluxo básico para criar um recurso de política de retenção segue o mesmo caminho que para backups programados. Você precisa de um CRD BackupPlan ou ClusterBackupPlan definido para referenciar a política de retenção e, em seguida, ter um objeto Backup ou ClusterBackup para acionar o processo.

apiVersion: triliovault.trilio.io/v1
kind: Policy
metadata:
  name: garbage-collect-policy
spec:
  type: Cleanup
  cleanupConfig:
    backupDays: 5

Observe que ele usa um campo retentionPolicy para referenciar a política em questão. Claro, você pode ter um plano de backup que tenha ambos os tipos de políticas definidas, para que possa realizar backups programados, bem como lidar com estratégias de retenção.

Usando Políticas de Limpeza

Você precisa de uma maneira de coletar o lixo de todos aqueles objetos que não estão mais em uso. Para isso, você precisa introduzir o CRD Política de Limpeza:

A política de limpeza acima deve ser definida no namespace de instalação do TVK. Em seguida, um trabalho cron é criado automaticamente para você, que é executado a cada 30 minutos e deleta backups falhados com base no valor especificado para diasdebackup dentro do campo spec.

Conclusão

  • Neste tutorial, você aprendeu como realizar backups únicos e programados, e restaurar tudo.
  • Todas as tarefas e operações básicas explicadas neste tutorial têm como objetivo fornecer uma introdução básica e compreensão do que o TrilioVault para Kubernetes é capaz de fazer.
  • Saiba Mais

Backup e Restauração de Dados DOKS usando Velero

Source:
https://www.digitalocean.com/community/developer-center/how-to-perform-backup-and-restore-using-triliovault-in-doks