Anteriormente, discutimos backups em nível de snapshot do etcd, que são suficientes para o dia a dia. No entanto, os backups de snapshot do etcd são globais, não permitindo backup e recuperação de dados específicos ou selecionados. Para resolver essa limitação, apresentamos o Velero, que permite backup e recuperação de recursos específicos.
- Velero
1.1 Introdução ao Velero
Site oficial: https://velero.io/
- O Velero é uma ferramenta de código aberto para recuperação de desastres e migração nativa da nuvem, desenvolvida pela VMware (originalmente pela Heptio, adquirida pela VMware). Escrito em Go, permite backup, recuperação e migração segura de dados de recursos de clusters Kubernetes.
- Suporta clusters Kubernetes padrão, tento em plataformas de nuvem privada quanto pública. Além da recuperação de desastres, também pode transferir recursos de um cluster para outro.
- O Velero funciona salvando dados do Kubernetes em armazenamento de objetos para alta disponibilidade e persistência. Por padrão, os backups são mantidos por 720 horas e podem ser baixados e recuperados quando necessário.
1.2 Diferenças entre Velero e backups de snapshot do etcd
- Os snapshots do etcd são backups globais (semelhante a um backup completo do MySQL). Mesmo para recuperar um único objeto de recurso (como restaurar apenas um banco de dados no MySQL), é necessário restaurar o estado completo do backup (como um restore completo do banco de dados), o que afeta outros namespaces e pods em execução.
- O Velero permite backups direcionados, como backup por namespace específico ou apenas de objetos de recurso individuais. Na recuperação, é possível restaurar apenas namespaces ou recursos específicos sem afetar outros namespaces. Além disso, o Velero realiza backups incrementais, apenas salvando dados alterados no etcd desde o último backup.
- O Velero suporta sistemas de armazenamento de objetos como Ceph e OSS.
- O Velero suporta agendamento de tarefas para backups periódicos, assim como os snapshots do etcd podem ser agendados via cronjob.
- O Velero suporta a criação e restauração de snapshots de volumes EBS da AWS.
1.3 Arquitetura do Velero
1.4 Fluxo de Backup
Site oficial: https://velero.io/docs/v1.11/how-velero-works/
~# velero backup criar meu-servico-ns-backup-${DATA} --include-namespaces meu-servico --kubeconfig=./usuario-aws.kubeconfig --namespace sistema-velero
- O cliente Velero chama o Kubernetes API Server para criar um objeto Backup.
- O BackupController, usando mecanismo de watch, obtém a tarefa de backup via API Server e a valida.
- Após validação, o BackupController inicia o porcesso de backup, solicitando dados ao API Server.
- O BackupController envia os dados coletados para o servidor de armazenamento de objetos especificado.
Por padrão, o velero backup cria snapshots de discos para volumes persistentes. Pode ajustar isso com outros flags. Use velero backup criar --help para ver flags disponíveis. Pode desativar snapshots com --snpashot-volumes=false.
1.5 Fluxo de Recuperação
- O cliente Velero chama o k8s api-server para criar um objeto Restore.
- O RestoreController, usando mecanismo de watch, obtém o objeto de restauração via API Server e o valida.
- O RestoreController obtém informações de backup do serviço de armazenamento de objetos. Em seguida, executa pré-processamento nos recursos do backup para garantir que funcionarão no novo cluster.
- O RestoreController inicia o processo de recuperação, restaurando recursos que atendem aos critérios um por um.
Por padrão, o Velero executa recuperação não destrutiva, não removendo dados do cluster de destino. Se um recurso já existir, ele será ignorado. Pode configurar o Velero para usar uma política de atualização com o flag --existing-resource-policy. Quando definido como "update", o Velero tentará atualizar recursos existentes para corresponder aos do backup.
- Minio
Site oficial: https://www.minio.org.cn/index.shtml
2.1 Introdução
- MinIO oferece um sistema de armazenamento de objetos de alto desempenho, compatível com S3, permitindo construir seu próprio serviço de armazenamento na nuvem.
- MinIO tem suporte nativo ao Kubernetes e pode ser usado em qualquer nuvem pública, distribuição Kubernetes, nuvem privada e borda.
- MinIO é definido por software, sem necessidade de hardware adicional, e é 100% open source sob a licença GNU AGPL v3.
2.2 Criando o Dockerfile do Minio
[root@containerd-build-image minio]# cat Dockerfile
FROM baseimages.centos:7.9
ADD minio /usr/local/bin/
ADD iniciar_minio.sh /root
RUN chmod u+x /usr/local/bin/minio && \
mkdir -p /dados/ && \
chmod u+x /root/iniciar_minio.sh
CMD ["/root/iniciar_minio.sh"]
2.3 Script de inicialização do serviço
[root@containerd-build-image minio]# cat iniciar_minio.sh
#!/bin/bash
/usr/local/bin/minio server /dados --console-address :9090
2.4 Script de build da imagem
[root@containerd-build-image minio]# cat construir-imagem.sh
#!/bin/bash
nerdctl build -t registro.k8s/imagens/minio:v1 . && \
nerdctl push registro.k8s/imagens/minio:v1 && \
nerdctl rmi registro.k8s/imagens/minio:v1
2.5 Download do binário do Minio
[root@containerd-build-image minio]# wget https://dl.min.io/server/minio/release/linux-amd64/minio
2.6 Construindo a imagem
[root@containerd-build-image minio]# sh construir-imagem.sh
- Implantando o Minio no cluster Kubernetes
3.1 Criando o deployment yaml
[root@k8s-harbor01 minio]# pwd
/root/yaml/deployment/minio
[root@k8s-harbor01 minio]# cat deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: minio
name: minio
namespace: meu-servico
spec:
replicas: 1
selector:
matchLabels:
app: minio
template:
metadata:
labels:
app: minio
spec:
containers:
- name: minio
image: registro.k8s/imagens/minio:v1
volumeMounts:
- name: nfs-minio
mountPath: /dados
volumes:
- name: nfs-minio
nfs:
server: 10.31.200.104
path: /dados/k8s/minio-dados
imagePullSecrets:
- name: segredos-registro-imagens
3.2 Criando diretório de persistência NFS e criando o Minio
[root@k8s-harbor01 minio]# mkdir -p /dados/k8s/minio-dados
[root@k8s-harbor01 minio]# kubectl apply -f deployment.yaml
[root@k8s-harbor01 minio]# kubectl get po -n meu-servico |grep minio
minio-5cc5fc9498-lmzwh 1/1 Running 0 41s
3.3 Criando o serviço (Service)
3.3.1 Criando serviço do tipo NodePort
[root@k8s-harbor01 minio]# cat nodeport.yaml
apiVersion: v1
kind: Service
metadata:
name: minio-nodeport
namespace: meu-servico
spec:
ports:
- name: web
port: 80
targetPort: 9090
- name: tcp
port: 8080
targetPort: 9000
type: NodePort
selector:
app: minio
[root@k8s-harbor01 minio]# kubectl apply -f nodeport.yaml
service/minio-nodeport created
[root@k8s-harbor01 minio]# kubectl get svc -n meu-servico
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
minio-nodeport NodePort 10.100.61.157 <none> 80:32369/TCP,8080:30000/TCP 7m56s
</none>
3.3.2 Criando serviço do tipo ClusterIP
[root@k8s-harbor01 minio]# cat svc.yaml
apiVersion: v1
kind: Service
metadata:
name: minio
namespace: meu-servico
spec:
ports:
- name: tcp
port: 9000
targetPort: 9000
selector:
app: minio
[root@k8s-harbor01 minio]# kubectl apply -f svc.yaml
service/minio created
[root@k8s-harbor01 minio]# kubectl get svc -n meu-servico
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
minio ClusterIP 10.100.39.202 <none> 9000/TCP 6s
minio-nodeport NodePort 10.100.61.157 <none> 80:32369/TCP,8080:30000/TCP 10m
</none></none>
3.3.3 Acessando e criando um bucket
- Implantando o Velero
Atenção à compatibilidade entre versões do Velero e Kubernetes. Site oficial: https://github.com/vmware-tanzu/velero. Instalação: https://velero.io/docs/v1.11/contributions/minio/
4.1 Download do Velero 1.11
Coloque em uma máquina capaz de executar comandos kubectl
[root@k8s-harbor01 minio]# cd /usr/local/src/
[root@k8s-harbor01 src]# wget https://github.com/vmware-tanzu/velero/releases/download/v1.11.0/velero-v1.11.0-linux-amd64.tar.gz
[root@k8s-harbor01 src]# ll -rth
-rw-r--r-- 1 root root 35M 7月 12 11:30 velero-v1.11.0-linux-amd64.tar.gz
[root@k8s-harbor01 src]# tar xf velero-v1.11.0-linux-amd64.tar.gz
[root@k8s-harbor01 src]# ls
velero-v1.11.0-linux-amd64 velero-v1.11.0-linux-amd64.tar.gz
[root@k8s-harbor01 src]# cd velero-v1.11.0-linux-amd64/
[root@k8s-harbor01 velero-v1.11.0-linux-amd64]# ls
examples LICENSE velero
[root@k8s-harbor01 velero-v1.11.0-linux-amd64]# mv velero /usr/local/bin/
[root@k8s-harbor01 velero-v1.11.0-linux-amd64]# velero -h|head
Velero é uma ferramenta para gerenciar recuperação de desastres, especificamente para recursos de cluster Kubernetes. Ele fornece uma forma simples, configurável e operacionalmente robusta de fazer backup do estado do seu aplicativo e dados associados.
4.2 Configurando o ambiente de autenticação do cliente Velero
Se usar diretamente o .kube/config com nível de admin, este passo pode ser pulado
4.2.1 Criando diretório de dados
[root@k8s-harbor01 velero-v1.11.0-linux-amd64]# mkdir -p /dados/velero
[root@k8s-harbor01 velero-v1.11.0-linux-amd64]# cd /dados/velero
4.2.2 Configurando arquivo de autenticação para acesso ao Minio
[root@k8s-harbor01 velero]# cat velero-autenticacao.txt
[default]
aws_access_key_id = minioadmin
aws_secret_access_key = minioadmin
4.3 Criando usuário dedicado para backup e recuperação
Se usar diretamente o .kube/config com nível de admin, este passo pode ser pulado
4.3.1 Preparando arquivo CSR para emissão de certificado
[root@k8s-harbor01 velero]# cat usuario-aws-csr.json
{
"CN": "usuario-aws",
"hosts": [],
"key": {
"algo": "rsa",
"size": 2048
},
"names": [
{
"C": "BR",
"ST": "Sao Paulo",
"L": "Sao Paulo",
"O": "k8s",
"OU": "System"
}
]
}
4.3.2 Preparando ambiente de emissão de certificado
[root@k8s-harbor01 velero]# wget https://github.com/cloudflare/cfssl/releases/download/v1.6.1/cfssl_1.6.1_linux_amd64
[root@k8s-harbor01 velero]# wget https://github.com/cloudflare/cfssl/releases/download/v1.6.1/cfssljson_1.6.1_linux_amd64
[root@k8s-harbor01 velero]# wget https://github.com/cloudflare/cfssl/releases/download/v1.6.1/cfssl-certinfo_1.6.1_linux_amd64
[root@k8s-harbor01 velero]# mv cfssl-certinfo_1.6.1_linux_amd64 cfssl-certinfo
[root@k8s-harbor01 velero]# mv cfssl_1.6.1_linux_amd64 cfssl
[root@k8s-harbor01 velero]# mv cfssljson_1.6.1_linux_amd64 cfssljson
[root@k8s-harbor01 velero]# cp cfssl-certinfo cfssl cfssljson /usr/local/bin/
[root@k8s-harbor01 velero]# chmod a+x /usr/local/bin/cfssl*
4.3.3 Executando emissão de certificado
Para k8s versão: >= 1.24.x
[root@k8s-harbor01 velero]# cp /etc/kubeasz/clusters/k8s-cluster1/ssl/ca-config.json ./
[root@k8s-harbor01 velero]# cfssl gencert -ca=/etc/kubeasz/clusters/k8s-cluster1/ssl/ca.pem -ca-key=/etc/kubeasz/clusters/k8s-cluster1/ssl/ca-key.pem -config=./ca-config.json -profile=kubernetes ./usuario-aws-csr.json | cfssljson -bare usuario-aws
Para k8s versão: 1.23 <=
/usr/local/bin/cfssl gencert -ca=/etc/kubernetes/ssl/ca.pem -ca-key=/etc/kubernetes/ssl/ca-key.pem -config=/etc/kubeasz/clusters/k8s-cluster1/ssl/ca-config.json -profile=kubernetes ./usuario-aws-csr.json | cfssljson -bare usuario-aws
4.3.4 Distribuindo certificados para caminho de certificados do api-server
[root@k8s-harbor01 velero]# mkdir -p /etc/kubernetes/ssl/
[root@k8s-harbor01 velero]# cp usuario-aws-key.pem /etc/kubernetes/ssl/
[root@k8s-harbor01 velero]# cp usuario-aws.pem /etc/kubernetes/ssl/
4.3.5 Gerando arquivo de configuração de autenticação do cluster
[root@k8s-harbor01 velero]# export KUBE_APISERVER="https://10.31.200.100:6443"
[root@k8s-harbor01 velero]# kubectl config set-cluster kubernetes \
--certificate-authority=/etc/kubeasz/clusters/k8s-cluster1/ssl/ca.pem \
--embed-certs=true \
--server=${KUBE_APISERVER} \
--kubeconfig=./usuario-aws.kubeconfig
4.3.6 Configurando autenticação com certificado do cliente
[root@k8s-harbor01 velero]# kubectl config set-credentials usuario-aws \
--client-certificate=/etc/kubernetes/ssl/usuario-aws.pem \
--client-key=/etc/kubernetes/ssl/usuario-aws-key.pem \
--embed-certs=true \
--kubeconfig=./usuario-aws.kubeconfig
4.3.7 Configurando parâmetros de contexto, declarando cluster atual
[root@k8s-harbor01 velero]# kubectl config set-context kubernetes \
--cluster=kubernetes \
--user=usuario-aws \
--namespace=sistema-velero \
--kubeconfig=./usuario-aws.kubeconfig
4.3.8 Configurando contexto padrão, declarando cluster padrão
[root@k8s-harbor01 velero]# kubectl config use-context kubernetes --kubeconfig=usuario-aws.kubeconfig
4.3.9 Criando conta de usuário awsuser
[root@k8s-harbor01 velero]# kubectl create ns sistema-velero
[root@k8s-harbor01 velero]# kubectl create clusterrolebinding usuario-aws --clusterrole=cluster-admin --user=usuario-aws
clusterrolebinding.rbac.authorization.k8s.io/usuario-aws created
# Parâmetros:
clusterrolebinding: vinculação de papel
usuario-aws: nome do papel
cluster-admin: permissões
--user=usuario-aws: autorização para usuario-aws
# Verificação
[root@k8s-harbor01 velero]# kubectl --kubeconfig=./usuario-aws.kubeconfig get no
NAME STATUS ROLES AGE VERSION
k8s-master01 Ready,SchedulingDisabled master 78d v1.26.1
k8s-master02 Ready,SchedulingDisabled master 78d v1.26.1
k8s-master03 Ready,SchedulingDisabled master 78d v1.26.1
k8s-node01 Ready node 78d v1.26.1
k8s-node02 Ready node 78d v1.26.1
k8s-node03 Ready node 78d v1.26.1
4.4 Instalando o servidor Velero
4.4.1 Executando instalação
[root@k8s-harbor01 velero]# velero --kubeconfig ./usuario-aws.kubeconfig \
install \
--provider aws \
--plugins velero/velero-plugin-for-aws:v1.5.5 \
--bucket dados-velero \
--secret-file ./velero-autenticacao.txt \
--use-volume-snapshots=false \
--namespace sistema-velero \
--backup-location-config region=minio,s3ForcePathStyle="true",s3Url=http://minio.meu-servico:9000
# Nota: s3Url=http://minio.meu-servico:9000, aqui usamos endereço de nome de domínio interno do k8s
# As imagens do Velero são grandes, pode levar tempo para baixar. Pode puxar manualmente nos nodes
[root@k8s-harbor01 velero]# kubectl get po -n sistema-velero
NAME READY STATUS RESTARTS AGE
velero-98bc8c975-4pnjs 1/1 Running 0 31m
4.4.2 Verificação
[root@k8s-harbor01 velero]# velero backup -h
- Demonstrações de Backup e Recuperação
5.1 Backup do namespace default
[root@k8s-harbor01 velero]# DATA=`date +%Y%m%d%H%M%S`
[root@k8s-harbor01 velero]# echo $DATA
20230712181436
[root@k8s-harbor01 velero]# velero backup criar backup-default-${DATA} \
--include-cluster-resources=true \
--include-namespaces default \
--kubeconfig=./usuario-aws.kubeconfig \
--namespace sistema-velero
Backup "backup-default-20230712181436" enviado com sucesso.
Execute `velero backup describe backup-default-20230712181436` ou `velero backup logs backup-default-20230712181436` para mais detalhes.
5.2 Verificando backup
5.3 Backup de um namespace, exclusão de um recurso, e recuperação
5.3.1 Criando pod de teste
[root@k8s-harbor01 yaml]# cat temp-debian.yaml
apiVersion: v1
kind: Pod
metadata:
name: temp-debian
namespace: meu-servico
spec:
containers:
- name: temp-debian
image: registro.k8s/imagens/debian-shell:v1
imagePullSecrets:
- name: segredos-registro-imagens
[root@k8s-harbor01 yaml]# kubectl apply -f temp-debian.yaml
pod/temp-debian created
[root@k8s-harbor01 yaml]# kubectl get po -n meu-servico
NAME READY STATUS RESTARTS AGE
minio-5cc5fc9498-lmzwh 1/1 Running 0 26h
temp-debian 1/1 Running 0 44s
5.3.2 Backup dos dados
[root@k8s-harbor01 ~]# velero backup criar backup-meuservico-`date +%F` --include-cluster-resources=true --include-namespaces meu-servico --kubeconfig=/dados/velero/usuario-aws.kubeconfig --namespace sistema-velero
5.3.3 Verificando backup
5.3.4 Excluindo pod
[root@k8s-harbor01 ~]# kubectl get po -n meu-servico
NAME READY STATUS RESTARTS AGE
minio-5cc5fc9498-lmzwh 1/1 Running 0 42h
temp-debian 1/1 Running 0 16h
[root@k8s-harbor01 ~]# kubectl delete po -n meu-servico temp-debian
pod "temp-debian" deleted
[root@k8s-harbor01 ~]# kubectl get po -n meu-servico
NAME READY STATUS RESTARTS AGE
minio-5cc5fc9498-lmzwh 1/1 Running 0 42h
5.3.5 Recuperando dados
[root@k8s-harbor01 ~]# velero restore criar --from-backup backup-meuservico-2023-07-12 --wait --kubeconfig=/dados/velero/usuario-aws.kubeconfig --namespace sistema-velero
Solicitação de recuperação "backup-meuservico-2023-07-12-20230713115829" enviada com sucesso.
Aguardando recuperação ser concluída. Pode pressionar ctrl-c com segurança para parar de aguardar - sua recuperação continuará em segundo plano.
....................
Recuperação concluída com status: Completed. Pode verificar mais informações usando os comandos `velero restore describe backup-meuservico-2023-07-12-20230713115829` e `velero restore logs backup-meuservico-2023-07-12-20230713115829`.
# Parâmetros
--from-backup backup-meuservico-2023-07-12: recuperar dados deste backup
--wait: o processo atual aguarda recuperação bem-sucedida antes de sair
--namespace sistema-velero: namespace onde o servidor está
5.3.6 Verificando recuperação de dados
[root@k8s-harbor01 ~]# kubectl get po -n meu-servico
NAME READY STATUS RESTARTS AGE
minio-5cc5fc9498-lmzwh 1/1 Running 0 44h
temp-debian 1/1 Running 0 22s
5.4 Backup de um namespace, exclusão do namespace, e recuperação
5.4.1 Criando dados de teste
[root@k8s-harbor01 ~]# kubectl create ns teste
namespace/teste created
# Criando um secret de teste para pull de imagem
[root@k8s-harbor01 ~]# kubectl get secret -n teste
NAME TYPE DATA AGE
segredos-registro-imagens kubernetes.io/dockerconfigjson 1 11s
# Criando um deployment de teste
[root@k8s-harbor01 deployment]# cat deploy.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: deployment-teste
namespace: teste
spec:
replicas: 3
selector:
matchLabels:
app: deployment-teste
template:
metadata:
labels:
app: deployment-teste
spec:
containers:
- name: deployment-teste
image: registro.k8s/imagens/debian:7
imagePullPolicy: Always
args: ["tail", "-f", "/etc/hosts"]
imagePullSecrets:
- name: segredos-registro-imagens
[root@k8s-harbor01 deployment]# kubectl apply -f deploy.yaml
deployment.apps/deployment-teste created
[root@k8s-harbor01 deployment]# kubectl get po -n teste
NAME READY STATUS RESTARTS AGE
deployment-teste-ddc496886-5sws8 1/1 Running 0 6s
deployment-teste-ddc496886-px9nk 1/1 Running 0 6s
deployment-teste-ddc496886-s6zbk 1/1 Running 0 6s
5.4.2 Backup do namespace
[root@k8s-harbor01 deployment]# velero backup criar backup-ns-teste-`date +%F` \
--include-cluster-resources=true \
--include-namespaces teste \
--kubeconfig=/root/.kube/config \
--namespace sistema-velero
Backup "backup-ns-teste-2023-07-13" enviado com sucesso.
Execute `velero backup describe backup-ns-teste-2023-07-13` ou `velero backup logs backup-ns-teste-2023-07-13` para mais detalhes.
5.4.3 Excluindo todo o namespace
[root@k8s-harbor01 deployment]# kubectl delete ns teste
namespace "teste" deleted
[root@k8s-harbor01 deployment]# kubectl get ns |grep teste
5.4.4 Recuperando dados
[root@k8s-harbor01 deployment]# velero restore criar --from-backup backup-ns-teste-2023-07-13 --wait \
--kubeconfig=/root/.kube/config \
--namespace sistema-velero
Solicitação de recuperação "backup-ns-teste-2023-07-13-20230713143510" enviada com sucesso.
Aguardando recuperação ser concluída. Pode pressionar ctrl-c com segurança para parar de aguardar - sua recuperação continuará em segundo plano.
..........
Recuperação concluída com status: Completed. Pode verificar mais informações usando os comandos `velero restore describe backup-ns-teste-2023-07-13-20230713143510` e `velero restore logs backup-ns-teste-2023-07-13-20230713143510`.
5.4.5 Verificação
5.5 Backup e recuperação de objetos de recurso específicos
Esta abordagem é menos comum, geralmente usamos backup de recursos em nível de cluster
5.5.1 Criando recursos de teste
[root@k8s-harbor01 pod]# cat temp-debian.yaml
apiVersion: v1
kind: Pod
metadata:
name: temp-debian
namespace: teste
spec:
containers:
- name: temp-debian
image: registro.k8s/imagens/debian-shell:v1
command: ['tail', '-f', '/etc/hosts']
imagePullSecrets:
- name: segredos-registro-imagens
[root@k8s-harbor01 pod]# kubectl apply -f temp-debian.yaml
pod/temp-debian created
[root@k8s-harbor01 pod]# kubectl get po -n teste
NAME READY STATUS RESTARTS AGE
temp-debian 1/1 Running 0 4s
deployment-teste-ddc496886-5sws8 1/1 Running 0 16m
deployment-teste-ddc496886-px9nk 1/1 Running 0 16m
deployment-teste-ddc496886-s6zbk 1/1 Running 0 16m
5.5.2 Backup do pod e secret recém-criados
[root@k8s-harbor01 pod]# velero backup criar backup-pod-ns-teste-`date +%F` --include-cluster-resources=true --ordered-resources 'pods=teste/temp-debian;secret=teste/segredos-registro-imagens' --namespace sistema-velero --include-namespaces=teste
Backup "backup-pod-ns-teste-2023-07-13" enviado com sucesso.
Execute `velero backup describe backup-pod-ns-teste-2023-07-13` ou `velero backup logs backup-pod-ns-teste-2023-07-13` para mais detalhes.
# Backup de múltiplos tipos de recursos ou recursos de múltiplos namespaces
velero backup criar backup-pod-ns-teste-`date +%F` --include-cluster-resources=true --ordered-resources 'pods=$ns/pod_name,$ns/pod_name;service=$ns/$svc_name;sts=...' --namespace sistema-velero --include-namespaces=$ns1,$ns2,.....
5.5.3 Excluindo pod e secret
[root@k8s-harbor01 pod]# kubectl delete secret -n teste segredos-registro-imagens
secret "segredos-registro-imagens" deleted
[root@k8s-harbor01 pod]# kubectl delete po -n teste temp-debian
pod "temp-debian" deleted
5.5.4 Recuperando dados
[root@k8s-harbor01 pod]# velero restore criar --from-backup backup-pod-ns-teste-2023-07-13 --wait \
--kubeconfig=/root/.kube/config \
--namespace sistema-velero
5.5.5 Verificando dados
[root@k8s-harbor01 pod]# kubectl get po,secret -n teste
NAME READY STATUS RESTARTS AGE
pod/temp-debian 1/1 Running 0 29s
pod/deployment-teste-ddc496886-5sws8 1/1 Running 0 30m
pod/deployment-teste-ddc496886-px9nk 1/1 Running 0 30m
pod/deployment-teste-ddc496886-s6zbk 1/1 Running 0 30m
NAME TYPE DATA AGE
secret/segredos-registro-imagens kubernetes.io/dockerconfigjson 1 29s
5.6 Backup em lote de diferentes namespaces
5.6.1 Editando script
[root@k8s-harbor01 scripts]# cat script-velero-backup.sh
#!/bin/bash
NS_LISTA=`kubectl get ns | awk '{if (NR>2){print}}' | awk '{print $1}'`
DATA=`date +%F`
cd /dados/velero/
for i in $NS_LISTA;do
velero backup criar ${i}-backup-${DATA} \
--include-cluster-resources=true \
--include-namespaces ${i} \
--kubeconfig=/root/.kube/config \
--namespace sistema-velero
done
[root@k8s-harbor01 scripts]# sh script-velero-backup.sh
Backup "lease-nodos-kube-ns-backup-2023-07-13" enviado com sucesso.
Execute `velero backup describe lease-nodos-kube-ns-backup-2023-07-13` ou `velero backup logs lease-nodos-kube-ns-backup-2023-07-13` para mais detalhes.
Backup "publico-kube-ns-backup-2023-07-13" enviado com sucesso.
Execute `velero backup describe publico-kube-ns-backup-2023-07-13` ou `velero backup logs publico-kube-ns-backup-2023-07-13` para mais detalhes.
Backup "sistema-kube-ns-backup-2023-07-13" enviado com sucesso.
Execute `velero backup describe sistema-kube-ns-backup-2023-07-13` ou `velero backup logs sistema-kube-ns-backup-2023-07-13` para mais detalhes.
Backup "meuservico-ns-backup-2023-07-13" enviado com sucesso.
Execute `velero backup describe meuservico-ns-backup-2023-07-13` ou `velero backup logs meuservico-ns-backup-2023-07-13` para mais detalhes.
Backup "teste-ns-backup-2023-07-13" enviado com sucesso.
Execute `velero backup describe teste-ns-backup-2023-07-13` ou `velero backup logs teste-ns-backup-2023-07-13` para mais detalhes.
Backup "sistema-velero-ns-backup-2023-07-13" enviado com sucesso.
Execute `velero backup describe sistema-velero-ns-backup-2023-07-13` ou `velero backup logs sistema-velero-ns-backup-2023-07-13` para mais detalhes.