2
votes

Sauvegarde et restauration Kubernetes

Comment effectuer une sauvegarde du cluster kubernetes et les restaurer sur un autre cluster.? J'ai configuré le cluster kubenetes sur Azure et je souhaite effectuer une sauvegarde tous les jours à 00h00


1 commentaires

3 Réponses :


0
votes

Vous pouvez trouver des ressources sur les sauvegardes sur le Web. Il est important de choisir une stratégie qui fonctionnera dans votre scénario.

En général, Kubernetes stocke son état dans etcd, les clusters gérés comme GKE, AKS et EKS prennent également en charge votre etcd (et le nœud maître) Â donc vous ne pouvez pas y accéder directement. Je ne peux rien vous conseiller en particulier car vous n’avez pas fourni suffisamment de détails, je vais donc essayer brièvement de vous présenter quelques scénarios. N'oubliez pas non plus que la migration de volumes persistants entre les fournisseurs de cloud peut être délicate (la dernière fois que j'ai vérifié, Velero ne le prenait pas en charge - mais je ne suis pas sûr de l'état actuel).

Un moyen simple est d'obtenir le yaml du objet que vous souhaitez sauvegarder (fonctionne également pour les modifications)

kubectl get *object_name* -n *namespace* --export -o yam

ex. kubectl get daemonset.apps / fluentd-gcp-v3. 2.0 -n kube-system --export -o yaml Que simplement l'appliquer ailleurs. Si vous voulez des options avancées, comme juger par tag cron programmé, sauvegardes automatiques ou instantanés basés sur des événements, vous devrez accéder à des outils plus avancés - l'exemple est mentionné par Shouichi - Heptio Velero, kube-backup ou kaptaind.

Vous pouvez également trouver une bonne explication dans cette article et il existe une section sur l'automatisation de la sauvegarde d'un seul maître avec Kubernetes CronJob ou ceci one avec de petits ajustements, vous pouvez facilement migrer vers un autre cloud. Si vous rencontrez des problèmes, n'hésitez pas à demander et j'essaierai de vous aider - ajoutez simplement plus d'informations comme comment avez-vous créé le cluster, est-ce un service géré et quelles applications se trouvent à l'intérieur.


3 commentaires

Salut, Merci pour la relecture, mais je souhaite également déplacer des données.


Bonjour, pour les disques, vous pouvez utiliser un outil externe tel que this Comme avec les bases de données, vous utiliseriez des outils de sauvegarde de base de données . Voici expliqué comment faire cela avec mongodb. Est-ce ce dont vous avez besoin?


Désormais, vous pouvez sauvegarder le PVC avec Velero en utilisant Restic Integrtation. planifier une sauvegarde et une restauration quotidiennes dans un cluster différent. Voici exactement la réponse à cette question: velero.io/docs/master/migration-case < / a>



0
votes

J'aime utiliser ce script: https://gist.github.com/irraz/d23ea066b08c4ff2e5652bd4d62e937e

Fondamentalement, il exporte au format json et les métadonnées avec jq sont supprimées


0 commentaires

0
votes

Vous avez deux solutions.

Solution 1 - Script Bash que j'ai créé pour exporter pratiquement tout en utilisant kubectl.

for ns in $(kubectl get ns --no-headers | cut -d " " -f1); do
  helm backup $ns
done

Solution 2 - Utilisation du plugin Helm Backup

helm backup --restore {NAMESPACE}.tgz

Puis pour restaurer:

helm plugin install https://github.com/maorfr/helm-backup
helm backup {NAMESPACE}

Ou si vous êtes paresseux comme moi, auto boucle chaque ns

#!/bin/bash

# NAMESPACED EXPORTS
for ns in $(kubectl get ns --no-headers | cut -d " " -f1); do
  kubectl --namespace="${ns}" get -o=json bindings,cm,ep,ev,limits,pvc,po,podtemplates,rc,quota,secrets,sa,svc,controllerrevisions,ds,deploy,rs,sts,localsubjectaccessreviews,hpa,cj,jobs,leases,ev,ds,deploy,ing,netpol,rs,pods,netpol,pdb,roles,rolebindings | \
    jq '.items[] |
    select(.type!="kubernetes.io/service-account-token") |
    del(
        .spec.clusterIP,
        .metadata.uid,
        .metadata.selfLink,
        .metadata.resourceVersion,
        .metadata.creationTimestamp,
        .metadata.generation,
        .status,
        .spec.template.spec.securityContext,
        .spec.template.spec.dnsPolicy,
        .spec.template.spec.terminationGracePeriodSeconds,
        .spec.template.spec.restartPolicy
    )' >> "./${ns}.json"
done

# NON-NAMESPACED EXPORTS
kubectl get -o=json cs,ns,no,pv,mutatingwebhookconfigurations,validatingwebhookconfigurations,crds,apiservices,tokenreviews,selfsubjectaccessreviews,selfsubjectrulesreviews,subjectaccessreviews,csr,psp,nodes,psp,clusterrolebindings,clusterroles,pc,sc,volumeattachments | \
    jq '.items[] |
    select(.type!="kubernetes.io/service-account-token") |
    del(
        .spec.clusterIP,
        .metadata.uid,
        .metadata.selfLink,
        .metadata.resourceVersion,
        .metadata.creationTimestamp,
        .metadata.generation,
        .status,
        .spec.template.spec.securityContext,
        .spec.template.spec.dnsPolicy,
        .spec.template.spec.terminationGracePeriodSeconds,
        .spec.template.spec.restartPolicy
    )' >> "./cluster_non-namespaced_export.json"


0 commentaires