关注分享主机优惠活动
国内外VPS云服务器

k8s和etcd--备份etcd数据到s3(k8s备份工具)

总结: 正如你可以想象的那样,. 的重要性。 因此,正确备份数据非常重要。 有许多备份解决方案可用于备份数据,但它们都很相似,并且基本上都是使用命令完成的。 这使您可以定期删除旧数据并保留最新的备份数据。 更好地选择您的部署计划。 我的备份策略是每3小时备份一次。

简介

k8s 中的许多组件几乎是无状态的。 所有数据都存储在etcd中。 etcd可以说是整个k8s集群的数据库。 。 你不难想象etcd的重要性。 因此,备份etcd数据非常重要。 本文主要介绍我们的相关实践。

将etcd数据备份到s3

etcd的备份方案有很多,但都类似,本质上都是使用etcdctl命令完成。

为什么使用 S3?

我们部门经常使用 AWS,因此我们希望使用高可用性,而不是在本地部署 etcd,我想将其备份到存储中。

此外,S3支持存储生命周期配置。 设置完成后,AWS 将定期删除旧数据并帮助您保留新的备份数据。

具体方案

基本上我使用的是etcd-备份项目。 当然,我分叉了它并做了一些更改,主要是对 dockerfile 进行了更改。 将etcdctl更改为实际的在线版本。

修改后的dockerfile如下:

FROM alpine:3.8RUN apk 添加 --no-cachecurl# 获取 etcdctlENV ETCD_VER=v3.2.24RUN cd / tmp && curl -L https://storage.googleapis .com/etcd/${ETCD_VER}/etcd-${ETCD_VER}-linux-amd64.tar.gz | tar xz-C /usr/local/bin --strip-components=1COPY ./etcd-backup /ENTRYPOINT ["/etcd-backup"]CMD ["-h" ]

剩下的就是docker build等。

k8s部署规划

Cronjob是k8s更好的选择。 我的备份策略是每3小时备份一次。

cronjob.yaml:

apiVersion:batch/v1beta1kind:CronJobmetadata:名称:etcd-备份命名空间:kube-systemspec:计划:“0 */4 * * *" successJobsHistoryLimit: 2 failedJobsHistoryLimit: 2 jobTemplate: spec: # 作业超时 activeDeadlineSeconds: 300 template: spec: tolerations: # 允许 master 污点 - key: node-role.kubernetes.io/master Operator: Present Effect: NoSchedule # 容器创建 etcd 备份。   # 在 G8s master 上以主机网络模式运行容器#您现在可以使用 127.0.0.1 作为 etcd 地址。   # 对于 etcd v2 备份,容器必须具有 # 访问 etcd 数据目录的权限。  要实现此目的 # 将 /var/lib/etcd3 安装为卷。   nodeSelector:节点-角色。    kubernetes.io/master: "" container: - name: etcd-backup image: iyacontrol/etcd-backup:0.1 args: # 仅在生产安装中备份来宾集群 # 对于测试安装可能有许多损坏来宾集群 - -prefix=k8s-prod-1 - -etcd-v2-datadir=/var/lib /etcd - -etcd[k4 ]v3 - 端点=https://172.xx.xx.221:2379、https://172.xx.xx.83:2379、https://172.xx.xx.246:2379 [k4 ] [ k4]etcd-v3-cacert=/certs/ca.crt - -etcd-v3-cert=/certs/server.crt - -etcd-v3-key=/certs/server.key [k4 ] -aws-s3-bucket=mybucket - -aws-s3-region=us-east-1 volumeMounts: - mountPath: /var/ lib/etcd 名称:etcd-datadir - mountPath:/certs 名称:etcd-certs env:- 名称:ETCDBACKUP_AWS_ACCESS_KEY valueFrom:SecretKeyRef:名称:etcd-备份密钥:ETCDBACKUP_AWS_ACCESS_KEY - 名称:ETCDBACKUP_AWS_SECRET_KEY valueFrom:SecretKeyRef:名称:etcd- 备份密钥:ETCDBACKUP_AWS_SECRET_KEY - 名称:ETCDBACKUP_PASSPHRASE valueFrom:SecretKeyRef:名称:etcd- 备份密钥:ETCDBACKUP_PASSPHRASE 卷:- 名称:etcd-datadir 主机路径:路径:/var/lib/etcd - 名称:etcd [ k4]certs hostPath: path: /etc/kubernetes/pki/etcd/ # 不要重新启动 pod。 作业处理重新启动失败的 Pod。   restartPolicy: Never hostNetwork: true 

注意:Tolerance 和节点选择器一起工作。 将 Pod 调度到主节点。

然后是secret.yaml:

apiVersion:v1kind:Secretmetadata:名称:etcd-备份命名空间:kube-systemtype:Opaquedata:ETCDBACKUP_AWS_ACCESS_KEY:QUtJTI0TktCT0xQRlEK ETCDBACKUP_AWS_SECRET_KEY:aXJ6eThjQnM2MVRaSkdGMGxDeHhoeFZNUDU4ZGRNbgo= ETCDBACKUP_PASSPHRASE: ""

摘要

您之前尝试使用 etcd- 操作符完成备份。 当我真正尝试使用它时,我意识到这并不好。 其中有很多概念、复杂的组件以及大量难以编写的代码。

最后,选择etcd-备份。 少即是多,主要是为了简单。 查看源代码,用golang编写,并根据自己的需要进行扩展,相对容易。

未经允许不得转载:主机频道 » k8s和etcd--备份etcd数据到s3(k8s备份工具)

评论 抢沙发

评论前必须登录!