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) no seu cluster DOKS, criar backups e recuperar a partir de um backup caso algo dê errado. Você pode fazer backup de todo o seu cluster ou optar por backups baseados em namespace ou rótulo.

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çamento 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 suas 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.

Índice

Pré-requisitos

Para completar este tutorial, você precisa dos seguintes:

  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 lançamentos 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 de 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 a CRD VolumeSnapshot não estiver instalada, consulte Instalando CRDs de 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

Além disso, certifique-se de que a 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 de v1beta1 quanto de v1 (se não estiver instalado, consulte Instalando CRDs de 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 TrilioVault para Kubernetes

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

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

  • Através do Operador TrilioVault. Você define um CRD TrilioVaultManager que diz 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 que é totalmente gerenciado pelo Helm, (coberto neste tutorial).

Instalando o TrilioVault usando Helm

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

Primeiro, clone o repositório Git do Starter Kit e mude 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

O resultado 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

Finalmente, instale o TrilioVault para Kubernetes usando 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 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 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 tipo de serviço para acessar a interface do usuário do TVK, por exemplo, NodePort ou LoadBalancer

helm ls -n tvk

Agora, verifique sua implantação do 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ásico 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 as seguintes etapas 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.

Criando e Verificando 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 criará um trabalho job.batch/tvk-license-digitalocean que executará um pod tvk-license-digitalocean-828rx para obter a licença do Servidor de Licenças da 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, bem como o tipo de licença na coluna EDITION e o TEMPO 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, bem como a Edição.

A saída 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 de escopo cluster ou baseado em namespace.

Renovando a Licença de 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ê deve receber o manifesto YAML da Licença, que pode ser aplicado ao seu cluster usando kubectl. Os comandos a seguir assumem que o TVK está instalado no namespace padrão tvk (substitua os espaços reservados <> conforme necessário):

Em seguida, você pode verificar o status da nova licença como já aprendido anteriormente através de:
kubectl get license -n tvk

# Listar primeiro as licenças 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 chamado de alvo.

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 destino, e é gerenciado por meio de um CRD especial chamado Destino. 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 S3 quanto NFS), para que seus dados sejam mantidos em vários lugares, alcançando assim a redundância de backup.

  • Nesta configuração,
  • spec.type: Tipo de destino para armazenamento de backup (S3 é um armazenamento de objetos).
  • spec.vendor: Fornecedor de armazenamento de terceiros que hospeda o destino (para o DigitalOcean Spaces, você precisa usar Outro em vez de AWS).
  • spec.enableBrowsing: Ativar navegação para o destino.
  • spec.objectStoreCredentials: Define as credenciais necessárias (via credentialSecret) para acessar o armazenamento S3, além de 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 para tvk), ou em outro namespace de sua escolha. Apenas certifique-se de referenciar o namespace corretamente. Por outro lado, por favor, certifique-se de proteger o namespace onde você armazena os segredos do TrilioVault via RBAC por motivos de segurança.

Passos para criar um Destino para o TrilioVault:

cd Kubernetes-Starter-Kit-Developers

Primeiro, altere 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=“<SEU_ACCESS_KEY_DO_DO_SPACES_AQUI>” \

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

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 a lint YAML).

Agora, substitua os marcadores <> conforme necessário para o seu bucket DO Spaces Trilio, como bucketName, region, url e credentialSecret.

kubectl get target trilio-s3-target  -n tvk

Por fim, 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, o TrilioVault irá iniciar um job de worker chamado trilio-s3-target-validator responsável por validar o 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 de job trilio-s3-target-validator é excluído em seguida. Se algo der errado, o job validador de destino S3 permanece em execução para que você possa inspecionar os logs e encontrar o possível problema.

Agora, por favor, 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, o que significa que está em um estado saudável.
kubectl get pods -n tvk | grep trilio-s3-target-validator

Se a saída for semelhante a esta, então você configurou o objeto de destino S3 com sucesso.
No caso do 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 Em Execução 0 104s

# Agora, obtenha os dados de logs

A saída será essa exceção:

Em seguida, você descobrirá o console da web 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 da TVK

Embora seja possível gerenciar operações de backup e restauração completamente via CLI usando o kubectl e CRDs, a 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 clique e oferece melhor visualização e inspeção de objetos do cluster TVK, além de criar planos de recuperação de desastres (ou DRPs).

A instalação baseada em Helm abordada 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 ingresso 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 está ouvindo 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 o controlador de ingresso nginx da TVK

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 de controlador de ingresso 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 para 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 o que você criou no último comando acima.

Por favor, mantenha o arquivo kubeconfig gerado em segurança, pois ele contém dados sensíveis.

  • Explorando a Interface de Usuário do Console Web TVK
  • Explore cada seção da esquerda, como:
  • Gerenciamento de Cluster: Isso mostra a lista de clusters principais e outros clusters com instâncias TVK, adicionados ao cluster OVH principal usando o recurso de Gerenciamento de Múltiplos Clusters.
  • Backup e Recuperação: Este é o painel principal que fornece uma visão geral do cluster inteiro, como espaços de nomes descobertos, Aplicações, lista de planos de backup, Destinos, Hooks, Políticas, etc.

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

Recuperação de Desastres: Permite gerenciar e realizar operações de recuperação de desastres.

Recuperação de Desastres: Permite gerenciar e realizar operações de recuperação de desastres.

Também é possível ver o Destino S3 criado anteriormente, navegando até Backup & Recuperação -> Destinos -> <Namespace> a partir do menu suspenso no topo.

Além disso, você pode navegar até o destino e listar os backups disponíveis clicando no botão Ações à direita e selecionando a opção Iniciar Navegador no menu pop-up. Para que isso funcione, o destino deve ter o sinalizador enableBrowsing definido como true.

Para 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. TVK possui um recurso que permite realizar backups em um nível mais alto do que apenas namespaces.

  • Criando o Backup do Release do Helm do Ambassador
  • Para realizar backups para uma única aplicação no nível do namespace (ou release do Helm), é necessário um BackupPlan seguido por um Backup CRD. BackupPlan é uma definição de ‘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 real de backup, 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 para TVK qual nome de destino usar para armazenar os backups.

  • spec.backupConfig.target.namespace: Indica para 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 esteja implantado em seu cluster seguindo as etapas do tutorial 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 o diretório para 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 Ambassador BackupPlan e Backup fornecidos no repositório 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

Por fim, 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 para o release 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 TIPO DE BACKUP definido como Completo.

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

Depois que todos os componentes do embaixador Helm forem carregados no destino S3, você deve obter esses 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 o backup com sucesso do lançamento 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 do backup não se tornar 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 o lançamento do Helm do embaixador foi backupado na sub-visualização Detalhes do Componente.

kubectl get all -n ambassador

Excluindo o Lançamento 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 deletados (a listagem deve estar vazia):

Se estiver restaurando o mesmo namespace, certifique-se de que os componentes da aplicação original tenham sido removidos. Especialmente o PVC da aplicação deve ser deletado.

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 restaurando para outro cluster (cenário de migração), certifique-se de que o TrilioVault for Kubernetes também está em execução no namespace/cluster remoto. Para restaurar em um 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 de Restauração para ver um exemplo de restauração por localização.

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

spec.source.type: Especifica o tipo de backup a ser restaurado.

spec.source.backup: Contém uma referência ao objeto de backup a ser restaurado.

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 ele já existir no namespace restaurado.

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

Restore permite restaurar o último Backup bem-sucedido para um aplicativo. É usado para restaurar um único namespace ou release do Helm, protegido pelo CRD de Backup. O CRD de Backup é identificado pelo nome ambassador-helm-release-full-backup.

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

Primeiro, inspecione o exemplo do CRD de Restore 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 Restore usando kubectl:

Por fim, inspecione o status do objeto de Restore:

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 do 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 de DNS A, porque o recurso de balanceamento de carga do DigitalOcean foi recriado e recebeu um novo IP externo atribuído.

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

O próximo passo lida com o backup e a 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 DOKS inteiro 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 essenciais e configurações.

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 kube-system (ou outros namespaces relacionados ao cluster DOKS) não estão incluídos na lista. Normalmente, eles não são necessários, a menos que haja um caso especial que exija 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 do 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

Finalmente, crie os recursos ClusterBackupPlan e ClusterBackup usando kubectl:

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

Agora, inspecione o status do ClusterBackupPlan usando kubectl:

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

A saída se parece com o seguinte. Observe o valor da coluna STATUS, que deve estar definido como Disponível.

Em seguida, verifique o status do ClusterBackup usando kubectl:

A saída se parece com o seguinte. Observe o valor da coluna STATUS, que deve estar definido como Disponível, assim como o PERCENTAGE COMPLETE definido como 100.

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

Pode levar algum tempo para que o backup completo do cluster seja 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 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 o seu controlador de entrada. Portanto, certifique-se de atualizar seus registros A do DNS da DigitalOcean conforme necessário.

Agora, exclua todo o cluster DOKS (certifique-se de substituir os marcadores <> 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 seus dados de backup. Além disso, certifique-se de que a navegação no destino esteja ativada.

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 Starter Kit, 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 Navegador no menu suspenso. Para que isso funcione, o destino deve ter a sinalização enableBrowsing configurada como true.

Agora, clique no item starter-kit-cluster-backup-plan na lista e, em seguida, clique e expanda o item starter-kit-cluster-backup na janela secundária à 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 de DNS estão atualizados para apontar para o novo IP externo do balanceador de carga.

Por fim, as aplicações de backend devem responder a solicitações HTTP também. Consulte Criando os Serviços de Backend do Conjunto de Inicialização da Pilha de Borda do Embaixador em relação às aplicações de 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 realmente útil. Isso permite que você retroceda no tempo e restaure o sistema para um estado de funcionamento anterior caso algo dê errado. Esta seção fornece um exemplo de um backup automático em um cronograma de 5 minutos (o namespace kube-system foi escolhido).

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 de Policy do tipo Schedule que define o agendamento de backup no formato cron (mesmo que o cron do Linux). As políticas de agendamento podem ser usadas para os CRDs BackupPlan ou ClusterBackupPlan. Um CRD de política de agendamento típico parece o seguinte (define um agendamento de 5 minutos):

# disparar a cada 5 minutos

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

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

Perceba que é um CRD básico de ClusterBackupPlan, referenciando o CRD de Policy definido anteriormente através 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 no spec.

kubectl get policies -n tvk

Agora, por favor, crie a política de agendamento Policy 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

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

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

# Crie o plano de backup primeiro 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 dispare 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 se parece com o seguinte. Observe o valor FULL BACKUP POLICY definido para o recurso de política de backup agendado anteriormente criado scheduled-backup-every-5min, assim como o STATUS que deve ser Disponível.

Verifique o status do backup agendado para kube-system:

A saída se parece com o seguinte. Observe o valor BACKUPPLAN definido para o recurso de plano de backup anteriormente criado, assim como o STATUS que deve ser Disponível.

Agora, você pode verificar se os backups são realizados 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, conforme 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 conforme os requisitos de conformidade. O CRD da 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 CRDs (Custom Resource Definitions) de BackupPlan ou ClusterBackupPlan. Um manifesto típico de Policy para o tipo Retention se parece com o seguinte:
  • 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 em cada março.

No total, devem estar disponíveis 2 backups mais recentes.

O fluxo básico para criar um recurso de política de retenção segue o mesmo caminho que para backups agendados. Você precisa de um CRD BackupPlan ou ClusterBackupPlan definido para fazer referência à 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 fazer referência à 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 agendados, 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 esses 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 cron job é criado automaticamente para você que é executado a cada 30 minutos e deleta backups falhados com base no valor especificado para backupdays dentro do campo spec.

Conclusão

  • Neste tutorial, você aprendeu como realizar backups únicos e programados, e como restaurar tudo.
  • Todas as tarefas e operações básicas explicadas neste tutorial têm como objetivo dar a você 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 do DOKS usando Velero

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