我们上一章介绍了Docker基本情况,目前在规模较大的容器集群基本都是Kubernetes,但是Kubernetes涉及的东西和概念确实是太多了,而且随着版本迭代功能在还增加,笔者有些功能也确实没用过,所以只能按照我自己的理解来讲解。
我们讲解Kubernetes,讲到现在已经讲解超过50小节,但是我们还没有讲解过关于Kubernetes备份相关的内容,毕竟这个Kubernetes集群承担了很重要的业务,但是我们还没考虑过集群备份功能,今天这个小节我们讲解下备份相关的内容。
讲解备份之前,我们需要先知道Kubernetes集群的数据存储在哪里,知道了数据存储在哪里,我们是不是只要备份数据库的内容即可。
Kubernetes的的数据经过我们前面多个小节的介绍,我们已经知道他数据都存储在Etcd数据库里面,哪我们应该怎么备份数据库呢?
Etcd由于我们这里是容器部署的,所以在Master里面默认是没有备份工具的,我们需要先准备备份工具。
1.备份工具准备
#按照帮助,但是这个命令会执行失败
kubectl cp kube-system/etcd-master01:/usr/local/bin/etcdctl ./etcdctl
#换成Docker命令则没问题,注意替换容器id
[root@master01 ~]# docker cp 3910:/usr/local/bin/etcdctl ./etcdctl
Successfully copied 18MB to /root/etcdctl
2.备份命令
ETCDCTL_API=3 etcdctl --endpoints=https://127.0.0.1:2379 \
--cacert=/etc/kubernetes/pki/etcd/ca.crt \
--cert=/etc/kubernetes/pki/etcd/server.crt \
--key=/etc/kubernetes/pki/etcd/server.key \
snapshot save ./etcd/snapshot.db
这里多说一点,在Kubernetes里面所有服务端都是带证书的,所以我们操作数据库也需要带上证书,实际上把最后的备份命令换成其他查询命令,也可以查看Etcd里面的数据。
除去我们直接操作Kubernetes的数据库外,实际上我们还有另外一种备份方式。
当我们部署完成集群的时候,目前集群里面只有默认的管控Pod,和网络插件,我们只需要把这些Pod的yaml文件备份到其他地方即可。当我们业务上线以后,我们所有操作都通过yaml文件来写入集群,哪么我们只需要把我们写入集群的yaml文件备份即可,如果存储在版本问题的,我们也可以使用版本工具或者其他方式来标注,这样我们写入集群前的数据都在,也就达到了备份的目的。
如果我们手边的文件已经存在部分丢失,我们也可以把当前集群里面的资源以另存yaml格式方式来进行备份(这个命令将在下一小节详细讲解)。注意不要遗漏资源。
kubectl get deploy xxx -o yaml >xxx.yaml
上面的备份我们已经完成Kubernetes集群的元数据备份,但是集群所需要的集群镜像是否也有备份或者是否具有高可用性,也是需要考虑的,我们后期也会出一期如何来把数据存储到COS里面,也可以用我们前面讲解的Harbor同步功能进行备份。