如何备份kubernetes集群并将其还原到另一个集群? 我在Azure上设置了kubenetes群集,我想每天00.00.00进行备份
答案 0 :(得分:0)
您可以在网络上找到一些有关备份的资源。选择适合您情况的策略很重要。
一般来说,Kubernetes将状态存储在etcd中,GKE,AKS和EKS之类的托管集群也会照顾您的etcd(以及主节点),因此您不能直接访问它。由于您没有提供足够的详细信息,因此我无法提供任何建议,因此,我将简要尝试介绍一些方案。另外,请记住,跨云提供商迁移持久卷可能很棘手(上次我检查Velero不支持该操作-但不确定当前状态)。
一种简单的方法是获取要备份的对象的Yaml(也适用于编辑)
kubectl get *object_name* -n *namespace* --export -o yam
例如。kubectl get daemonset.apps/fluentd-gcp-v3.2.0 -n kube-system --export -o yaml
比只是在其他地方应用它。如果您需要高级选项,例如按计划的cron进行判断,自动备份或基于事件的快照,则必须使用更高级的工具-Shouichi-Heptio Velero,kube-backup或{{3} }
您还可以在此kaptaind.中找到很好的解释,并且有一节介绍了如何使用Kubernetes CronJob或此article通过少量调整自动执行单个主备份,您可以轻松地迁移到其他云。如果您遇到任何问题,请随时提出问题,我将尽力提供帮助-仅添加更多信息,例如您如何创建集群,它是托管服务以及内部包含哪些应用程序。
答案 1 :(得分:0)
我喜欢使用以下脚本: https://gist.github.com/irraz/d23ea066b08c4ff2e5652bd4d62e937e
基本上它以json格式导出,并且删除带有jq的元数据
答案 2 :(得分:0)
有两种解决方案。
解决方案1 -我将Bash脚本放在一起,实际上是使用kubectl导出所有内容。
#!/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"
解决方案2 -使用Helm Backup插件
helm plugin install https://github.com/maorfr/helm-backup
helm backup {NAMESPACE}
然后还原:
helm backup --restore {NAMESPACE}.tgz
for ns in $(kubectl get ns --no-headers | cut -d " " -f1); do
helm backup $ns
done