kubectl mongodb 插件始终会向其生成的资源添加 mongodb.com/migration-dry-run: true 注释,以便将部署迁移到 Kubernetes。只要存在该注释,Kubernetes Operator 就不会进行任何自动化配置更改。它仅验证连接性和凭证,因此您可以在 Kubernetes Operator 接管部署之前根据需要多次修复问题并重新运行。
关于此任务
Kubernetes 操作符为每个
MongoDB资源创建一个作业,名为<resourceName>-connectivity-check。该作业调用所有外部节点,并对其进行身份验证。它使用ttlSecondsAfterFinished自行删除,下一个协调会重新创建它,因此,修复后的重新验证是自动的。您无需要手动 trigger 它。预运行会检查 Kubernetes 到虚拟机的可访问性(DNS、TLS、防火墙和节点地址)和凭证,包括
local数据库上的__system角色,以及启用 TLS 时的 CA。试运行不会检查虚拟机到 Kubernetes 的入站连接。请自行验证该方向,可以通过 Ops Manager 用户界面监控部署状态,或者从虚拟机节点运行
rs.status()并确认其可以访问 Kubernetes Pod。插件和 Kubernetes 操作符 版本检查都会运行,无论是否存在 dry-run 注释。
开始之前
一个生成的
MongoDB自定义资源,其中仍然存在mongodb.com/migration-dry-run: true注释。要学习如何生成此资源,请参阅 将副本集迁移到 Kubernetes。如果部署使用 TLS,则需要 为迁移到 Kubernetes 配置 TLS 中描述的节点证书和 CA 材料。
Kubernetes 操作符
ServiceAccount具有batch/jobs权限 (create、get、list、watch和delete)。没有此授权,Kubernetes 操作符根本无法创建连接验证器作业。
步骤
读取结果。
读取 status.conditions[type=NetworkConnectivityVerified]:
验证器作业退出代码 | 条件状态 | 原因 | 含义 |
|---|---|---|---|
作业仍在运行 |
|
|
|
|
|
| 所有外部节点都可访问并已经身份验证。 |
|
|
| 凭证、身份验证机制或缺失 |
|
|
| DNS、TLS、超时或无法访问的节点。检查作业 Pod 日志。 |
|
|
| 未分类失败。检查作业 Pod 日志。 |
在作业开始之前发生的故障使用原因 OperatorImageUnknown、BuildStatefulSetOptions、AgentCertSecretFailed 和 AgentCertSubject。
一旦没有外部节点留下,Kubernetes 操作符会从 status.conditions 中完全删除 NetworkConnectivityVerified 条件。
修复问题,并在必要时重新运行。
根据需要,修复 Kubernetes 或 Ops Manager 用户界面中的连接或凭证问题。您无需删除或重新应用任何内容:下一次协调会自动重新创建验证程序作业。
如果试运行似乎卡住,请删除 <resourceName>-connectivity-check 作业。下一个协调将重新创建它。
在 Kubernetes 操作符 ServiceAccount 上缺少 batch/jobs RBAC 授权会阻止作业在第一时间创建,因此,在该情况下根本不会出现任何条件或作业。在作业开始前发生的故障会表现为原因 OperatorImageUnknown、BuildStatefulSetOptions、AgentCertSecretFailed 或 AgentCertSubject,而非上述表格中的退出代码原因。
删除演练运行注解以继续。
当 NetworkConnectivityVerified 条件为 True 且原因为 NetworkValidationPassed 时,删除该注解:
kubectl annotate mdb <resourceName> \ mongodb.com/migration-dry-run-
重要
删除 dry-run 运行注释是 Kubernetes 操作符接管 Ops Manager 或 Cloud Manager 项目的时间点。请将其视为您刚刚验证的连接和凭证状态的不可逆转点。