Utilisez Velero pour sauvegarder le cluster k8s

conditions préalables:

  1. k8s> 1.10, compte tenu principalement de la compatibilité de restic
  2. Déployer DNS dans le cluster
  3. Kubectl installé

installation Velero

  1. 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
  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.

  1. 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
  2. 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
    
  3. 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
  4. 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
  5. 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
  6. Visitez la page Web de velero.

    Navigateur ouvert http://192.168.14.132:30069

    image.png

  7. Déployer un exemple d'application nginx

    kubectl apply -f examples/nginx-app/base.yaml
  8. 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

  1. Créez une sauvegarde basée sur le sélecteur de balises.

    velero backup create nginx-backup --selector app=nginx
  2. Afficher les résultats de la sauvegarde

    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. Supprimez malicieusement nginx-example:

    kubectl delete namespace nginx-example
  4. 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

  1. Exécutez la commande de restauration

    velero restore create --from-backup nginx-backup
  2. 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, STATUSl'état de la barre est InProgress.

  3. 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

  1. Supprimer la sauvegarde Velero

    velero backup delete nginx-backup 
  2. Vérifiez la situation de sauvegarde

    velero backup get nginx-backup 
  3. 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.

image.png

référence

Utilisation de Velero pour sauvegarder et restaurer des applications qui utilisent des partages de fichiers RWX vSAN File Service

Installation d'évaluation de démarrage rapide avec Minio

Je suppose que tu aimes

Origine blog.51cto.com/9406836/2544749
conseillé
Classement