重要
此页面上的设置用于支持在 Kubernetes 操作符下将自管理部署迁移到 Kubernetes 中。请勿将其设置在您可以直接部署在 Kubernetes 中的 MongoDB 资源上,但没有陪同的迁移。
本页面文档了仅在从自管理虚拟机部署迁移到 Kubernetes 期间适用的 MongoDB 资源字段、状态条件和注释。有关 MongoDB 资源设置的完整列表,请参阅 MongoDB 数据库资源规范。
外部节点
这些字段标识了迁移正在扩展到 Kubernetes 中的源虚拟机或裸机进程。它们适用于 MongoDB 资源 apiVersion: mongodb.com/v1。
重要
这些字段仅用于迁移。请勿将其设置在 MongoDB 资源上,用于全新的 Kubernetes 部署。
名称覆盖
这些字段仅用于迁移,并将覆盖 Kubernetes 操作符 原本会使用或生成的资源或自动化配置名称。
spec.replicaSetNameOverride类型:字符串
此字段仅用于迁移。当自动化配置副本集名称与 Kubernetes 资源名称不同,或者自动化配置副本集名称不是有效的 Kubernetes 名称时,该名称即为自动化配置副本集名称。
kubectl mongodb migrate-to-mck插件通过其--resource-name-override标志为您设置此字段。
spec.shardNameOverrides类型:
ShardNameOverride对象的数组此字段仅用于迁移。每分片自动化配置副本集名称和分片
_id。注意
请勿将
spec.shardNameOverrides与spec.shardOverrides混淆。spec.shardOverrides配置每分片的资源设置,与迁移命名无关。Kubernetes
StatefulSet名称从不受这些覆盖的影响。
可配置的自动化配置路径
Kubernetes 操作符以前硬编码了这些自动化配置设置。迁移要求它们可配置,以便 Kubernetes 部署可以匹配源虚拟机上已在使用的路径。
spec.downloadBase类型:字符串
默认值:
/var/lib/mongodb-mms-automationMongoDB Agent 下载代理二进制文件的目录。Kubernetes 操作符会从此设置中获取密钥文件路径,并将其设置为
<downloadBase>/keyfile。
spec.security.tls.caFilePath类型:字符串
默认值:
/mongodb-automation/tls/ca/ca-pemKubernetes 操作符 将 CA 证书投影到 pod 内部的绝对路径。此路径必须至少包含两个路径段。应用程序数据库不支持此功能。
注意
如果您的 Pod 模板在此路径或其上方挂载卷,则该挂载可能会遮蔽投影的 CA 文件。在设置自定义值之前,请查看您的
podTemplate卷挂载。
spec.security.authentication.agents.autoPEMKeyFilePath类型:字符串
数据库 Pod 中 MongoDB Agent 组合 PEM 文件的绝对路径。设置此字段将设置 MongoDB Ops Manager 或 Cloud Manager
tls.autoPEMKeyFilePath值,并将spec.security.authentication.agents.clientCertificateSecretRef引用的密钥挂载到该路径。需要
spec.security.authentication.agents.clientCertificateSecretRef。默认为 Kubernetes Operator 用于非迁移部署的哈希派生代理证书挂载路径。
状态条件
status.conditions类型:Kubernetes Conditions 的数组
标准 Kubernetes 条件,以
type为键值。此字段在MongoDB资源上是新增的,并支持迁移。
status.conditions[type=Migrating]类型:Kubernetes 条件
迁移是否处于活动状态的顶级指标。当
spec.externalMembers非空时,status为True;一旦删除最后一个外部节点,它将变为False,原因为MigrationComplete。原因状态含义ValidatingTrue空运行注释已设置。
ExtendingTrue所需的 Kubernetes 节点数超过了上次协调的计数。
PruningTrueexternalMembers计数低于status.migrationObservedExternalMembersCount。InProgressTrue外部节点存在,但没有任何变化。这也是在初次协调时的原因。
MigrationCompleteFalse所有外部节点均已移除。
优先级是
Validating>Extending>Pruning>InProgress。一个也会扩展 Kubernetes 侧的清理报告Extending,这是逐步更改的另一个原因。不允许同时进行修剪和扩展。
若要通过脚本实现迁移完成后的操作,请使用
kubectl wait --for=condition=Migrating=False,而不是轮询status.phase。
status.conditions[type=NetworkConnectivityVerified]类型:Kubernetes 条件
预演运行连接性检查的结果。Kubernetes 操作符会在没有外部节点留下时,从
status.conditions中完全删除此条件。验证器作业退出代码条件状态原因含义作业仍在运行
UnknownRunningstatus.phase为ConnectivityCheckRunning。0TrueNetworkValidationPassed所有外部节点都可访问并已经身份验证。
2FalseAuthenticationFailed凭证、身份验证机制或缺失
__system@local角色。3FalseNetworkFailedDNS、TLS、超时或无法访问的节点。检查作业 Pod 日志。
1或其他FalseUnknownError未分类失败。检查作业 Pod 日志。
在作业开始之前发生的故障使用原因
OperatorImageUnknown、BuildStatefulSetOptions、AgentCertSecretFailed和AgentCertSubject。一旦没有外部节点留下,Kubernetes 操作符会从
status.conditions中完全删除NetworkConnectivityVerified条件。
status.migrationObservedExternalMembersCount类型:整型
Kubernetes 操作符 在上次协调时观察到的
spec.externalMembers条目的数量。Kubernetes 操作符会在下一个协调时将此值与当前的spec.externalMembers计数进行比较,以检测您是否删除了外部节点。当没有剩余外部节点时,此字段未设置。注意
该字段也会出现在
MongoDBOpsManager自定义资源模式中,作为 Go 结构嵌入的副作用。在MongoDBOpsManager资源上,该字段始终为 null。在那里忽略它。
注解
迁移时需要特别注意的相关字段
以下现有的 MongoDB 资源字段不仅用于迁移,但在迁移过程中需要特定值或查看:
spec.members、spec.mongodsPerShardCount、spec.configServerCount和spec.mongosCount均从kubectl mongodb migrate-to-mck插件生成的资源中的0开始。spec.memberConfig[].votes(整数,默认1)和spec.memberConfig[].priority(包含浮点数的字符串,默认"1")。您必须提供至少与spec.members一样多的spec.memberConfig条目。仅当spec.topology为MultiCluster时, Kubernetes Operator 才会忽略分片的片集群的顶级spec.memberConfig。对于单集群分片的集群,顶级spec.memberConfig会配置配置服务器成员以及每个没有匹配spec.shardOverrides条目的分片的成员。kubectl mongodb migrate-to-mck插件不会生成spec.memberConfig,并且Kubernetes Operator 不会默认将新成员设为不投票,因此当新成员同步时,1和"1"的 CRD 默认值不正确。警告
设置 spec.memberConfig在增加节点数量之前
默认情况下,新的 Kubernetes 节点作为投票节点加入。CRD 默认是
votes: 1和priority: "1",这允许仍在同步的节点在完成初始同步之前参与选举。MongoDB 建议您在增加节点数量之前,为每个新的 Kubernetes 节点写入一个
spec.memberConfig记录,并使用votes: 0和priority: "0",以防尚在同步的节点赢得选举。votes是一个整数。priority是一个字符串。必须与源部署完全匹配的字段:
spec.version、spec.featureCompatibilityVersion、spec.additionalMongodConfig.net.port、spec.security.authentication.modes和spec.security.authentication.internalCluster。