第 4 章 创建环境范围内的备份
创建环境范围内的备份涉及复制重要数据,以便在崩溃实例或损坏数据时帮助恢复数据。创建备份后,可以恢复到相关组件的新安装的版本。
在 OpenShift Container Platform 中,您可以在集群级别进行备份,并将状态保存到独立的存储中。环境备份的完整状态包括:
- 集群数据文件
- 每个 master 上的 etcd 数据
- API 对象
- registry 存储
- 卷存储
定期执行备份以防止数据丢失。
以下流程描述了备份应用程序和 OpenShift Container Platform 集群的通用方法。它不能考虑自定义要求。使用以下步骤作为集群的完整备份和恢复流程的基础。您必须采取所有必要的措施以防止数据丢失。
无法保证备份和恢复。您负责备份自己的数据。
4.1. 创建 master 主机备份
在对 OpenShift Container Platform 基础架构进行任何更改之前执行此备份过程,如系统更新、升级或其他显著修改。定期备份数据,以确保在出错时有最新的数据可用。
OpenShift Container Platform 文件
主(master)实例运行重要的服务,如 API 和控制器。/etc/origin/master
目录存储很多重要文件:
- 配置、API、控制器、服务等
- 安装生成的证书
- 所有与云供应商相关的配置
-
密钥及其他身份验证文件,例如,如果使用 htpasswd 时为
htpasswd
- 更多
您可以自定义 OpenShift Container Platform 服务,如增加日志级别或使用代理。配置文件存储在 /etc/sysconfig
目录中。
因为 master 也是节点,所以备份整个 /etc/origin
目录。
流程
您必须在每个 master 节点上执行以下步骤。
- 创建 pod 定义备份(在此)。.
创建 master 主机配置文件的备份:
$ MYBACKUPDIR=/backup/$(hostname)/$(date +%Y%m%d) $ sudo mkdir -p ${MYBACKUPDIR}/etc/sysconfig $ sudo cp -aR /etc/origin ${MYBACKUPDIR}/etc $ sudo cp -aR /etc/sysconfig/ ${MYBACKUPDIR}/etc/sysconfig/
注意master 配置文件为/etc/origin/master/master-config.yaml。
警告/etc/origin/master/ca.serial.txt
文件仅对 Ansible 主机清单中列出的第一个 master 生成。如果您弃用了第一个 master 主机,请在进程前将/etc/origin/master/ca.serial.txt
文件复制到其余 master 主机中。重要在运行多个 master 的 OpenShift Container Platform 3.11 集群中,其中一个 master 节点在
/etc/origin/master
、/etc/etcd/ca
和/etc/etcd/generated_certs
中包括额外的 CA 证书。这些是应用程序节点和 etcd 节点扩展操作所必需的,且需要在另一个 master 节点上恢复,它应该永久不可用。这些目录默认包含在此处的备份过程中。在规划备份时需要考虑的其他重要文件包括:
File
描述
/etc/cni/*
容器网络接口配置(如果使用)
/etc/sysconfig/iptables
存储
iptables
规则的地方/etc/sysconfig/docker-storage-setup
container-storage-setup
命令的输入文件/etc/sysconfig/docker
docker
配置文件/etc/sysconfig/docker-network
docker
网络配置(如 MTU)/etc/sysconfig/docker-storage
docker
存储配置(由container-storage-setup
生成)/etc/dnsmasq.conf
dnsmasq
的主要配置文件/etc/dnsmasq.d/*
不同的
dnsmasq
配置文件/etc/sysconfig/flanneld
flannel
配置文件(如果使用)/etc/pki/ca-trust/source/anchors/
添加到系统的证书(例如,外部 registry)
创建这些文件的备份:
$ MYBACKUPDIR=/backup/$(hostname)/$(date +%Y%m%d) $ sudo mkdir -p ${MYBACKUPDIR}/etc/sysconfig $ sudo mkdir -p ${MYBACKUPDIR}/etc/pki/ca-trust/source/anchors $ sudo cp -aR /etc/sysconfig/{iptables,docker-*,flanneld} \ ${MYBACKUPDIR}/etc/sysconfig/ $ sudo cp -aR /etc/dnsmasq* /etc/cni ${MYBACKUPDIR}/etc/ $ sudo cp -aR /etc/pki/ca-trust/source/anchors/* \ ${MYBACKUPDIR}/etc/pki/ca-trust/source/anchors/
如果软件包被意外删除,或者您需要重新整合
rpm
软件包中所含的文件,则系统中安装的rhel
软件包列表会很有用。注意如果您使用 Red Hat Satellite 功能(如内容视图或事实存储),请提供正确机制来重新安装缺少的软件包和系统中安装的软件包的历史数据。
要创建系统中当前
rhel
软件包的列表:$ MYBACKUPDIR=/backup/$(hostname)/$(date +%Y%m%d) $ sudo mkdir -p ${MYBACKUPDIR} $ rpm -qa | sort | sudo tee $MYBACKUPDIR/packages.txt
如果您使用前面的步骤,则备份目录中存在以下文件:
$ MYBACKUPDIR=/backup/$(hostname)/$(date +%Y%m%d) $ sudo find ${MYBACKUPDIR} -mindepth 1 -type f -printf '%P\n' etc/sysconfig/flanneld etc/sysconfig/iptables etc/sysconfig/docker-network etc/sysconfig/docker-storage etc/sysconfig/docker-storage-setup etc/sysconfig/docker-storage-setup.rpmnew etc/origin/master/ca.crt etc/origin/master/ca.key etc/origin/master/ca.serial.txt etc/origin/master/ca-bundle.crt etc/origin/master/master.proxy-client.crt etc/origin/master/master.proxy-client.key etc/origin/master/service-signer.crt etc/origin/master/service-signer.key etc/origin/master/serviceaccounts.private.key etc/origin/master/serviceaccounts.public.key etc/origin/master/openshift-master.crt etc/origin/master/openshift-master.key etc/origin/master/openshift-master.kubeconfig etc/origin/master/master.server.crt etc/origin/master/master.server.key etc/origin/master/master.kubelet-client.crt etc/origin/master/master.kubelet-client.key etc/origin/master/admin.crt etc/origin/master/admin.key etc/origin/master/admin.kubeconfig etc/origin/master/etcd.server.crt etc/origin/master/etcd.server.key etc/origin/master/master.etcd-client.key etc/origin/master/master.etcd-client.csr etc/origin/master/master.etcd-client.crt etc/origin/master/master.etcd-ca.crt etc/origin/master/policy.json etc/origin/master/scheduler.json etc/origin/master/htpasswd etc/origin/master/session-secrets.yaml etc/origin/master/openshift-router.crt etc/origin/master/openshift-router.key etc/origin/master/registry.crt etc/origin/master/registry.key etc/origin/master/master-config.yaml etc/origin/generated-configs/master-master-1.example.com/master.server.crt ...[OUTPUT OMITTED]... etc/origin/cloudprovider/openstack.conf etc/origin/node/system:node:master-0.example.com.crt etc/origin/node/system:node:master-0.example.com.key etc/origin/node/ca.crt etc/origin/node/system:node:master-0.example.com.kubeconfig etc/origin/node/server.crt etc/origin/node/server.key etc/origin/node/node-dnsmasq.conf etc/origin/node/resolv.conf etc/origin/node/node-config.yaml etc/origin/node/flannel.etcd-client.key etc/origin/node/flannel.etcd-client.csr etc/origin/node/flannel.etcd-client.crt etc/origin/node/flannel.etcd-ca.crt etc/pki/ca-trust/source/anchors/openshift-ca.crt etc/pki/ca-trust/source/anchors/registry-ca.crt etc/dnsmasq.conf etc/dnsmasq.d/origin-dns.conf etc/dnsmasq.d/origin-upstream-dns.conf etc/dnsmasq.d/node-dnsmasq.conf packages.txt
如果需要,您可以压缩文件以节省空间:
$ MYBACKUPDIR=/backup/$(hostname)/$(date +%Y%m%d) $ sudo tar -zcvf /backup/$(hostname)-$(date +%Y%m%d).tar.gz $MYBACKUPDIR $ sudo rm -Rf ${MYBACKUPDIR}
要从头开始创建任何这些文件,openshift-ansible-contrib
存储库包含 backup_master_node.sh
脚本,它将执行前面的步骤。该脚本在运行 脚本的主机上创建一个目录,并复制前面提到的所有文件。
红帽不支持 openshift-ansible-contrib
脚本,但可以在架构团队执行测试以确保代码运行正常且安全时作为参考。
您可以使用以下方法在每个 master 主机上运行该脚本:
$ mkdir ~/git $ cd ~/git $ git clone https://github.com/openshift/openshift-ansible-contrib.git $ cd openshift-ansible-contrib/reference-architecture/day2ops/scripts $ ./backup_master_node.sh -h