prerrequisitos:
- k8s> 1.10, considerando principalmente la compatibilidad de restic
- Implementar dns en el clúster
- Kubectl instalado
instalación velero
-
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
-
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.
-
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
-
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
-
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
-
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
-
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
-
Visite la página web del velero.
Navegador abierto http://192.168.14.132:30069
-
Implementar la aplicación nginx de ejemplo
kubectl apply -f examples/nginx-app/base.yaml
-
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
-
Cree una copia de seguridad basada en el selector de etiquetas.
velero backup create nginx-backup --selector app=nginx
-
Ver resultados de la copia de seguridad
[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>
-
Elimina maliciosamente nginx-example:
kubectl delete namespace nginx-example
-
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
-
Ejecutar el comando de restauración
velero restore create --from-backup nginx-backup
-
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,
STATUS
el estado de la barra esInProgress
. -
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
-
Eliminar copia de seguridad de velero
velero backup delete nginx-backup
-
Verifique la situación de la copia de seguridad
velero backup get nginx-backup
-
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.