1. Veritas NetBackup 客户端容器简介
为保护部署在容器中的应用程序,Veritas提供了NetBackup客户端容器,NetBackup客户端容器根据NetBackup策略来响应对容器化应用程序的备份请求,具体备份策略取决于应用程序要求满足的SLA(服务等级要求)。当前,NetBackup客户端容器可用于保护以下两种部署模式下的容器化应用程序:
- 使用持久化卷(persistent volume)存储应用数据;
- 使用暂存区域(staging area)存储应用数据;
说明:Veritas从NetBackup 8.1开始支持保护容器化应用程序。
2. Veritas NetBackup 保护容器化应用程序原理
Veritas NetBackup保护容器化应用程序技术方案本质上还是采用基于文件的备份和恢复方式。但与传统基于文件的备份和恢复的技术方案有所不同,Veritas借助容器本身的优势,发布NetBackup客户端容器(备份恢复代理程序),很好的解决了传统基于文件备份和恢复技术中代理程序部署、管理、更新、升级等一系列繁琐的问题。此外,借助NetBackup在数据保护领域多年积累的技术优势,通过NetBackup客户端容器内集成的NetBackup客户端程序,能够保证Docker数据容器备份集的应用一致性。这种技术方案在当前Docker数据容器保护机制不成熟,且不存在与Docker容器相关API,满足Docker数据容器无代理备份与恢复技术方案的要求的背景下,在市场上还是颇具竞争力的。
3. NetBackup客户端容器在Kubernetes的部署架构
当前NetBackup客户端容器保护方案支持以下三种部署架构,分别满足不同场景的容器化应用保护需求。
3.1 将NetBackup客户端容器部署在应用Pod内
NetBackup客户端容器可以驻留在应用Pod中,并从应用程序运行的节点进行操作。为此,为每个应用Pod部署一个NetBackup客户端容器作为辅助容器。在这种部署模式下,将NetBackup客户端容器部署在应用Pod内,具有以下特点:
- NetBackup客户端容器作为一个辅助容器与容器化应用程序共同运行,这保证了应用和NetBackup客户端容器具有相同的生命周期;
- 需要保护的持久化存储卷需要同时挂载到应用容器和NetBackup客户端容器;
该解决方案具有以下优点:
- 对于NetBackup管理员来说,管理简单;
- 具有很好的吞吐性能;
- 支持高效使用NetBackup核心技术,如加速器、客户端直接备份;
- 能够在每个应用程序的唯一名称下对其数据进行管理;
- 与典型的NetBackup客户端恢复体验一致,无需额外的学习、适应;
部署架构图
![](https://i-blog.csdnimg.cn/blog_migrate/ccd508b45c524ddbaa67d6402f6e7d3e.png)
3.2 将NetBackup客户端容器与应用Pod分离部署
NetBackup客户端容器保护容器化应用程序的数据持久化存储卷,只要求NetBackup客户端容器能够访问该持久化存储卷。为此,可将NetBackup客户端容器与应用Pod分离部署,通过一个NetBackup客户端容器来保护多个容器化应用程序。
适用场景:
- 应用程序所有者不希望将NetBackup客户端容器镜像合并到应用Pod中;
- 集群可用的外部IP接口数量有限;
- 最小化集群上的NetBackup侵入及资源占用;
NetBackup客户端容器可以在Kubernetes集群中的每一个节点上都部署,也可以只在其中一个节点上部署。这取决于以下两点:
- 持久化存储卷的访问模式:"ReadWriteOnce"卷只支持从集群中的一个节点访问,"ReadWriteMany"卷支持从集群中的多个节点访问;
- 要求的客户端的吞吐量;
在这种部署模式中,需要将要求保护的所有卷挂载到NetBackup客户端容器中。在Pod启动之后,是不可能将所有卷挂载到NetBackup客户端容器的。因此,要求管理员必须预先知道需要保护的卷,并且必须在创建Pod之前在NetBackup客户机容器模板中定义它们。
所有被保护的容器化应用程序都被放在同一个NetBackup客户端名称下管理。因此,需要单独为每个应用程序创建一个NetBackup备份策略,以应用程序相关的特定关键字命名。
下图展示了如何为通过同一个NetBackup容器客户端保护的应用程序创建不同的备份策略。
![](https://i-blog.csdnimg.cn/blog_migrate/d40e552e5522a90e3468e6f9223f75f5.png)
可根据环境调整每个NetBackup客户端容器上的作业数量。
部署架构图
![](https://i-blog.csdnimg.cn/blog_migrate/7ba8295129dac4037c69e2f758d75ab9.png)
3.3 通过应用备份工具导出数据到临时存储区域,然后在通过NetBackup客户端容器备份
通过应用备份工具导出数据然后在备份的方法是一种对大部分应用程序都使用的方法,它要求在挂载数据卷之外额外挂载一个转储卷,用作导出数据的临时存储区域。应用程序所有者导出应用数据到转储卷上,NetBacku软件通过NetBackup标准策略周期性的扫描并备份转储卷上的数据。
所有被保护的容器化应用程序都被放在同一个NetBackup客户端名称下管理。因此,需要单独为每个应用程序创建一个NetBackup备份策略,以应用程序相关的特定关键字命名。
以下是采用应用备份工具导出数据然后在备份的方法部署一个NetBackup客户端容器保护多个容器化应用程序的部署架构图
![](https://i-blog.csdnimg.cn/blog_migrate/29783c4fe2c1ebb49e1e4f2508b6a4b3.png)
4. 部署NetBackup客户端容器并执行容器化应用程序保护
NetBackup客户端容器通过Docker镜像提供。Veritas提供了已经构建好的Docker镜像。当然,客户也可以自己使用NetBackup客户端文件和Docker文件构建Docker镜像。下面讲解如何部署NetBackup客户端容器并执行容器化应用程序保护。
整体流程图
![](https://i-blog.csdnimg.cn/blog_migrate/d5247b430abe89131b2d17f0919947af.png)
4.1 获取NetBackup客户端容器镜像
4.1.1 从Docker Store获取NetBackup客户端容器镜像(优选)
执行以下命令获取NetBackup客户端容器镜像:
docker pull store/veritasnetbackup/client:8.1.x
4.1.2 从Veritas Support Site获取NetBackup客户端容器镜像:
在部署NetBackup客户端容器之前,首先要满足以下条件:
- 配置外部IP地址或主机名:主机名用于标识连接到NetBackup Master Server的NetBackup客户端容器实例;
- NetBackup客户端容器不能部署在由产生副本的控制器对象管理的Pod中。(例如,部署Pod、复制集Pod)
- 要求开放以下TCP端口:
- PBX: 1556
- vnetd-nbrntd: 13724
- 提供持久化存储用于存放NetBackup数据、日志和配置信息,可以为所有的NetBackup客户端容器提供一个卷,也可以为每一个NetBackup客户端容器单独提供一个卷;
- 如果通过应用备份工具导出数据然后在备份的方法,需要提供额外的转储空间;
4.2 更新应用程序Pod YAML文件
作为部署NetBackup客户端容器的一部分,按照NetBackup客户端的详细要求更新应用程序Pod YAML文件,然后执行以下命令创建Pod:
kubectl apply -f <file_name>.yaml
以下是一个Kubernetes YAML文件示例:
apiVersion: v1
kind: Pod
metadata:
name: application-pod
labels:
pod: application-pod
spec:
hostname: <client-name>
volumes:
- name: nb-client-vol
persistentVolumeClaim:
claimName: nb-client-pvc
- name: application-vol
persistentVolumeClaim:
claimName: application-pvc
containers:
- name: nginx
image: nginx:latest
volumeMounts:
- mountPath: /usr/share/nginx/html
name: application-vol
- name: nb-client
image: store/veritasnetbackup/client:8.1.2
command: [ "/entrypoint.sh" ]
args: [ "-M", "<master-server-name>", "-c", "<client-name>" ]
livenessProbe:
exec:
command:
- /health.sh
initialDelaySeconds: 60
periodSeconds: 180
volumeMounts:
- mountPath: /mnt/nblogs
subPath: nblogs
name: nb-client-vol
- mountPath: /mnt/nbcfg
subPath: nbcfg
name: nb-client-vol
- mountPath: /mnt/nbdata
subPath: nbdata
name: nb-client-vol
- mountPath: /backup
name: application-vol
---
apiVersion: v1
kind: Service
metadata:
name: <client-name>
spec:
type: LoadBalancer
loadBalancerIP: <external-ip-address>
selector:
pod: application-pod
ports:
- name: pbx
port: 1556
- name: vnetd-nbrntd
port: 13724
NetBackup客户端容器入口点是entrypoint.sh
命令:
entrypoint.sh -c <client-name> [-i] [-M <master-server>] [-m <media-serverlist>]
选项:
-c <client-name>
必需参数。客户端名称。与客户端bp.conf中配置的客户端一致。后续会为该客户端名称生成证书;
-i
以交互模式运行容器;
-M <master-server>
容器第一次运行时必须提供,它会保存在客户端bp.conf文件中。在后续的运行中,该参数可选;
-m <media-server-list>
以空格分隔的介质服务器列表,会被保存到客户端bp.conf文件中,该参数必需;
4.3 部署证书
可通过以下列举的众多方法中的一个完成证书的部署。
- 手动部署证书。遵循以下技术说明中提到的步骤:https://www.veritas.com/support/en_US/doc/21733320-127424841-0/v121744015-127424841 ,必须在容器中执行technote中描述的步骤。
- 部署证书通过secrets(秘钥共享)的方式
说明:删除Pod和持久化卷之后,如果使用的客户端名称或IP与NetBackup中已经配置的相同,则使用reissue令牌部署证书。
4.4 创建标准的NetBackup策略
NetBackup容器客户端使用标准的策略或其他类型的策略来运行备份作业。
说明:如需获取更多如何创建策略的信息,参考:
https://www.veritas.com/content/support/en_US/doc/18716246-132504715-0/v42176014-132504715
安全警示
为挂载路径/mnt/nbcfg提供的的持久卷中存放着用于安全通信的关键数据,如秘钥和证书。如果其他人获取了该数据的访问权限,他们可以伪装成NetBackup容器客户端,存在着潜在的安全威胁。因此,该数据不可以共享给除NetBackup容器客户端以外的容器访问。
4.5 恢复持久化卷备份数据
可通过如下步骤恢复持久化卷的备份数据
- 将数据恢复到已经挂载到NetBackup客户端容器的卷(原卷或替代卷)上面:
- 使用NetBackup 备份归档和恢复控制台或者bprestore命令恢复数据;
- 如果是多个容器化应用程序的数据都在同一个NetBackup容器客户端名称下管理的场景,确保每一个容器化应用程序有单独的备份策略,确保关键字已被添加用于鉴别不用的应用程序。使用备份策略和关键字用于筛选哪些数据需要恢复;
- 将数据恢复到没有挂载到NetBackup客户端容器的卷
- 部署一个新的NetBackup客户端容器,将恢复目标卷挂载到该容器上;
- 部署证书;
- 使用NetBackup 备份归档和恢复控制台或者bprestore命令恢复数据;
备注:如果是采用备份后扫描的方法保护容器化应用程序的数据,需要先恢复备份数据,然后在通过相关的应用程序工具恢复数据。
附:参考资料
Veritas NetBackup 客户端容器介绍:
https://hub.docker.com/_/veritas-netbackup-client
NetBackup 客户端容器代码示例:
https://github.com/VeritasOS/netbackup-client-container-code-samples
附:专有名词
Pod:可以在Kubernetes中创建和管理的最小的可部署计算单元;