preloader
  • Início
  • Simplificar o backup do OpenShift Etcd com automação

Armazene automaticamente os backups do etcd em uma SAN

blog-thumb

Esse procedimento automatiza o backup do banco de dados etcd do OpenShift.

Será agendado um cronjob que armazenará os arquivos em um compartilhamento NFS.

Você pode adaptar facilmente esta tarefa para armazenar backups em outras SANs.

Inicialmente, eu fiz um playbook para criar backups do etcd. Ele usava o comando cli etcdctl. Mas depois de um tempo, percebi que era muito mais eficiente usar os recursos nativos do OpenShift.

Essa configuração foi validada no OpenShift 4.14, mas também é válida para as versões 4.10+.

Requisitos:

1] Acesso administrativo ao cluster do OpenShift 4

2] Servidor NFS


Projeto (também conhecido como Namespace)

Crie um namespace para alocar os recursos necessários.

$ oc new-project ocp-etcd-backup --description "Openshift Backup Automation Tool" --display-name "Backup ETCD Automation"

Conta de serviço

O job deve ser executado por uma conta de serviço.

kind: ServiceAccount
apiVersion: v1
metadata:
  name: openshift-backup
  namespace: ocp-etcd-backup
  labels:
    app: openshift-backup

Cluster Role

Precisamos de um cluster role customizado para que o processo de backup tenha acesso aos recursos necessários.

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: cluster-etcd-backup
rules:
- apiGroups: [""]
  resources:
     - "nodes"
  verbs: ["get", "list"]
- apiGroups: [""]
  resources:
     - "pods"
     - "pods/log"
     - "pods/attach"
  verbs: ["get", "list", "create", "delete", "watch"]
- apiGroups: [""]
  resources:
     - "namespaces"
  verbs: ["get", "list", "create"]

Cluster Role Binding

Associe a custom role à conta de serviço criada para o job de backup.

kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: openshift-backup
  labels:
    app: openshift-backup
subjects:
  - kind: ServiceAccount
    name: openshift-backup
    namespace: ocp-etcd-backup
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-etcd-backup

Security Context Constraints

A conta de serviço precisa ter privilégios no SCC.

$ oc adm policy add-scc-to-user privileged -z openshift-backup

CronJob para Backup

O agendamento executará os backups à 01:00 AM.

* Altere NFS-SERVER-IP:SHARED-PATH para refletir os detalhes do seu servidor NFS.

kind: CronJob
apiVersion: batch/v1
metadata:
  name: openshift-backup
  namespace: ocp-etcd-backup
  labels:
    app: openshift-backup
spec:
  schedule: "0 1 * * *"
  concurrencyPolicy: Forbid
  successfulJobsHistoryLimit: 5
  failedJobsHistoryLimit: 5
  jobTemplate:
    metadata:
      labels:
        app: openshift-backup
    spec:
      backoffLimit: 0
      template:
        metadata:
          labels:
            app: openshift-backup
        spec:
          containers:
            - name: backup
              image: "registry.redhat.io/openshift4/ose-cli"
              command:
                - "/bin/bash"
                - "-c"
                - oc get no -l node-role.kubernetes.io/master --no-headers -o name | head -n 1 | xargs -I {} -- oc debug {} --to-namespace=ocp-etcd-backup -- bash -c 'chroot /host rm -rf /home/core/backup && chroot /host mkdir -p /home/core/backup && chroot /host sudo -E mount -t nfs <NFS-SERVER-IP>:<SHARED-PATH> /home/core/backup && chroot /host sudo -E /usr/local/bin/cluster-backup.sh /home/core/backup && chroot /host sudo -E find /home/core/backup/ -type f -mmin +"1" -delete'
          restartPolicy: "Never"
          terminationGracePeriodSeconds: 30
          activeDeadlineSeconds: 500
          dnsPolicy: "ClusterFirst"
          serviceAccountName: "openshift-backup"
          serviceAccount: "openshift-backup"

Execução manual de um backup

Executar o job de backup manualmente.

$ oc create job backup --from=cronjob/openshift-backup

Caso executado corretamente, o resultado será semelhante ao mostrado abaixo.

$ oc get jobs.batch
NAME                        COMPLETIONS   DURATION   AGE
backup                      1/1           24s        18m

Os outros backups realizados podem ser consultados no job.

$ oc get jobs.batch
NAME                        COMPLETIONS   DURATION   AGE
backup                      1/1           24s        18m
openshift-backup-28514510   1/1           24s        10m
openshift-backup-28514520   0/1           17s        17s <-- RUNNING BACKUP

Para ver o resultado de um job, use o seguinte comando:

$ oc describe jobs.batch openshift-backup-28514520

Para ver os detalhes técnicos do que está acontecendo no cluster quando é acionado o job, use o comando abaixo.

$ oc get events -n ocp-etcd-backup

Backup PODs:

$ oc get pods -n ocp-etcd-backup
NAME                               READY   STATUS    RESTARTS   AGE
pod/backup-jcn87                   1/1     Running   0          67s
pod/ocp-j8gcn-master-0-debug       0/1     Running   0          6s

Os pods de backup são efêmeros e serão excluídos no final do backup.


Notas de encerramento

O processo apresentado fornece uma base para automatizar o backup do OpenShift etcd. Adapte-o às suas necessidades específicas e configure as opções de acordo com sua infraestrutura.

Espero que este post tenha te ajudado a entender como automatizar os backups de um banco de dados etcd.


Você gostou do conteúdo? Dê uma olhada nestes outros artigos interessantes! 🔥



Pode ajudar?

Por favor apóie este conteúdo clicando em um banner de nossos anunciantes. ❤️

comments powered by Disqus