###stash安装
###stash备份和恢复k8s集群持久化存储卷
组件stash
定义了以下crd
用于备份和恢复持久化卷。
1、Restic
:描述备份操作的对象,定义了备份目标,备份存储目的地,备份调度周期,备份快照保留策略。
2、Repository
:描述了备份存放后端的对象,用户通过该对象可以更容易的查看备份存储后端信息。
3、Snapshot
:描述备份的一份快照的对象,用户通过该对象可以列出,删除备份的快照,在恢复备份过程中,可以通过该对象指定特定快照进行恢复。
4、Recovery
:描述恢复操作的对象,定义了恢复操作将作用的备份后端存储和快照信息,恢复的目的卷。
前提: kubernetes
集群、存储后端,例如NFS
###stash备份k8s集群持久化存储卷
参考网址: https://appscode.com/products/stash/0.8.3/guides/backup/
备份操作有两种模式:在线模式和离线模式
(1)、在线模式
步骤:
1、创建secret
对象,用于加密备份的数据和保存访问存储后端的证书。
2、创建Restic
对象,定义备份操作。
3、stash
会watch
到Restic
对象的变化。
4、stash
在Restic
对象定义的备份目标上创建sidecar
容器,该容器会挂载备份目标目录和目的地存储后端目录。
5、sidecar
容器负责周期性的执行备份操作,执行过程中,会创建Repository
和Snapshot
对象描述已完成的备份后端存储目录和快照。
过程图如下
参考网址:https://appscode.com/products/stash/0.8.3/guides/offline_backup/
(2)、离线模式
步骤:
1、创建secret
对象,用于加密备份的数据和保存访问存储后端的证书。
2、创建Restic
对象,定义备份操作。
3、stash
会watch
到Restic
对象的变化。
4、stash
会注入init-container
容器到备份目标上,该容器会挂载备份目标目录和目的地存储后端目录。
5、stash
会创建cronjob
。
6、cronjob
周期调度执行重启备份目标。
7、备份目标重启时,注入的init-container
容器执行备份操作,执行过程中,会创建Repository
和Snapshot
对象描述已完成的备份后端存储目录和快照。
周期重启cronjob
对不同的备份目标重启过程如下:
备份目标为statefulset
或daemonset
时,重启时将删除所有的pod
,在重建pod
,每一个pod
的init-container
都会执行备份操作。
备份目标为deployment
、replicaset
、replicationcontroller
时,它会把pod
的数量缩到0
。然后创建一个pod
执行备份操作,再把pod
伸缩到原始数量,拉伸过程中pod
不会执行备份操作。
备份例子:
文件restic.yaml
定义的restic
对象如下。
对象restic
定义的备份目标为带有标签app: stash-demo
的deployment
、replicaset
、replicationcontroller
、statefulset
、daemonset
。需要备份的目录为这些目标管理的pod
中文件目录/source/data
,这个目录以卷名为source-data
挂在到sidecar/initcontainer
上的目录/source/data
。
对象restic
定义的备份存储目的地为nfs
存储后端192.168.124.62:/var/nfs
,备份数据加密密码存放在名为local-secret
的secret
对象中。
对象restic
定义的备份调度周期为每分钟调度一次。
对象restic
定义的备份快照保留策略为保留最近的5
份快照。
###stash恢复k8s集群持久化存储卷 参考网址: https://appscode.com/products/stash/0.8.3/guides/restore/
步骤:
1、创建Recovery
对象,定义恢复操作。
2、stash
会watch
到Recovery
对象的变化,获得Recovery
对象中定义的存储后端目录和快照信息,以及恢复目标卷信息。
3、stash
创建job
来执行恢复操作。
4、job
会读取存储后端目录信息Repository
和后端证书secret
,从而访问到待操作的数据。
5、job
执行恢复操作,把数据从存储后端目录恢复到指定卷。
6、最后,用户创建新的deploument/statefulset/rc
挂载目的卷。
过程图如下
恢复例子:
文件recovery.yaml
定义的recovery
对象如下。
对象recovery
定义的恢复备份数据到名为stash-recovered
的pvc
对象的/source/data
目录。
对象recovery
定义的恢复备份数据来源于名为deployment.stash-demo
的repository
对象。
对象repository
定义的备份数据来源为nfs
服务器192.168.124.62:/var/nfs/deployment/stash-demo
。加密密码存放在名为local-secret
的secret
对象中。