Utilice velero para hacer una copia de seguridad del clúster k8s

prerrequisitos:

  1. k8s> 1.10, considerando principalmente la compatibilidad de restic
  2. Implementar dns en el clúster
  3. Kubectl instalado

instalación velero

  1. Descargar velero

    wget https://github.com/vmware-tanzu/velero/releases/download/v1.5.2/velero-v1.5.2-linux-amd64.tar.gz
    tar -zxvf velero-v1.5.2-linux-amd64.tar.gz
    mvmv velero-v1.5.2-linux-amd64 velero
    cd velero
    cp velero  /usr/local/bin/
    velero version
    [root@docker1 velero]# velero  version
    Client:
    Version: v1.5.2
    Git commit: e115e5a191b1fdb5d379b62a35916115e77124a4
    Server:
    Version: v1.5.2
  2. Finalización del comando

    Finalización de comandos de clase k8s.

    source  <(velero completion )

Implementar el servicio velero

Debido a que el minion predeterminado solo expone clusterip, pero cuando se usa el comando velero, el host local realmente interactúa, así que expuse el puerto de nodo del host velero.

  1. Modifique el archivo de configuración.

    Ingrese example / minio y modifique el archivo de configuración de minio. Modifique el tipo a nodePort. (He especificado la dirección nodePort aquí, es mejor no especificarla para evitar conflictos)

    kind: Service
    metadata:
     namespace: velero
     name: minio
     labels:
       component: minio
    spec:
     # ClusterIP is recommended for production environments.
     # Change to NodePort if needed per documentation,
     # but only if you run Minio in a test/trial environment, for example with Minikube.
     type: NodePort
     ports:
       - port: 9000
         targetPort: 9000
         protocol: TCP
         nodePort: 30069
     selector:
       component: minio
  2. k8s implementa el servicio minio.

    kubectl apply -f 00-minio-deployment.yaml
    [root@docker1 minio]# kubectl get pod -n velero | grep minio
    minio-d787f4bf7-tltb4     1/1     Running     0          31m
    minio-setup-kjfc7         0/1     Completed   0          31m
    [root@docker1 minio]# kubectl get svc -n velero
    NAME    TYPE       CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
    minio   NodePort   10.96.213.187   <none>        9000:30069/TCP   31m
    
  3. Cree archivos específicos de velero y colóquelos en el directorio minio.

    cat > credentials-velero << EOF
    [default]
    aws_access_key_id = minio
    aws_secret_access_key = minio123
    EOF
  4. Implementar el servicio velero

    Utilice publicURL para exponer la dirección de puerto de nodo expuesta por el servicio minio. La dirección de host es cualquier dirección de nodo en el clúster k8s (de todos modos, es el clúster k8s para su resolución).

    velero install \
       --provider aws \
       --plugins velero/velero-plugin-for-aws:v1.0.0 \
       --bucket velero \
       --secret-file ./credentials-velero \
       --use-volume-snapshots=false \
       --backup-location-config region=minio,s3ForcePathStyle="true",s3Url=http://minio.velero.svc:9000,publicUrl=http://192.168.14.132:30069
  5. Verificar el estado del velero

    Deployment/velero: created
    Velero is installed! ⛵ Use 'kubectl logs deployment/velero -n velero' to view the status.
    
    [root@docker1 minio]# kubectl logs deployment/velero -n velero
    time="2020-10-28T06:25:22Z" level=info msg="setting log-level to INFO" logSource="pkg/cmd/server/server.go:191"
    time="2020-10-28T06:25:22Z" level=info msg="Starting Velero server v1.5.2 (456eb19668f8da603756353d9179b59b5a7bfa04)" logSource="pkg/cmd/server/server.go:193"
    time="2020-10-28T06:25:22Z" level=info msg="1 feature flags enabled []" name=velero.io/add-pvc-from-pod
  6. Visite la página web del velero.

    Navegador abierto http://192.168.14.132:30069

    image.png

  7. Implementar la aplicación nginx de ejemplo

    kubectl apply -f examples/nginx-app/base.yaml
  8. Ver el estado de la solicitud

    [root@docker1 minio]# kubectl get deployments -l component=velero --namespace=velero
    NAME     READY   UP-TO-DATE   AVAILABLE   AGE
    velero   1/1     1            1           9m16s
    [root@docker1 minio]# kubectl get deployments --namespace=nginx-example
    NAME               READY   UP-TO-DATE   AVAILABLE   AGE
    nginx-deployment   2/2     2            2           20h

Aplicación de respaldo

  1. Cree una copia de seguridad basada en el selector de etiquetas.

    velero backup create nginx-backup --selector app=nginx
  2. Ver resultados de la copia de seguridad

    image.png

    [root@docker1 minio]# velero backup describe nginx-backup
    Name:         nginx-backup
    Namespace:    velero
    Labels:       velero.io/storage-location=default
    Annotations:  velero.io/source-cluster-k8s-gitversion=v1.17.0
                 velero.io/source-cluster-k8s-major-version=1
                 velero.io/source-cluster-k8s-minor-version=17
    
    Phase:  Completed
    
    Errors:    0
    Warnings:  0
    
    Namespaces:
     Included:  *
     Excluded:  <none>
    
  3. Elimina maliciosamente nginx-example:

    kubectl delete namespace nginx-example
  4. Verifique el estado de la implementación de nginx:

    [root@docker1 minio]# kubectl get deployments --namespace=nginx-example
    NAME               READY   UP-TO-DATE   AVAILABLE   AGE
    nginx-deployment   2/2     2            2           20h
    [root@docker1 minio]# kubectl get services --namespace=nginx-example
    NAME       TYPE           CLUSTER-IP     EXTERNAL-IP      PORT(S)        AGE
    my-nginx   LoadBalancer   10.96.129.10   192.168.14.162   80:32741/TCP   20h
    [root@docker1 minio]# kubectl get namespace/nginx-example
    NAME            STATUS   AGE
    nginx-example   Active   20h

Recuperación

  1. Ejecutar el comando de restauración

    velero restore create --from-backup nginx-backup
  2. Ver estado de recuperación

    [root@docker1 minio]# velero restore get
    NAME                          BACKUP         STATUS      STARTED                         COMPLETED                       ERRORS   WARNINGS   CREATED                         SELECTOR
    nginx-backup-20201028145528   nginx-backup   Completed   2020-10-28 14:55:28 +0800 CST   2020-10-28 14:55:28 +0800 CST   0        7          2020-10-28 14:55:28 +0800 CST   <none>

    NOTA: Durante la recuperación, STATUSel estado de la barra es InProgress.

  3. Ver el estado del clúster:

    [root@docker1 minio]# kubectl get services --namespace=nginx-example
    NAME       TYPE           CLUSTER-IP      EXTERNAL-IP      PORT(S)        AGE
    my-nginx   LoadBalancer   10.96.177.151   192.168.14.162   80:30813/TCP   2m8s
    [root@docker1 minio]# kubectl get namespace/nginx-example
    NAME            STATUS   AGE
    nginx-example   Active   2m9s

Limpiar velero

  1. Eliminar copia de seguridad de velero

    velero backup delete nginx-backup 
  2. Verifique la situación de la copia de seguridad

    velero backup get nginx-backup 
  3. Clúster de velro transparente

    kubectl delete namespace/velero clusterrolebinding/velero
    kubectl delete crds -l component=velero
    kubectl delete -f examples/nginx-app/base.yaml

Registro de errores

Velero se instala en la línea de comando local y la resolución dns local es la IP del dominio interno de la empresa. Entonces, cuando velero estaba retrocediendo, no se encontró el dns del clúster k8s. La instalación de velero puede especificar publicURL.

image.png

referencia

Uso de Velero para realizar copias de seguridad y restaurar aplicaciones que utilizan recursos compartidos de archivos RWX de vSAN File Service

Instalación de evaluación de inicio rápido con Minio

Supongo que te gusta

Origin blog.51cto.com/9406836/2544749
Recomendado
Clasificación