NetBackup™ Web UI Kubernetes 管理指南
- 适用于 Kubernetes 的 NetBackup 概述
- 部署和配置 NetBackup Kubernetes Operator
- 配置 NetBackup 快照操作的设置
- 在 NetBackup Kubernetes Operator 上部署证书
- 管理 Kubernetes 资产
- 管理 Kubernetes 智能组
- 保护 Kubernetes 资产
- 管理映像组
- 在 NetBackup 中保护 Rancher 管理的群集
- 恢复 Kubernetes 资产
- 在 Kubernetes 中启用 FIPS 模式
- 对 Kubernetes 问题进行故障排除
配置应用程序一致性备份
正在运行应用程序(如数据库)的一些 pod 需要其他过程才能获取应用程序一致性备份。
应用程序一致性备份需要一种机制,来了解应用程序元数据、其内存状态以及驻留在永久性存储上的永久性数据。为了在还原期间获得正常运行状态,在所有这些 Kubernetes 资源之间进行应用程序一致性备份有助于简化恢复过程。如果仅需要崩溃一致性备份,则不需要执行这些过程。
供应商文档中记录了暂停应用程序输入和输出 (I/O) 操作的步骤,以执行应用程序一致性快照。不同应用程序有不同的步骤,因此这类过程的自定义性质非常重要。这类过程的内容由客户决定。
为使用 NetBackup 保护 Kubernetes 工作负载,方法是对备份挂钩应用应用程序 Pod 注释,以获得应用程序一致性快照。Kubernetes 注释只是元数据,可以应用于任何 Kubernetes 资源。Kubernetes 中的挂钩是用户定义的操作,可以是任何命令或多个命令。在 Kubernetes 基础架构中,将这些注释和挂钩应用于需要静默状态的任何应用程序 Pod。
在处理前(快照之前)和处理后(快照之后)使用备份挂钩。在数据保护上下文中,这通常意味着 netbackup-pre-backup 挂钩调用静默过程或命令,netbackup-post-backup 挂钩调用取消静默过程或命令。每组挂钩会指定命令以及应用该命令的容器。请注意,这些命令不在容器上的 shell 内执行。因此,在给定示例中使用带有目录的完整命令字符串。
标识需要应用程序一致性备份的应用程序,并对一组备份挂钩应用注释,作为 Kubernetes 数据保护配置的一部分。
使用 Kubernetes 用户界面 (UI) 向 Pod 添加注释。或者,对于特定 Pod 或标签,在 Kubernetes 群集控制台上使用 kubectl 注释函数。应用注释的方法可能因发行版而异,基于 kubectl 命令在大多数发行版中的广泛应用,以下示例重点介绍该命令。
此外,可以将注释添加到基本 Kubernetes 对象(如部署资源或副本集资源)中,以确保注释包含在任何新部署的 Pod 中。Kubernetes 管理员可以动态更新注释。
标签是附加到 Kubernetes 对象(如 Pod 或服务)的键值对。标签用作具有意义且与用户相关的对象的属性。标签可以在创建时附加到对象,随后可以随时添加和修改。Kubernetes 提供集成支持,支持使用这些标签查询对象和对选定子集执行批量操作。每个对象都可以定义一组键值标签。每个密钥对于给定对象必须是唯一的。
标签元数据格式和语法的示例:
"metadata": {"labels": {"key1":"value1","key2":"value2"}}
可以指定专门的 Pod 名称,也可以指定应用于所需 Pod 组的标签。如果使用了多个注释参数,则指定正确的 JSON 格式,例如 JSON 阵列:'["item1","item2","itemn"]'# kubectl annotate pod [ {pod_name} | -l {label=value}] -n {the-pods-namespace_name} [annotation syntax - see following]
如果某些应用程序需要多个命令来获得所需结果,则可以将此方法与 && 结合使用来联接多个命令。指定的命令不是由 Veritas 提供的,用户必须手动自定义应用程序 Pod。将 {values} 替换为环境中使用的实际名称。
注意:
所有 kubectl 命令都必须在一行中定义。复制或粘贴以下示例时要小心。
升级到 NetBackup 10.2 后,请更新这些新的 netbackup-pre-backup 和 netbackup-post-backup 挂钩的注释,其现在包括 netbackup 前缀:
netbackup-pre.hook.back.velero.io/command netbackup-pre.hook.backup.velero.io/container netbackup-post.hook.back.velero.io/command netbackup-post.hook.backup.velero.io/container
以下是用于锁定和解锁 MongoDB 4.2.23 数据库的命令:
# mongo --eval "db. fsyncLock ()"
# mongo --eval "db.fsyncUnlock()"
这可转换为以下单个命令,用于为 MongoDB 设置备份前挂钩和备份后挂钩。请注意用于转义特殊字符的特殊语法,以及用作 JSON 格式一部分的方括号 ([])、单引号、双引号和逗号 (,):
# kubectl annotate pod {mongodb-pod-name} -n {mongodb namespace} netbackup-pre.hook.back.velero.io/command='["/bin/bash", "-c", "mongo --eval \"db.fsyncLock()\""]' netbackup-pre.hook.backup.velero.io/container={mongodb-pod-name} netbackup-post.hook.backup.velero.io/command='["/bin/bash","-c","mongo --eval \"db.fsyncUnlock()\""]' netbackup-post.hook.backup.velero.io/container={mongodb-pod-name}
以下是用于静默和取消静默 MySQL 数据库的命令:
# mysql -uroot -ppassword -e "flush tables with read lock"
# mysql -uroot -ppassword -e "unlock tables"
这可转换为以下单个命令,用于为 MySQL 设置备份前挂钩和备份后挂钩。在此示例中,我们使用标签而不是 Pod 名称,因此该标签可以一次为多个 Pod 添加注释。请注意用于转义特殊字符的特殊语法,以及用作 JSON 格式一部分的方括号 ([])、单引号、双引号和逗号 (,):
# kubectl annotate pod -l label=value -n {mysql namespace} netbackup-pre.hook.backup.velero.io/command='["/bin/bash", "-c", "mysql -uroot -ppassword -e \"flush tables with read lock\""]' netbackup-pre.hook.backup.velero.io/container={mysql container name} netbackup-post.hook.backup.velero.io/command='["/bin/bash", "-c", "mysql -uroot -ppassword -e \"unlock tables\""]' netbackup-post.hook.backup.velero.io/container={mysql container name}
以下是用于静默和取消静默 PostgreSQL 数据库的命令:
# Psql -U postgres -c "SELECT pg_start_backup('tagvalue');"
# psql -U postgres -c \"SELECT pg_stop_backup();"
这可转换为以下单个命令,用于为 Postgres 设置备份前挂钩和备份后挂钩。在此示例中,我们使用标签而不是 Pod 名称,因此该标签可以一次为多个匹配的 Pod 添加注释。标签可以应用于任何 Kubernetes 对象,在这种情况下,我们使用标签提供另一种方法来修改特定容器并仅选择某些 Pod。请注意用于转义特殊字符的特殊语法,以及用作 JSON 格式一部分的方括号 ([])、单引号、双引号和逗号 (,):
# kubectl annotate pod -l app=app-postgresql -n {postgres namespace} netbackup-pre.hook.backup.velero.io/command='["/bin/bash", "-c", "psql -U postgres -c \"SELECT pg_start_backup(quote_literal($EPOCHSECONDS));\""]' netbackup-pre.hook.backup.velero.io/container={postgres container name} netbackup-post.hook.backup.velero.io/command='["/bin/bash", "-c", "psql -U postgres -c \"SELECT pg_stop_backup();\""]' netbackup-post.hook.backup.velero.io/container={postgres container name}
以下是用于静默和取消静默 Nginx 应用程序的命令:
# /sbin/fsfreeze --freeze /var/log/nginx
# /sbin/fsfreeze --unfreeze /var/log/nginx
这可转换为以下单个命令,用于为 NGINX 设置备份前挂钩和备份后挂钩。在此示例中,我们将忽略容器挂钩,这将修改默认情况下与 Pod 名称匹配的第一个容器。请注意用于转义特殊字符的特殊语法,以及用作 JSON 格式一部分的方括号 ([])、单引号、双引号和逗号 (,):
# kubectl annotate pod {nginx-pod-name} -n {nginx namespace} netbackup-pre.hook.backup.velero.io/command='["/sbin/fsfreeze", "--freeze", "/var/log/nginx"]' netbackup-post.hook.backup.velero.io/command='["/sbin/fsfreeze", "--unfreeze", "/var/log/nginx"]'
以下是用于静默和取消静默 Cassandra 数据库的命令:
# nodetool flush
# nodetool verify
这可转换为以下单个命令,用于为 Cassandra 设置备份前挂钩和备份后挂钩。请注意用于转义特殊字符的特殊语法,以及用作 JSON 格式一部分的方括号 ([])、单引号 (‘’)、双引号 (“”) 和逗号 (,):
# kubectl annotate pod {cassandra-pod} -n {Cassandra namespace} netbackup-pre.hook.backup.velero.io/command='["/bin/bash", "-c", "nodetool flush"]' netbackup-pre.hook.backup.velero.io/container={cassandra-pod} netbackup-post.hook.backup.velero.io/command='["/bin/bash", "-c", "nodetool verify"]' netbackup-post.hook.backup.velero.io/container={cassandra-pod}
注意:
提供的示例仅用作初始指南,每个工作负载的具体要求必须包括备份、工作负载和 Kubernetes 管理员之间的协作。
目前,Kubernetes 不支持在出错时使用挂钩。如果用户指定的命令失败,则备份快照不会继续。
用于返回退出状态的命令的默认超时值为 30 秒。但是,可以使用具有 Pod 注释的以下挂钩来更改此值:
netbackup-pre.hook.backup.velero.io/timeout=#in-seconds#
netbackup-post.hook.backup.velero.io/timeout=#in-seconds#