conditions préalables:
- k8s> 1.10, compte tenu principalement de la compatibilité de restic
- Déployer DNS dans le cluster
- Kubectl installé
installation Velero
-
Télécharger 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
-
Achèvement de la commande
Achèvement de la commande de classe k8s.
source <(velero completion )
Déployer le service Velero
Parce que le minion par défaut expose uniquement clusterip, mais lorsque la commande velero est utilisée, l'hôte local interagit réellement, j'ai donc exposé le nodeport de l'hôte velero.
-
Modifiez le fichier de configuration.
Entrez example / minio et modifiez le fichier de configuration minio. Modifiez le type en nodePort. (J'ai spécifié l'adresse nodePort ici, afin d'éviter les conflits, il vaut mieux ne pas la spécifier)
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 déploie le service 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
-
Créez des fichiers spécifiques à Velero et placez-les dans le répertoire minio.
cat > credentials-velero << EOF [default] aws_access_key_id = minio aws_secret_access_key = minio123 EOF
-
Déployer le service Velero
Utilisez publicURL pour exposer l'adresse nodeport exposée par le service minio. L'adresse d'hôte est n'importe quelle adresse de nœud dans le cluster k8s (c'est le cluster k8s pour la résolution de toute façon).
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
-
Vérifier l'état du 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
-
Visitez la page Web de velero.
Navigateur ouvert http://192.168.14.132:30069
-
Déployer un exemple d'application nginx
kubectl apply -f examples/nginx-app/base.yaml
-
Afficher l'état de l'application
[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
Application de sauvegarde
-
Créez une sauvegarde basée sur le sélecteur de balises.
velero backup create nginx-backup --selector app=nginx
-
Afficher les résultats de la sauvegarde
[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>
-
Supprimez malicieusement nginx-example:
kubectl delete namespace nginx-example
-
Vérifiez l'état du déploiement 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
Récupération
-
Exécutez la commande de restauration
velero restore create --from-backup nginx-backup
-
Afficher l'état de la récupération
[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>
REMARQUE: pendant la récupération,
STATUS
l'état de la barre estInProgress
. -
Afficher l'état du cluster:
[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
Nettoyer velero
-
Supprimer la sauvegarde Velero
velero backup delete nginx-backup
-
Vérifiez la situation de sauvegarde
velero backup get nginx-backup
-
Cluster velro transparent
kubectl delete namespace/velero clusterrolebinding/velero kubectl delete crds -l component=velero kubectl delete -f examples/nginx-app/base.yaml
Enregistrement d'erreur
Velero est installé sur la ligne de commande locale et la résolution DNS locale est l'adresse IP du domaine interne de l'entreprise. Ainsi, lorsque Velero effectuait une sauvegarde, le DNS du cluster k8s n'a pas été trouvé. l'installation de velero peut spécifier publicURL.