注意
对于此页面上提到的所有 Ops Manager,您都可以将其替换为 Cloud Manager。
MongoDB Enterprise Kubernetes Operator 从您写入的规范文件创建Kubernetes StatefulSet。
Kubernetes Operator 在 Kubernetes 中创建 MongoDB 专用资源作为自定义资源。
要管理这些自定义资源,请使用以下进程:
- 创建或更新 - MongoDB资源规范。
- 指导 MongoDB Enterprise Kubernetes Operator 将其应用到您的 Kubernetes 环境。因此,Kubernetes Operator 执行以下操作: - 创建已定义的 StatefulSets、服务和其他 Kubernetes 资源。 
- 更新 Ops Manager 部署配置以反映更改。 
 
每个MongoDB资源都使用 YAML中的对象规范来定义 MongoDB 对象的特征和设置:独立运行、副本集和分片集群。
通用的资源设置
每种资源类型都必须使用以下设置:
必需
- spec.credentials
- 类型:字符串 - 必需。Kubernetes 密钥 的名称,您创建的密钥作为MongoDB Ops Manager API身份验证凭证,供Kubernetes Operator 与Cloud Manager或MongoDB Ops Manager通信。 - 持有凭证的 Ops Manager Kubernetes Secret 对象必须与您要创建的资源位于同一个命名空间中。 - 重要- Operator 管理对密钥的更改- Kubernetes Operator 会跟踪该 Secret 的任何更改并协调 - MongoDB资源的状态。
- spec.persistent
- 类型:布尔值 - 默认:真 - 警告:授予容器写入持久卷的权限。Kubernetes Operator 在 - securityContext中设置- fsGroup = 2000、- runAsUser = 2000和- runAsNonRoot = true。Kubernetes Operator 将- fsgroup设置为等于- runAsUser,以使在容器中运行主进程的用户可写入该卷。要学习;了解更多信息,请参阅Kubernetes文档中的为 Pod 或容器配置安全上下文以及相关讨论。如果重新部署资源无法解决持久卷的问题,联系MongoDB支持部门。- 如果您不使用持久卷,则在查看此部署的数据时, Disk Usage和Disk IOPS 图表将无法显示在Processes Deployment页面上的 标签页中,也无法显示在Metrics 页面中。 
- spec.version
- 类型:字符串 - 您在此 - MongoDB资源上安装的 MongoDB 版本。- 重要- 请务必选择兼容的 MongoDB Server 版本。 - 兼容版本因 MongoDB 数据库资源使用的基础图片而异。 - 注意- 如果您将此值更新为数据库资源的更高版本的MongoDB ,则特征兼容性版本将保留为您要升级的MongoDB版本,以便您可以在必要时选择降级。 如果您希望特征兼容性版本与新的MongoDB版本匹配,则必须手动设立 - spec.featureCompatibilityVersion设置为新版本或- AlwaysMatchVersion。 要学习;了解更多信息,请参阅- spec.featureCompatibilityVersion。
可选的
每个资源必须使用以下设置之一:
- spec.opsManager.configMapRef.name
- 类型:字符串 - 具有Cloud Manager或MongoDB Ops Manager连接配置的 ConfigMap 的名称。 - spec.cloudManager.configMapRef.name设置是此设置的别名,可以用来代替它。- 此值必须与待创建的资源位于同一命名空间。 - 重要- Operator 管理对 ConfigMap 的更改- Kubernetes Operator 会跟踪该 ConfigMap 的任何更改并协调 - MongoDB资源的状态。
Optional
每种资源类型都可以使用以下设置:
- metadata.annotations.mongodb.com/v1.architecture
- 类型:字符串 - 确定特定部署使用的容器架构: - 在运行时下载 MongoDB 二进制文件的默认非静态容器,或 
- 在运行时不可变的静态容器(公共预览版) 。 
 - 接受的值为: - static
- non-static
 - apiVersion: mongodb.com/v1 - kind: MongoDB - metadata: - name: my-project - annotations: - mongodb.com/v1.architecture: "static" 
- spec.agent.mongod.auditlogRotate.sizeThresholdMB
- 类型:数字 - 在MongoDB Agent轮换日志之前,Atlas 审核日志文件的最大大小(以 MB 为单位)。 
- spec.agent.mongod.auditlogRotate.numTotal
- 类型:整型 - MongoDB Ops Manager保留的Atlas 审核日志文件总数。 如果不设立此值,则Atlas 审核日志文件的总数默认为0 。 
- spec.agent.mongod.auditlogRotate.percentOfDiskspace
- 类型:数字 - Ops Manager 可用于存储日志文件的总磁盘空间的最大百分比,以十进制表示。如果超过此限制,Ops Manager 将删除压缩的日志文件,直到达到此限制。Ops Manager 首先删除最早的日志文件。 - 默认值为0.02 。 
- spec.agent.mongod.logRotate.sizeThresholdMB
- 类型:整型 - MongoDB Ops Manager轮换单个日志文件之前的最大大小(以 MB 为单位)。 MongoDB Ops Manager如果满足此 - sizeThresholdMB或 中给定的值,- spec.agent.mongod.logRotate.timeThresholdHrs会立即轮换日志文件。
- spec.agent.mongod.logRotate.timeThresholdHrs
- 类型:整型 - 下次轮换之前单个日志文件的最大持续时间(以小时为单位)。 自上次轮换以来的时间。 - MongoDB Ops Manager一旦文件满足此 - timeThresholdHrs- spec.agent.mongod.logRotate.sizeThresholdMB或 , 就会轮换日志文件。
- spec.agent.monitoringAgent.logRotate.sizeThresholdMB
- 类型:整型 - 在MongoDB Agent轮换监控日志之前,单个日志文件的最大大小(以 MB 为单位)。 
- spec.agent.readinessProbe.environmentVariables
- 类型:对象 - 配置以下环境变量,用于控制就绪探针的日志文件: - apiVersion: mongodb.com/v1 - kind: MongoDB - metadata: - name: my-project - spec: - agent: - readinessProbe: - environmentVariables: - READINESS_PROBE_LOGGER_BACKUPS: 1 - READINESS_PROBE_LOGGER_MAX_SIZE: 10 - READINESS_PROBE_LOGGER_MAX_AGE: 3 - READINESS_PROBE_LOGGER_COMPRESS: true - MDB_WITH_AGENT_FILE_LOGGING: false - LOG_FILE_PATH: /var/log/mongodb-mms-automation/readiness.log 
- spec.featureCompatibilityVersion
- 类型:字符串 - MongoDB升级后默认为之前的MongoDB主要版本。 - 限制升级到新的主要版本时发生的数据更改。 示例,如果您从MongoDB 5.0升级到MongoDB 6.0 ,则特征兼容性版本将保持为5.0 ,以便您可以在必要时选择降级。 - 如果您希望特征兼容性版本与新的MongoDB版本匹配,则必须手动设立 - featureCompatibilityVersion设置为新版本。 示例,- featureCompatibilityVersion: 6.0。- 或者,您可以启用 - AlwaysMatchVersion选项,以便在升级期间自动更新特征兼容性版本以匹配MongoDB版本。 示例,- featureCompatibilityVersion: AlwaysMatchVersion。- 要学习;了解有关功能兼容性的更多信息,请参阅MongoDB手册中的 - setFeatureCompatibilityVersion。
- spec.clusterDomain
- 类型:字符串 - 默认值:cluster.local - 部署 Kubernetes Operator 的 Kubernetes 集群的域名。当 Kubernetes 创建 StatefulSet 时,Kubernetes 会为每个 Pod 分配一个 FQDN。要更新 Cloud Manager 或 Ops Manager,Kubernetes Operator 使用提供的集群名称计算每个 Pod 的 FQDN。Kubernetes 不提供这些主机名查询用的 API。 - 警告- spec.clusterDomain如果Kubernetes集群具有默认 以外的默认域,则必须设立- cluster.local。如果既不使用默认,也不设立- spec.clusterDomain选项, Kubernetes Operator 可能无法按预期运行。
- spec.clusterName
- 类型:字符串 - 默认值:cluster.local - 部署 Kubernetes Operator 的 Kubernetes 集群的域名。当 Kubernetes 创建 StatefulSet 时,Kubernetes 会为每个 Pod 分配一个 FQDN。要更新 Cloud Manager 或 Ops Manager,Kubernetes Operator 使用提供的集群名称计算每个 Pod 的 FQDN。Kubernetes 不提供这些主机名查询用的 API。 - 警告- spec.clusterDomain如果Kubernetes集群具有默认 以外的默认域,则必须设立- cluster.local。如果既不使用默认,也不设立- spec.clusterDomain选项, Kubernetes Operator 可能无法按预期运行。
- spec.service
- 类型:字符串 - 默认:<resource_name>+"-svc" 和 <resource_name>+"-svc-external" - 要为 StatefulSet 创建或用于 StatefulSet 的 Kubernetes 服务的名称。如果具有该名称的服务已存在,MongoDB Enterprise Kubernetes Operator 不会删除或重新创建该服务。该设置允许您创建自己的自定义服务,并让 Kubernetes Operator 重新使用这些服务。 
- spec.logLevel
- 类型:字符串 - 默认值:INFO - 配置 Pod 内自动化代理日志记录的级别。接受的值包括: - DEBUG
- INFO
- WARN
- ERROR
- FATAL
 
部署特定的资源设置
您可以且必须在 MongoDB 资源规范中使用的其他设置取决于您要创建的 MongoDB 部署项:
独立的设置
注意
所有独立设置也会应用于副本集资源。
- spec.additionalMongodConfig
- 类型:集合 - 启动 MongoDB 进程时需要使用的其他配置选项。 - Kubernetes Operator 支持您通过 MongoDB 助手部署的 MongoDB 版本所支持的所有配置选项,但 Kubernetes Operator 会覆盖您为以下任何选项提供的值: - 要详细了解 Kubernetes Operator 拥有的配置选项,请参阅 MongoDB Kubernetes Operator 独有设置。 - 如需了解可以使用哪些配置选项,请参阅 Ops Manager 文档中的“MongoDB 部署高级选项”。 
- spec.agent.startupOptions
- 类型:集合 - 您要用来启动 MongoDB 数据库资源的 MongoDB 助手设置。 - 您必须以键值对形式提供 MongoDB 助手设置。这些值必须是字符串。 - 有关支持的 MongoDB 助手设置列表,请参阅: - 云管理器项目的 MongoDB 代理设置。 
- MongoDB Agent Operator 部署的MongoDB Ops Manager版本的 MongoDB Kubernetes 。 
 - 1 - 2 - apiVersion: mongodb.com/v1 - 3 - kind: MongoDB - 4 - metadata: - 5 - name: my-standalone - 6 - spec: - 7 - version: "6.0.0-ent" - 8 - service: my-service - 9 - 10 - opsManager: - 11 - configMapRef: - 12 - name: my-project - 13 - credentials: my-credentials - 14 - type: Standalone - 15 - 16 - persistent: true - 17 - agent: - 18 - startupOptions: - 19 - maxLogFiles: "30" - 20 - dialTimeoutSeconds: "40" - 21 - ... 
- spec.podSpec
- 类型:对象 - 包含MongoDB CustomResourceDefinition Pod 规范的对象。 
- spec.externalAccess
- 类型:集合 - 适用于外部连接的集群公开规范。要了解如何从 Kubernetes 集群外部连接到您的 MongoDB 资源,请参阅从 Kubernetes 外部连接到 MongoDB 数据库资源。 - 如果您添加 - spec.externalAccess,则 Kubernetes Operator 为副本集中的每个 Pod 创建一个外部服务。外部服务为集群中的每个 MongoDB 数据库 Pod 提供外部入口点。每个外部服务具有选择器,它将外部服务与特定 Pod 相匹配。- 如果添加此设置时不带任何值,Kubernetes Operator 会创建具有以下默认值的外部服务: 字段值说明- Name- <pod-name>-svc-external- 外部服务的名称。您无法更改此值。 - Type- LoadBalancer- 创建外部 LoadBalancer 服务。 - Port- <Port Number>- mongod的端口。- publishNotReadyAddress- true- 指定即使 Pod 尚未准备就绪,也会创建 DNS 记录。对于任何数据库Pod,请勿设立为 - false。- 注意- 如果设置 - spec.externalAccess.externalDomain,外部服务则会添加另一个端口 (- Port Number + 1) 用于备份。
- spec.externalAccess.externalService
- 类型:集合 - 当您设立 - spec.externalAccess设置时, Kubernetes Operator 会自动使用默认值创建外部负载负载均衡器服务。您可以根据需要覆盖某些值或添加新值。示例,如果您打算创建 NodePort 服务并且不需要负载负载均衡器,则必须在Kubernetes规范中配置覆盖:- externalAccess: - externalService: - annotations: - # cloud-specific annotations for the service - spec: - type: NodePort # default is LoadBalancer - # you can specify other spec overrides if necessary - 有关 Kubernetes 规范的更多信息,请参阅 Kubernetes 文档中的 ServiceSpec。 
- spec.externalAccess.externalService.annotations
- 类型:集合 - 键值对,可让您将特定于云提供商的配置设置添加到部署中的所有集群。要学习;了解更多信息,请参阅Kubernetes云提供商的注释和文档。 - 您可以使用注解为Kubernetes Operator 部署使用的外部服务指定占位符值。Kubernetes Operator 会自动将这些值替换为正确的值,如下表所述。使用占位符,您可以在每个服务中为特定 Pod 提供特定注释。 值说明- {resourceName}- {namespace}- {podIndex}- StatefulSet 分配且当前外部服务所针对的 Pod 的索引。 - {podName}- 等于 - {resourceName}-{podIndex}。- {statefulSetName}- StatefulSet。等于 - {resourceName}。- {externalServiceName}- 根据指定的占位符值生成的外部服务名称。 等于 - {resourceName}-{podIndex}-svc-external。- {mongodProcessDomain}- 托管mongod进程的服务器的域名。 - spec.externalAccess.externalDomain等于 (如果已指定)。否则,等于用于- mongod进程FQDN 的域。- 例如,对于进程主机名 - mdb-rs-1.example.com,- example.com是域名。- {mongodProcessFQDN}- 进程主机名取决于您的部署配置。 如果已将部署配置为使用 - external domains,则进程主机名将使用以下格式:- {resourceName}-{podIndex}.{mongodProcessDomain}- 例如: - mdb-rs-1.example.com- 如果您的部署不使用外部域,则进程主机名将使用以下格式: - {resourceName}-{podIndex}.{resourceName}-{podIndex}-svc.{namespace}.svc.cluster.local- 例如: - mdb-rs-1.mdb-rs-1-svc.ns.svc.cluster.local- 注意- 您必须仅使用表中指定的已知占位符值,并确保占位符不使用空值或 null 值。 此外,您不能将特定于多 Kubernetes 集群部署的占位符用于单个MongoDB资源部署。 - 否则,Kubernetes Operator 将返回错误。 例如,您可能会遇到以下错误消息: - error replacing placeholders in map with key=external-dns.alpha.kubernetes.io/hostname, value={resourceName}-{podIndex}-{unknownPlaceholder}.{clusterName}-{clusterIndex}.example.com: missing values for the following placeholders: {clusterName}, {clusterIndex}, {unknownPlaceholder}`` - 例子- 以下示例指定了 - {resourceName}、- {podIndex}和- {namespace}占位符:- apiVersion: mongodb.com/v1 - kind: MongoDB - metadata: - name: mdb-rs - namespace: ns - spec: - replicas: 3 - externalAccess: - externalService: - annotations: - external-dns.alpha.kubernetes.io/hostname: {resourceName}-{podIndex}-{namespace}.example.com - Kubernetes Operator 会根据每个占位符的正确值自动填充外部服务的注释。 例如: - mdb-rs-0-svc-external: - annotations: - external-dns.alpha.kubernetes.io/hostname: mdb-rs-0-ns.example.com - mdb-rs-1-svc-external: - annotations: - external-dns.alpha.kubernetes.io/hostname: mdb-rs-1-ns.example.com - mdb-rs-2-svc-external: - annotations: - external-dns.alpha.kubernetes.io/hostname: mdb-rs-2-ns.example.com 
- spec.externalAccess.externalService.spec
- 类型:集合 - ServiceSpec 的配置。要学习;了解详情,请参阅 - spec.externalAccess.externalService。
- spec.podSpec.persistence.single
- 类型:集合 - 让 Kubernetes Operator 创建持久化卷声明,并将数据、事务日志与运行日志的所有三个目录挂载到同一个持久卷。 - 注意- 如果 - spec.persistent- : true,则必须设置此集合中的值。
- 您可以设置此集合或 - persistence.multiple集合,但不能同时设置两者。
 标量数据类型说明- labelSelector- 字符串 - storage- 字符串 - storageClass- 字符串 - 持久卷声明中指定的存储类型。您可以先将此存储类型创建为StorageClass对象,然后再用于此对象规范。 - 确保将StorageClass - reclaimPolicy设立为Retain。这可确保在删除持久卷声明时保留数据。
- spec.podSpec.persistence.multiple.data
- 类型:集合 - 让 Kubernetes Operator 创建持久卷声明,并将数据目录挂载到自己的持久卷上。 - 注意- 如果 - spec.persistent- : true,则必须设置此集合中的值。
- 您可以设置此集合或 - persistence.single集合,但不能同时设置这两个集合。
 标量数据类型说明- labelSelector- 字符串 - storage- 字符串 - storageClass- 字符串 - 独立运行部署所需的存储类型。您可以先将此存储类型创建为StorageClass对象,然后再用于此对象规范。 - 确保将StorageClass - reclaimPolicy设立为Retain。这可确保在删除持久卷声明时保留数据。
- spec.podSpec.persistence.multiple.journal
- 类型:集合 - 让 Kubernetes Operator 创建持久卷声明,并将日志目录挂载到自己的持久卷上。 - 注意- 如果 - spec.persistent- : true,则必须设置此集合中的值。
- 您可以设置此集合或 - persistence.single集合,但不能同时设置这两个集合。
 标量数据类型说明- labelSelector- 字符串 - storage- 字符串 - storageClass- 字符串 - 独立运行部署所需的存储类型。您可以先将此存储类型创建为StorageClass对象,然后再用于此对象规范。 - 确保将StorageClass - reclaimPolicy设立为Retain。这可确保在删除持久卷声明时保留数据。
- spec.podSpec.persistence.multiple.logs
- 类型:集合 - 让 Kubernetes Operator 创建持久卷声明,并将日志目录挂载到自己的持久卷上。 - 注意- 如果 - spec.persistent- : true,则必须设置此集合中的值。
- 您可以设置此集合或 - persistence.single集合,但不能同时设置这两个集合。
 标量数据类型说明- labelSelector- 字符串 - storage- 字符串 - storageClass- 字符串 - 独立运行部署所需的存储类型。您可以先将此存储类型创建为StorageClass对象,然后再用于此对象规范。 - 确保将StorageClass - reclaimPolicy设立为Retain。这可确保在删除持久卷声明时保留数据。
- spec.podSpec.podTemplate.affinity.nodeAffinity
- 类型:结构 - Kubernetes规则将副本集的 Pod 放置在特定范围的节点上。 
- spec.podSpec.podTemplate.affinity.podAffinity
- 类型:结构 - Kubernetes 规则 来确定多个 - MongoDB资源 Pod 是否必须与其他 Pod 共处一地。要学习;了解有关使用案例的更多信息,请参阅Kubernetes文档中的关联和反关联。
- spec.podSpec.podTemplate.affinity.podAntiAffinity
- 类型:结构 - Default: kubernetes.io/hostname - 设置规则以将托管 - MongoDB资源的Pod分布到不同位置。位置可以是单个节点、机架或地区。默认下, Kubernetes Operator 会尝试将 Pod 分布到不同的节点。
- spec.podSpec.podTemplate.affinity.podAntiAffinity.requiredDuringSchedulingIgnoredDuringExecution.topologyKey
- 类型:结构 - Default: kubernetes.io/hostname 
- spec.podSpec.podTemplate
- 类型:集合 - MongoDB Enterprise Kubernetes Operator 为MongoDB 数据库资源创建的Kubernetes Pod 的模板。 - 模板值优先于 - spec.podSpec中指定的值。- 注意- Kubernetes Operator 不会验证您在 - spec.podSpec.podTemplate中提供的字段。
- spec.podSpec.podTemplate.metadata
- 类型:集合 - MongoDB Enterprise Kubernetes Operator 为 MongoDB 数据库资源创建的 Kubernetes Pod 的元数据。 - 要查看哪些字段可以添加到 - spec.podSpec.podTemplate.metadata,请参阅Kubernetes文档。
- spec.podSpec.podTemplate.spec
- 类型:集合 - MongoDB Enterprise Kubernetes Operator 为 MongoDB 数据库资源创建的 Kubernetes Pod 的规范。 - 要查看哪些字段可以添加到 - spec.podSpec.podTemplate.spec,请参阅Kubernetes PodSpec v1 Core API。- 注意- 在将容器添加到 - spec.podSpec.podTemplate.spec.containers时,Kubernetes Operator 将它们添加到 Kubernetes Pod 中。这些容器附加到 pod 中的 MongoDB 数据库资源容器。- 使用此设置为每个 Pod 指定 CPU 和 RAM 分配。 相关示例请参阅 GitHub 上的示例。 
副本集设置
注意
所有独立设置也会应用于副本集资源。
以下设置适用于副本集资源类型:
- spec.backup
- 类型:集合 - spec.backup.mode的集合容器,可实现 Kubernetes Operator 中 MongoDB 资源的连续备份。
- spec.backup.assignmentLabels
- 类型:数组 - 以逗号分隔的标签列表,用于将备份守护程序、oplog 存储、块存储、S3 快照存储和文件系统存储分配给特定的项目或组。可以使用分配标签指定特定备份存储是否与特定项目相关联。 - 如果您使用 Kubernetes Operator 设置分配标签,您在 Kubernetes 配置文件中为分配标签设置的值将覆盖 Ops Manager 用户界面中定义的值。您未使用 Kubernetes Operator 设置的分配标签继续使用 Ops Manager 用户界面中设置的值。 - 注意- 如果设置此参数,则与 - spec.credentials值链接的 API 密钥必须具有- Global Owner角色。
- spec.backup.mode
- 类型:字符串 - 为 MongoDB 资源启用连续备份。可能的值为 - enabled、- disabled和- terminated。- 注意- spec.backup.mode设置依赖于 MongoDB Ops Manager- spec.backup.enabled中启用的MongoDB Ops Manager 备份- true,并要求将 资源规范 中的 值设置为 。- 使用 - spec.backup.mode为 MongoDB 资源启用连续备份后,您可以检查备份状态。
- spec.backup.encryption.kmip
- 类型:对象 - 包含 KMIP 备份加密配置设置的对象。要了解详情,请参阅为 Ops Manager 配置 KMIP 备份加密。 
- spec.backup.snapshotSchedule.dailySnapshotRetentionDays
- 类型:数字 - 保留每日快照的天数。 您可以设置介于 - 1和- 365(含)之间的值。 将值设置为- 0将禁用此规则。
- spec.backup.snapshotSchedule.weeklySnapshotRetentionWeeks
- 类型:数字 - 保存每周快照的周数。可以设置介于 - 1和- 52(含 36)之间的值。将该值设置为- 0将禁用此规则。
- spec.backup.snapshotSchedule.monthlySnapshotRetentionMonths
- 类型:数字 - 保留每月快照的月数。可以设置介于 - 1和- 36(含 36)之间的值。将该值设置为- 0将禁用此规则。
- spec.backup.snapshotSchedule.referenceHourOfDay
- 类型:数字 - 一天之内的小时(UTC 时间),用于按 24 小时制安排快照。可以设置介于 - 0和- 23(含 59)之间的值。
- spec.backup.snapshotSchedule.referenceMinuteOfHour
- 类型:数字 - 小时之内的分钟(UTC 时间),用于安排快照。可以设置介于 - 0和- 59(含 59)之间的值。
- spec.backup.snapshotSchedule.fullIncrementalDayOfWeek
- 类型:字符串 - Ops Manager 撷取完整快照的星期几。此设置可确保最近的完整备份。Ops Manager 会将默认值设置为 - SUNDAY。
- spec.clusterName
- 类型:字符串 - 默认值:cluster.local - 部署 Kubernetes Operator 的 Kubernetes 集群的域名。当 Kubernetes 创建 StatefulSet 时,Kubernetes 会为每个 Pod 分配一个 FQDN。要更新 Cloud Manager 或 Ops Manager,Kubernetes Operator 使用提供的集群名称计算每个 Pod 的 FQDN。Kubernetes 不提供这些主机名查询用的 API。 - 警告- spec.clusterDomain如果Kubernetes集群具有默认 以外的默认域,则必须设立- cluster.local。如果既不使用默认,也不设立- spec.clusterDomain选项, Kubernetes Operator 可能无法按预期运行。
- spec.connectivity.replicaSetHorizons
- 类型:集合 - 允许您为客户端应用程序和 MongoDB 助手提供不同的 DNS 设置。Kubernetes Operator 为副本集成员使用水平分割 DNS。此功能允许 Kubernetes 集群内部与 Kubernetes 外部进行通信。 - 您可以为每台主机添加多个外部映射。 - 水平分割要求: - 确保该数组中的每个值是唯一的。 
- 确保此数组中的条目数与 - spec.members中给出的值匹配。
- 为 - spec.security.certsSecretPrefix设置提供一个值以启用TLS 。 这种使用水平分割的方法需要MongoDB Server TLS 协议的 名称指示扩展。
 - 例子- 在此示例中,副本集成员在 - example-localhost配置上相互通信。 客户端使用- example-website配置与副本集进行通信。- 就本示例而言,所述范围的名称是任意的。 您可以将范围命名为任何名称,但要确保属于该范围的所有主机名都相同。 - 1 - 2 - apiVersion: mongodb.com/v1 - 3 - kind: MongoDB - 4 - metadata: - 5 - name: <my-replica-set> - 6 - spec: - 7 - members: 3 - 8 - version: "4.2.2-ent" - 9 - type: ReplicaSet - 10 - opsManager: - 11 - configMapRef: - 12 - name: <configMap.metadata.name> - 13 - credentials: <mycredentials> - 14 - persistent: true - 15 - security: - 16 - tls: - 17 - enabled: true - 18 - connectivity: - 19 - replicaSetHorizons: - 20 - - "example-website": "web1.example.com:30907" - 21 - - "example-website": "web2.example.com:32350" - 22 - - "example-website": "web3.example.com:31185" - 23 - ... 
- spec.externalAccess.externalDomain
- 类型:字符串 - 用于向外部公开您的副本集部署的外部域。 - 默认情况下,每个副本集节点将 Kubernetes Pod 的 FQDN ( - *.svc.cluster.local) 作为默认主机名。不过,如果您将一个外部域添加到该设置中,副本集将使用作为指定域的子域的主机名。该主机名使用以下格式:- <replica-set-name>-<pod-idx>.<externalDomain>- 例如: - replica-set-1.example.com- 使用此设置部署副本集后, Kubernetes Operator 使用带有外部域的主机名来覆盖MongoDB Ops Manager自动化配置中的 - processes[n].hostname字段。 然后, MongoDB Agent会使用此主机名连接到- mongod。- 要指定用于连接到副本集的其他主机名,可以使用 - spec.connectivity.replicaSetHorizons设置。 但是,以下连接仍使用带有外部域的主机名:- 警告:指定此字段会更改MongoDB Ops Manager注册 - mongod进程的方式。 只能为从Kubernetes Operator 版本1.19开始的新副本集部署指定此字段。 您无法更改此字段的值,也无法更改运行的副本集部署的MongoDB Ops Manager自动化配置中的任何- processes[n].hostname字段。
- spec.memberConfig
- 类型:集合 - 从 - MongoDB资源部署的每个 MongoDB 副本集成员的规范。- 数组中元素的顺序必须反映副本集中成员的顺序。例如,数组的第一个元素会影响索引为 - 0的 Pod,第二个元素会影响索引为- 1的 Pod,依此类推。- 例子- 请考虑三节点副本集的以下示例规范: - spec: - memberConfig: - - votes: 1 - priority: "0.5" - tags: - tag1: "value1" - environment: "prod" - - votes: 1 - priority: "1.5" - tags: - tag2: "value2" - environment: "prod" - - votes: 0 - priority: "0.5" - tags: - tag2: "value2" - environment: "prod" 
- spec.memberConfig.priority
- 类型:字符串 - 表示 MongoDB 副本集成员成为主节点的相对可能性的数字。 - 要增加副本集节点成为主节点的相对可能性,请指定较高的 - priority值。
- 要降低副本集节点成为主节点的相对可能性,请指定较低的 - priority值。
 - 例如, - memberConfig.priority为- 1.5的成员比- memberConfig.priority为- 0.5的成员更有可能成为主节点。- memberConfig.priority为- 0的节点没有资格成为主节点。 要了解更多信息,请参阅成员优先级。
- spec.memberConfig.tags
- 类型:地图 - 副本集标签映射,用于将读取和写入操作定向到 MongoDB 副本集的特定成员。 
- spec.memberConfig.votes
- 类型:数字 - 确定 MongoDB 副本集节点是否可以在选举中投票。 设置为 - 1以允许成员投票。 设置为- 0可将该成员排除在选举之外。
以下设置仅适用于副本集资源类型:
- spec.backup.autoTerminateOnDeletion
- 类型:布尔值 - 用于控制在您删除 MongoDB 资源时 Kubernetes Operator 是否停止并终止备份的标志。 如果省略,则默认值为 - false。 如果您想要在- spec.backup.mode设置为- enabled时删除 MongoDB 自定义资源,则将此标志设置为- true非常有用。
分片集群设置
重要
多集群分片集群部署目前处于公共预览阶段。
注意
除非另行说明,否则所有副本集设置也适用于分片集群资源。
以下设置仅适用于分片集群资源类型:
- spec.backup.snapshotSchedule.clusterCheckpointIntervalMin
- 类型:数字 - 连续集群检查点之间的分钟数。 此设置仅适用于运行分片的且特征兼容性版本为7.0或更早版本的分MongoDB集群。 此数字决定了分片集群的时间点恢复分片的。 您可以设立值设置为 - 15、- 30或- 60。
- spec.configServerCount
- 类型:整型 - 必需。 配置服务器中的成员数。 
- spec.configSrv.additionalMongodConfig
- 类型:集合 - Kubernetes Operator 支持您通过 MongoDB 助手部署的 MongoDB 版本所支持的所有配置选项,但 Kubernetes Operator 会覆盖您为以下任何选项提供的值: - 要详细了解 Kubernetes Operator 拥有的配置选项,请参阅 MongoDB Kubernetes Operator 独有设置。 - 如需了解可以使用哪些配置选项,请参阅 Ops Manager 文档中的“MongoDB 部署高级选项”。 
- spec.configSrv.agent
- 类型:集合 - 每个配置服务器成员的 MongoDB 助手配置设置。 
- spec.configSrv.agent.startupOptions
- 类型:集合 - 要用来启动每个配置服务器成员的 MongoDB 助手设置。 - 您必须以键值对形式提供 MongoDB 助手设置。这些值必须是字符串。 - 有关支持的 MongoDB 助手设置列表,请参阅: - 云管理器项目的 MongoDB 代理设置。 
- MongoDB Agent Operator 部署的MongoDB Ops Manager版本的 MongoDB Kubernetes 。 
 - 1 - 2 - apiVersion: mongodb.com/v1 - 3 - kind: MongoDB - 4 - metadata: - 5 - name: my-sharded-cluster-options - 6 - spec: - 7 - version: "6.0.0-ent" - 8 - type: ShardedCluster - 9 - opsManager: - 10 - configMapRef: - 11 - name: my-project - 12 - credentials: my-credentials - 13 - persistent: true - 14 - shardCount: 2 - 15 - mongodsPerShardCount: 3 - 16 - mongosCount: 2 - 17 - configServerCount: 1 - 18 - 19 - mongos: - 20 - agent: - 21 - startupOptions: - 22 - maxLogFiles: "30" - 23 - 24 - configSrv: - 25 - agent: - 26 - startupOptions: - 27 - dialTimeoutSeconds: "40" - 28 - shard: - 29 - agent: - 30 - startupOptions: - 31 - serverSelectionTimeoutSeconds: "20" - 32 - ... 
- spec.configSrvPodSpec
- 类型:对象 - MongoDB CustomResourceDefinition 包含配置服务器Pod规范的对象。 
- spec.configSrvPodSpec.persistence.single
- 类型:集合 - 让 Kubernetes Operator 创建持久化卷声明,并将数据、事务日志与运行日志的所有三个目录挂载到同一个持久卷。 - 注意- 如果 - spec.persistent- : true,则必须设置此集合中的值。
- 您可以设置此集合或 - persistence.multiple集合,但不能同时设置两者。
 标量数据类型说明- labelSelector- 字符串 - storage- 字符串 - storageClass- 字符串 - 持久卷声明中指定的存储类型。您可以先将此存储类型创建为StorageClass对象,然后再用于此对象规范。 - 确保将StorageClass - reclaimPolicy设立为Retain。这可确保在删除持久卷声明时保留数据。
- spec.configSrvPodSpec.persistence.multiple.data
- 类型:集合 - 让 Kubernetes Operator 创建持久卷声明,并将数据目录挂载到自己的持久卷上。 - 注意- 如果 - spec.persistent- : true,则必须设置此集合中的值。
- 您可以设置此集合或 - persistence.single集合,但不能同时设置这两个集合。
 标量数据类型说明- labelSelector- 字符串 - storage- 字符串 - storageClass- 字符串 - 每个配置服务器成员所需的存储类型。您可以先将此存储类型创建为StorageClass对象,然后再用于此对象规范。 - 确保将StorageClass - reclaimPolicy设立为Retain。这可确保在删除持久卷声明时保留数据。
- spec.configSrvPodSpec.persistence.multiple.journal
- 类型:集合 - 让 Kubernetes Operator 创建持久卷声明,并将日志目录挂载到自己的持久卷上。 - 注意- 如果 - spec.persistent- : true,则必须设置此集合中的值。
- 您可以设置此集合或 - persistence.single集合,但不能同时设置这两个集合。
 标量数据类型说明- labelSelector- 字符串 - storage- 字符串 - storageClass- 字符串 - 每个配置服务器成员所需的存储类型。您可以先将此存储类型创建为StorageClass对象,然后再用于此对象规范。 - 确保将StorageClass - reclaimPolicy设立为Retain。这可确保在删除持久卷声明时保留数据。
- spec.configSrvPodSpec.persistence.multiple.logs
- 类型:集合 - 让 Kubernetes Operator 创建持久卷声明,并将日志目录挂载到自己的持久卷上。 - 注意- 如果 - spec.persistent- : true,则必须设置此集合中的值。
- 您可以设置此集合或 - persistence.single集合,但不能同时设置这两个集合。
 标量数据类型说明- labelSelector- 字符串 - storage- 字符串 - storageClass- 字符串 - 每个配置服务器成员所需的存储类型。您可以先将此存储类型创建为StorageClass对象,然后再用于此对象规范。 - 确保将StorageClass - reclaimPolicy设立为Retain。这可确保在删除持久卷声明时保留数据。
- spec.configSrvPodSpec.podTemplate
- 类型:集合 - MongoDB Enterprise Kubernetes Operator 为每个配置服务器成员创建的Kubernetes Pod 的模板。 - 模板值优先于 - spec.configSrvPodSpec中指定的值。- 注意- Kubernetes Operator 不会验证您在 - spec.configSrvPodSpec.podTemplate中提供的字段。
- spec.configSrvPodSpec.podTemplate.affinity.podAffinity
- 类型:集合 - Kubernetes 规则 来确定多个 - MongoDB资源 Pod 是否必须与其他 Pod 共处一地。要学习;了解有关使用案例的更多信息,请参阅Kubernetes文档中的关联和反关联。
- spec.configSrvPodSpec.podTemplate.affinity.nodeAffinity
- 类型:集合 - Kubernetes规则将副本集的 Pod 放置在特定范围的节点上。 
- spec.configSrvPodSpec.podTemplate.affinity.podAntiAffinity
- 类型:字符串 - Default: kubernetes.io/hostname - 设置规则以将托管 - MongoDB资源的Pod分布到不同位置。位置可以是单个节点、机架或地区。默认下, Kubernetes Operator 会尝试将 Pod 分布到不同的节点。
- spec.configSrvPodSpec.podTemplate.affinity.podAntiAffinity.requiredDuringSchedulingIgnoredDuringExecution.topologyKey
- 类型:字符串 - Default: kubernetes.io/hostname 
- spec.configSrvPodSpec.podTemplate.metadata
- 类型:集合 - MongoDB Enterprise Kubernetes Operator 为每个配置服务器成员创建的 Kubernetes Pod 的元数据。 - 要查看哪些字段可以添加到 - spec.configSrvPodSpec.podTemplate.metadata,请参阅Kubernetes文档。
- spec.configSrvPodSpec.podTemplate.spec
- 类型:集合 - MongoDB Enterprise Kubernetes Operator 为每个配置服务器成员创建的 Kubernetes Pod 的规范。 - 要查看哪些字段可以添加到 - spec.configSrvPodSpec.podTemplate.spec,请参阅Kubernetes PodSpec v1 Core API。- 注意- 当您将容器添加到 - spec.configSrvPodSpec.podTemplate.spec.containers时,Kubernetes Operator 会将它们添加到 Kubernetes Pod 中。 这些容器附加到 Pod 中的每个配置服务器成员容器。- 使用此设置为每个 Pod 指定 CPU 和 RAM 分配。 相关示例请参阅 GitHub 上的示例。 
- spec.mongodsPerShardCount
- 类型:整型 - 必需。 每个分片的节点数。 
- spec.mongos.additionalMongodConfig
- 类型:集合 - Kubernetes Operator 支持您通过 MongoDB 助手部署的 MongoDB 版本所支持的所有配置选项,但 Kubernetes Operator 会覆盖您为以下任何选项提供的值: - 要详细了解 Kubernetes Operator 拥有的配置选项,请参阅 MongoDB Kubernetes Operator 独有设置。 - 如需了解可以使用哪些配置选项,请参阅 Ops Manager 文档中的“MongoDB 部署高级选项”。 
- spec.mongos.agent
- 类型:集合 - MongoDB Agent每个 - mongos实例的 配置设置。
- spec.mongos.agent.startupOptions
- 类型:集合 - MongoDB Agent您要用于启动每个 实例的 - mongos设置。- 您必须以键值对形式提供 MongoDB 助手设置。这些值必须是字符串。 - 有关支持的 MongoDB 助手设置列表,请参阅: - 云管理器项目的 MongoDB 代理设置。 
- MongoDB Agent Operator 部署的MongoDB Ops Manager版本的 MongoDB Kubernetes 。 
 - 1 - 2 - apiVersion: mongodb.com/v1 - 3 - kind: MongoDB - 4 - metadata: - 5 - name: my-sharded-cluster-options - 6 - spec: - 7 - version: "6.0.0-ent" - 8 - type: ShardedCluster - 9 - opsManager: - 10 - configMapRef: - 11 - name: my-project - 12 - credentials: my-credentials - 13 - persistent: true - 14 - shardCount: 2 - 15 - mongodsPerShardCount: 3 - 16 - mongosCount: 2 - 17 - configServerCount: 1 - 18 - 19 - mongos: - 20 - agent: - 21 - startupOptions: - 22 - maxLogFiles: "30" - 23 - 24 - configSrv: - 25 - agent: - 26 - startupOptions: - 27 - dialTimeoutSeconds: "40" - 28 - shard: - 29 - agent: - 30 - startupOptions: - 31 - serverSelectionTimeoutSeconds: "20" - 32 - ... 
- spec.mongosPodSpec
- 类型:对象 - 包含MongoDB CustomResourceDefinition mongos Pod 规范的对象。 
- spec.mongosPodSpec.podTemplate
- 类型:集合 - MongoDB Enterprise Kubernetes Operator 为每个 实例创建的Kubernetes Pod - mongos的模板。- 模板值优先于 - spec.mongosPodSpec中指定的值。- 注意- Kubernetes Operator 不会验证您在 - spec.mongosPodSpec.podTemplate中提供的字段。
- spec.mongosPodSpec.podTemplate.affinity.nodeAffinity
- 类型:集合 - Kubernetes规则将副本集的 Pod 放置在特定范围的节点上。 
- spec.mongosPodSpec.podTemplate.affinity.podAntiAffinity
- 类型:字符串 - Default: kubernetes.io/hostname - 设置规则以将托管 - MongoDB资源的Pod分布到不同位置。位置可以是单个节点、机架或地区。默认下, Kubernetes Operator 会尝试将 Pod 分布到不同的节点。
- spec.mongosPodSpec.podTemplate.affinity.podAntiAffinity.requiredDuringSchedulingIgnoredDuringExecution.topologyKey
- 类型:字符串 - Default: kubernetes.io/hostname 
- spec.mongosPodSpec.podTemplate.metadata
- 类型:集合 - MongoDB Enterprise Kubernetes Operator 为每个 - mongos实例创建的 Kubernetes Pod 的元数据。- 要查看哪些字段可以添加到 - spec.mongosPodSpec.podTemplate.metadata,请参阅Kubernetes文档。
- spec.mongosPodSpec.podTemplate.spec
- 类型:集合 - MongoDB Enterprise Kubernetes Operator 为每个 - mongos实例创建的 Kubernetes Pod 的规范。- 要查看哪些字段可以添加到 - spec.mongosPodSpec.podTemplate.spec,请参阅Kubernetes PodSpec v1 Core API。- 注意- 当您将容器添加到 - spec.mongosPodSpec.podTemplate.spec.containers时,Kubernetes Operator 会将它们添加到 Kubernetes Pod 中。 这些容器附加到 Pod 中的每个- mongos实例容器。- 使用此设置为每个 Pod 指定 CPU 和 RAM 分配。 相关示例请参阅 GitHub 上的示例。 
- spec.shardCount
- 类型:整型 - 必需。 分片集群中的分片数量。 
- spec.shard.additionalMongodConfig
- 类型:集合 - Kubernetes Operator 支持您通过 MongoDB 助手部署的 MongoDB 版本所支持的所有配置选项,但 Kubernetes Operator 会覆盖您为以下任何选项提供的值: - 要详细了解 Kubernetes Operator 拥有的配置选项,请参阅 MongoDB Kubernetes Operator 独有设置。 - 如需了解可以使用哪些配置选项,请参阅 Ops Manager 文档中的“MongoDB 部署高级选项”。 
- spec.shard.agent
- 类型:集合 - 每个分片集群分片成员的 MongoDB 助手配置设置。 
- spec.shard.agent.startupOptions
- 类型:集合 - 您希望用来启动每个分片集群分片成员的 MongoDB 助手设置。 - 您必须以键值对形式提供 MongoDB 助手设置。这些值必须是字符串。 - 有关支持的 MongoDB 助手设置列表,请参阅: - 云管理器项目的 MongoDB 代理设置。 
- MongoDB Agent Operator 部署的MongoDB Ops Manager版本的 MongoDB Kubernetes 。 
 - 1 - 2 - apiVersion: mongodb.com/v1 - 3 - kind: MongoDB - 4 - metadata: - 5 - name: my-sharded-cluster-options - 6 - spec: - 7 - version: "6.0.0-ent" - 8 - type: ShardedCluster - 9 - opsManager: - 10 - configMapRef: - 11 - name: my-project - 12 - credentials: my-credentials - 13 - persistent: true - 14 - shardCount: 2 - 15 - mongodsPerShardCount: 3 - 16 - mongosCount: 2 - 17 - configServerCount: 1 - 18 - 19 - mongos: - 20 - agent: - 21 - startupOptions: - 22 - maxLogFiles: "30" - 23 - 24 - configSrv: - 25 - agent: - 26 - startupOptions: - 27 - dialTimeoutSeconds: "40" - 28 - shard: - 29 - agent: - 30 - startupOptions: - 31 - serverSelectionTimeoutSeconds: "20" - 32 - ... 
- spec.shardPodSpec
- 类型:对象 - MongoDB CustomResourceDefinition 分片Pod规范的对象。 
- spec.shardPodSpec.persistence.multiple.data
- 类型:集合 - 让 Kubernetes Operator 创建持久卷声明,并将数据目录挂载到自己的持久卷上。 - 注意- 如果 - spec.persistent- : true,则必须设置此集合中的值。
- 您可以设置此集合或 - persistence.single集合,但不能同时设置这两个集合。
 标量数据类型说明- labelSelector- 字符串 - storage- 字符串 - storageClass- 字符串 - 每个分片集群分片成员所需的存储类型。 您可以将此存储类型创建为 StorageClass 对象,然后再在此对象规范中使用。 - 确保将StorageClass - reclaimPolicy设立为Retain。这可确保在删除持久卷声明时保留数据。
- spec.shardPodSpec.persistence.multiple.journal
- 类型:集合 - 让 Kubernetes Operator 创建持久卷声明,并将日志目录挂载到自己的持久卷上。 - 注意- 如果 - spec.persistent- : true,则必须设置此集合中的值。
- 您可以设置此集合或 - persistence.single集合,但不能同时设置这两个集合。
 标量数据类型说明- labelSelector- 字符串 - storage- 字符串 - storageClass- 字符串 - 每个分片集群分片成员所需的存储类型。 您可以将此存储类型创建为 StorageClass 对象,然后再在此对象规范中使用。 - 确保将StorageClass - reclaimPolicy设立为Retain。这可确保在删除持久卷声明时保留数据。
- spec.shardPodSpec.persistence.multiple.logs
- 类型:集合 - 让 Kubernetes Operator 创建持久卷声明,并将日志目录挂载到自己的持久卷上。 - 注意- 如果 - spec.persistent- : true,则必须设置此集合中的值。
- 您可以设置此集合或 - persistence.single集合,但不能同时设置这两个集合。
 标量数据类型说明- labelSelector- 字符串 - storage- 字符串 - storageClass- 字符串 - 每个分片集群分片成员所需的存储类型。 您可以将此存储类型创建为 StorageClass 对象,然后再在此对象规范中使用。 - 确保将StorageClass - reclaimPolicy设立为Retain。这可确保在删除持久卷声明时保留数据。
- spec.shardPodSpec.podTemplate
- 类型:集合 - MongoDB Enterprise Kubernetes Operator 为每个分片集群分片成员创建的Kubernetes Pod 的模板。 - 模板值优先于 - spec.shardPodSpec中指定的值。- 注意- Kubernetes Operator 不会验证您在 - spec.shardPodSpec.podTemplate中提供的字段。
- spec.shardPodSpec.podTemplate.affinity.podAffinity
- 类型:字符串 - Kubernetes 规则 来确定多个 - MongoDB资源 Pod 是否必须与其他 Pod 共处一地。要学习;了解有关使用案例的更多信息,请参阅Kubernetes文档中的关联和反关联。
- spec.shardPodSpec.podTemplate.affinity.nodeAffinity
- 类型:字符串 - Kubernetes规则将副本集的 Pod 放置在特定范围的节点上。 
- spec.shardPodSpec.podTemplate.affinity.podAntiAffinity
- 类型:字符串 - Default: kubernetes.io/hostname - 设置规则以将托管 - MongoDB资源的Pod分布到不同位置。位置可以是单个节点、机架或地区。默认下, Kubernetes Operator 会尝试将 Pod 分布到不同的节点。
- spec.shardPodSpec.podTemplate.affinity.podAntiAffinity.requiredDuringSchedulingIgnoredDuringExecution.topologyKey
- 类型:字符串 - Default: kubernetes.io/hostname 
- spec.shardPodSpec.podTemplate.metadata
- 类型:集合 - MongoDB Enterprise Kubernetes Operator 为每个分片集群分片成员创建的 Kubernetes Pod 的元数据。 - 要查看哪些字段可以添加到 - spec.shardPodSpec.podTemplate.metadata,请参阅Kubernetes文档。
- spec.shardPodSpec.podTemplate.spec
- 类型:集合 - MongoDB Enterprise Kubernetes Operator 为每个分片集群分片成员创建的 Kubernetes Pod 的规范。 - 要查看哪些字段可以添加到 - spec.shardPodSpec.podTemplate.spec,请参阅Kubernetes PodSpec v1 Core API。- 注意- 当您将容器添加到 - spec.shardPodSpec.podTemplate.spec.containers时,Kubernetes Operator 会将它们添加到 Kubernetes Pod 中。 这些容器会附加到 Pod 中的每个分片集群的分片成员容器。- 使用此设置为每个 Pod 指定 CPU 和 RAM 分配。 相关示例请参阅 GitHub 上的示例。 
- spec.shardSpecificPodSpec
- 类型:数组 - 包含每个分片 StatefulSet 覆盖配置的列表。 
- spec.shardSpecificPodSpec.podTemplate
- 类型:集合 - MongoDB Enterprise Kubernetes Operator 为特定分片创建的Kubernetes Pod 的模板。 - 模板值优先于 - spec.shardSpecificPodSpec中指定的值。- 注意- Kubernetes Operator 不会验证您在 - spec.shardSpecificPodSpec.podTemplate中提供的字段。
- spec.shardSpecificPodSpec.podTemplate.affinity.podAffinity
- 类型:字符串 - Kubernetes 规则 来确定多个 - MongoDB资源 Pod 是否必须与其他 Pod 共处一地。要学习;了解有关使用案例的更多信息,请参阅Kubernetes文档中的关联和反关联。
- spec.shardSpecificPodSpec.podTemplate.affinity.podAntiAffinity
- 类型:字符串 - Default: kubernetes.io/hostname - 设置规则以将托管 - MongoDB资源的Pod分布到不同位置。位置可以是单个节点、机架或地区。默认下, Kubernetes Operator 会尝试将 Pod 分布到不同的节点。
- spec.shardSpecificPodSpec.podTemplate.affinity.podAntiAffinity.requiredDuringSchedulingIgnoredDuringExecution.topologyKey
- 类型:字符串 - Default: kubernetes.io/hostname 
- spec.shardSpecificPodSpec.podTemplate.metadata
- 类型:集合 - MongoDB Enterprise Kubernetes Operator 为特定分片创建的 Kubernetes Pod 的元数据。 - 要查看哪些字段可以添加到 - spec.shardSpecificPodSpec.podTemplate.metadata,请参阅Kubernetes文档。
- spec.shardSpecificPodSpec.podTemplate.spec
- 类型:集合 - MongoDB Enterprise Kubernetes Operator 为特定分片创建的 Kubernetes Pod 的规范。 - 要查看哪些字段可以添加到 - spec.shardSpecificPodSpec.podTemplate.spec,请参阅Kubernetes PodSpec v1 Core API。- 注意- 在将容器添加到 - spec.shardSpecificPodSpec.podTemplate.spec.containers时,Kubernetes Operator 将它们添加到 Kubernetes Pod 中。这些容器附加到 Pod 中的特定分片容器。- 使用此设置为每个 Pod 指定 CPU 和 RAM 分配。 相关示例请参阅 GitHub 上的示例。 
- spec.topology
- 类型:字符串 - Optional - 默认值: - SingleCluster- 定义分分片集群的拓扑结构。 无法对现有部署进行更改。 如果设立为 - MultiCluster:- 所有分片集群组件都必须定义 - clusterSpecList:- spec.mongos.clusterSpecList
- spec.configSrv.clusterSpecList
- spec.shard.clusterSpecList
 
- 以下字段将被忽略,因为它们的等效值会传递给 - spec.<section>.clusterSpecList对象中的每个集群:- spec.mongodsPerShardCount定义于- spec.shard.clusterSpecList.members
- spec.mongosCount定义于- spec.mongos.clusterSpecList.members
- spec.configServerCount定义于- spec.configSrv.clusterSpecList.members
- spec.shardOverrides.memberConfig定义于- spec.shardOverrides.clusterSpecList.memberConfig
- spec.shardOverrides.members定义于- spec.shardOverrides.clusterSpecList.members
- spec.shardOverrides.statefulSet定义于- spec.shardOverrides.clusterSpecList.statefulSet
 
 - 示例: - apiVersion: mongodb.com/v1 - kind: MongoDB - metadata: - name: sc - spec: - shardCount: 3 - # we don't specify mongodsPerShardCount, mongosCount and configServerCount as they don't make sense for multi-cluster - topology: MultiCluster - type: ShardedCluster - version: 7.0.12 - cloudManager: - configMapRef: - name: my-project - credentials: my-credentials - persistent: true - shard: - clusterSpecList: - - clusterName: member-cluster-0 - members: 2 # each shard will have 2 members in cluster 0, unless overriden - - clusterName: member-cluster-1 - members: 2 - - clusterName: member-cluster-2 - members: 1 - shardOverrides: - - shardNames: [sc-2] # this override will apply to the third shard (here, shards are indexed from 0 to 2 as we have 3 shards) - clusterSpecList: - - clusterName: member-cluster-0 # all other fields are optional, if not provided the fields from matching member cluster from shard.clusterSpecList will be taken by default - members: 3 - - clusterName: member-cluster-1 # we don't deploy this shard to member-cluster-1 - # Note that it is also possible to make it explicit with members: 0 - # we don't provide entry for clusterName: member-cluster-1, so it won't be deployed there - - clusterName: member-cluster-2 - members: 2 - configSrv: - clusterSpecList: - - clusterName: member-cluster-0 - members: 2 # config server will have 2 members in this cluster - - clusterName: member-cluster-1 - members: 1 - - clusterName: member-cluster-2 - members: 2 - mongos: - clusterSpecList: - - clusterName: member-cluster-0 - members: 2 # router will have 2 members in this cluster - - clusterName: member-cluster-1 - members: 1 - 以下字段仅与包含 - topology=MultiCluster的部署相关:- spec.configSrv.clusterSpecList
- 类型:对象数组 - 如果 - topology=MultiCluster,则为必填项- 用于多集群分片分片集群部署的对象大量,具有以下顶级字段: - clusterName
- 类型:字符串 - MongoDB Enterprise Kubernetes Operator 调度StatefulSet的集群的名称。 
 - externalAccess
- 类型:集合 - 用于向外部连接公开多 Kubernetes集群MongoDB 部署的规范。 要学习;了解如何从 Kubernetes集群外部连接到多 Kubernetes集群MongoDB 部署,请参阅从外部KubernetesKubernetes到多集群资源。 - 这些设置应用于所有集群中的服务。 要在特定集群中覆盖这些全局设置,请使用spec.clusterSpecList.externalAccess.externalService。 - 如果您添加 - spec.externalAccess,则 Kubernetes Operator 为副本集中的每个 Pod 创建一个外部服务。外部服务为集群中的每个 MongoDB 数据库 Pod 提供外部入口点。每个外部服务具有选择器,它将外部服务与特定 Pod 相匹配。- 如果添加此设置时不带任何值,Kubernetes Operator 会创建具有以下默认值的外部服务: 字段值说明- Name- <pod-name>-svc-external- 外部服务的名称。您无法更改此值。 - Type- LoadBalancer- 创建外部 LoadBalancer 服务。 - Port- <Port Number>- mongod的端口。- publishNotReadyAddress- true- 指定即使 Pod 尚未准备就绪,也会创建 DNS 记录。对于任何数据库Pod,请勿设立为 - false。- 注意- 如果设立spec.clusterSpecList.externalAccess.externalDomain ,则外部服务会添加另一个端口 ( - Port Number + 1) 用于备份。
 - members
- 类型:数字 - MongoDB 副本集中的节点数。 
 - memberConfig
- 类型:集合 - 多分片集群MongoDB 部署中每个MongoDB分片及其成员的规范。 - 分片对象中元素的分片必须反映副本集成员的顺序。 示例,第一个元素会影响索引 - 0的 Pod,第二个元素会影响索引- 1的 Pod,依此类推。- 例子- 请考虑以下具有三个副本集的多 Kubernetes 集群 MongoDB 部署的示例规范: - apiVersion: mongodb.com/v1 - kind: MongoDBMultiCluster - metadata: - name: multi-replica-set - spec: - version: 6.0.0-ent - type: ReplicaSet - duplicateServiceObjects: false - credentials: my-credentials - opsManager: - configMapRef: - name: my-project - clusterSpecList: - - clusterName: cluster1.example.com - members: 2 - memberConfig: - - votes: 1 - priority: "0.5" - tags: - tag1: "value1" - environment: "prod" - - votes: 1 - priority: "1.5" - tags: - tag2: "value2" - environment: "prod" - - clusterName: cluster2.example.com - members: 1 - memberConfig: - - votes: 1 - priority: "0.5" - tags: - tag1: "value1" - environment: "prod" - - clusterName: cluster3.example.com - members: 1 - memberConfig: - - votes: 1 - priority: "0.5" - tags: - tag1: "value1" - environment: "prod" 
 - podSpec.persistence
- 类型:集合 - 仅在传递给 - spec.configSrv.clusterSpecList和- spec.shard.clusterSpecList的- clusterSpecItem对象中可用。 覆盖给定集群的现有持久性配置。
 - statefulSet
- 类型:集合 - 为多 Kubernetes集群MongoDB 部署中集群的每个 StatefulSet 提供 StatefulSet 覆盖的配置。要设立适用于多 Kubernetes集群MongoDB 部署中所有集群的全局配置,请参阅 spec.statefulSet.spec. - 此设置仅适用于多 Kubernetes 集群 MongoDB 部署中的副本集资源类型。 
 
 - spec.duplicateServiceObjects
- 类型:布尔值 - Optional - 默认值: - true- 如果拓扑结构不是 - MultiCluster,则忽略。 适用于所有分片集群组件的服务:- mongos、- configSrv和- shards。- 如果设立为true:
- Kubernetes Operator 从每个成员集群的所有成员集群中创建所有Pod Services。
- 如果设立为false:
- Kubernetes Operator 仅创建
 
- 如果设立为
 - spec.mongos.clusterSpecList
- 类型:对象数组 - 如果 - topology=MultiCluster,则为必填项- 用于多集群分片分片集群部署的对象大量,具有以下顶级字段: - clusterName
- 类型:字符串 - MongoDB Enterprise Kubernetes Operator 调度StatefulSet的集群的名称。 
 - externalAccess
- 类型:集合 - 用于向外部连接公开多 Kubernetes集群MongoDB 部署的规范。 要学习;了解如何从 Kubernetes集群外部连接到多 Kubernetes集群MongoDB 部署,请参阅从外部KubernetesKubernetes到多集群资源。 - 这些设置应用于所有集群中的服务。 要在特定集群中覆盖这些全局设置,请使用spec.clusterSpecList.externalAccess.externalService。 - 如果您添加 - spec.externalAccess,则 Kubernetes Operator 为副本集中的每个 Pod 创建一个外部服务。外部服务为集群中的每个 MongoDB 数据库 Pod 提供外部入口点。每个外部服务具有选择器,它将外部服务与特定 Pod 相匹配。- 如果添加此设置时不带任何值,Kubernetes Operator 会创建具有以下默认值的外部服务: 字段值说明- Name- <pod-name>-svc-external- 外部服务的名称。您无法更改此值。 - Type- LoadBalancer- 创建外部 LoadBalancer 服务。 - Port- <Port Number>- mongod的端口。- publishNotReadyAddress- true- 指定即使 Pod 尚未准备就绪,也会创建 DNS 记录。对于任何数据库Pod,请勿设立为 - false。- 注意- 如果设立spec.clusterSpecList.externalAccess.externalDomain ,则外部服务会添加另一个端口 ( - Port Number + 1) 用于备份。
 - members
- 类型:数字 - MongoDB 副本集中的节点数。 
 - memberConfig
- 类型:集合 - 多分片集群MongoDB 部署中每个MongoDB分片及其成员的规范。 - 分片对象中元素的分片必须反映副本集成员的顺序。 示例,第一个元素会影响索引 - 0的 Pod,第二个元素会影响索引- 1的 Pod,依此类推。- 例子- 请考虑以下具有三个副本集的多 Kubernetes 集群 MongoDB 部署的示例规范: - apiVersion: mongodb.com/v1 - kind: MongoDBMultiCluster - metadata: - name: multi-replica-set - spec: - version: 6.0.0-ent - type: ReplicaSet - duplicateServiceObjects: false - credentials: my-credentials - opsManager: - configMapRef: - name: my-project - clusterSpecList: - - clusterName: cluster1.example.com - members: 2 - memberConfig: - - votes: 1 - priority: "0.5" - tags: - tag1: "value1" - environment: "prod" - - votes: 1 - priority: "1.5" - tags: - tag2: "value2" - environment: "prod" - - clusterName: cluster2.example.com - members: 1 - memberConfig: - - votes: 1 - priority: "0.5" - tags: - tag1: "value1" - environment: "prod" - - clusterName: cluster3.example.com - members: 1 - memberConfig: - - votes: 1 - priority: "0.5" - tags: - tag1: "value1" - environment: "prod" 
 - statefulSet
- 类型:集合 - 为多 Kubernetes集群MongoDB 部署中集群的每个 StatefulSet 提供 StatefulSet 覆盖的配置。要设立适用于多 Kubernetes集群MongoDB 部署中所有集群的全局配置,请参阅 spec.statefulSet.spec. - 此设置仅适用于多 Kubernetes 集群 MongoDB 部署中的副本集资源类型。 
 
 - spec.shard.clusterSpecList
- 类型:对象数组 - 如果 - topology=MultiCluster,则为必填项- 用于多集群分片分片集群部署的对象大量,具有以下顶级字段: - clusterName
- 类型:字符串 - MongoDB Enterprise Kubernetes Operator 调度StatefulSet的集群的名称。 
 - externalAccess
- 类型:集合 - 用于向外部连接公开多 Kubernetes集群MongoDB 部署的规范。 要学习;了解如何从 Kubernetes集群外部连接到多 Kubernetes集群MongoDB 部署,请参阅从外部KubernetesKubernetes到多集群资源。 - 这些设置应用于所有集群中的服务。 要在特定集群中覆盖这些全局设置,请使用spec.clusterSpecList.externalAccess.externalService。 - 如果您添加 - spec.externalAccess,则 Kubernetes Operator 为副本集中的每个 Pod 创建一个外部服务。外部服务为集群中的每个 MongoDB 数据库 Pod 提供外部入口点。每个外部服务具有选择器,它将外部服务与特定 Pod 相匹配。- 如果添加此设置时不带任何值,Kubernetes Operator 会创建具有以下默认值的外部服务: 字段值说明- Name- <pod-name>-svc-external- 外部服务的名称。您无法更改此值。 - Type- LoadBalancer- 创建外部 LoadBalancer 服务。 - Port- <Port Number>- mongod的端口。- publishNotReadyAddress- true- 指定即使 Pod 尚未准备就绪,也会创建 DNS 记录。对于任何数据库Pod,请勿设立为 - false。- 注意- 如果设立spec.clusterSpecList.externalAccess.externalDomain ,则外部服务会添加另一个端口 ( - Port Number + 1) 用于备份。
 - members
- 类型:数字 - MongoDB 副本集中的节点数。 
 - memberConfig
- 类型:集合 - 多分片集群MongoDB 部署中每个MongoDB分片及其成员的规范。 - 分片对象中元素的分片必须反映副本集成员的顺序。 示例,第一个元素会影响索引 - 0的 Pod,第二个元素会影响索引- 1的 Pod,依此类推。- 例子- 请考虑以下具有三个副本集的多 Kubernetes 集群 MongoDB 部署的示例规范: - apiVersion: mongodb.com/v1 - kind: MongoDBMultiCluster - metadata: - name: multi-replica-set - spec: - version: 6.0.0-ent - type: ReplicaSet - duplicateServiceObjects: false - credentials: my-credentials - opsManager: - configMapRef: - name: my-project - clusterSpecList: - - clusterName: cluster1.example.com - members: 2 - memberConfig: - - votes: 1 - priority: "0.5" - tags: - tag1: "value1" - environment: "prod" - - votes: 1 - priority: "1.5" - tags: - tag2: "value2" - environment: "prod" - - clusterName: cluster2.example.com - members: 1 - memberConfig: - - votes: 1 - priority: "0.5" - tags: - tag1: "value1" - environment: "prod" - - clusterName: cluster3.example.com - members: 1 - memberConfig: - - votes: 1 - priority: "0.5" - tags: - tag1: "value1" - environment: "prod" 
 - podSpec.persistence
- 类型:集合 - 仅在传递给 - spec.configSrv.clusterSpecList和- spec.shard.clusterSpecList的- clusterSpecItem对象中可用。 覆盖给定集群的现有持久性配置。
 - statefulSet
- 类型:集合 - 为多 Kubernetes集群MongoDB 部署中集群的每个 StatefulSet 提供 StatefulSet 覆盖的配置。要设立适用于多 Kubernetes集群MongoDB 部署中所有集群的全局配置,请参阅 spec.statefulSet.spec. - 此设置仅适用于多 Kubernetes 集群 MongoDB 部署中的副本集资源类型。 
 
 - spec.shardOverrides
- 类型:对象数组 - Optional - 包含每个分片覆盖项的分片。 每个对象包含以下字段: - shardNames- 必需 - 此覆盖适用的分片的名称。 
- podSpec.Persistence- Optional - 定义Kubernetes Operator 如何创建持久卷并将其绑定到分片。 对于 - topology=MultiCluster,它为所有成员集群设置持久性设置。 您可以在- spec.shardOverrides.clusterSpecList.persistence中为特定成员集群定义持久性设置。
- additionalMongodConfig- Optional - spec.shard.additionalMongodConfig的特定于分片的覆盖。
- agent- Optional - spec.shard.agent的特定于分片的覆盖。
- statefulSet- Optional - spec.shardPodSpec.podTemplate和- spec.shard.clusterSpecList.statefulSet的特定于分片的覆盖。
- members- Optional - 仅在 - topology=SingleCluster时可用。用于覆盖- spec.mongodsPerShardCount的特定于分片的覆盖。
- memberConfig- Optional - 仅在 - topology=SingleCluster时可用。- spec.shard.memberConfig的特定于分片的覆盖。
 
 - spec.shardPodSpec.persistence.single
- 类型:集合 - 让 Kubernetes Operator 创建持久化卷声明,并将数据、事务日志与运行日志的所有三个目录挂载到同一个持久卷。 - 注意- 如果 - spec.persistent- : true,则必须设置此集合中的值。
- 您可以设置此集合或 - persistence.multiple集合,但不能同时设置两者。
 标量数据类型说明- labelSelector- 字符串 - storage- 字符串 - storageClass- 字符串 - 持久卷声明中指定的存储类型。您可以先将此存储类型创建为StorageClass对象,然后再用于此对象规范。 - 确保将StorageClass - reclaimPolicy设立为Retain。这可确保在删除持久卷声明时保留数据。
 
Prometheus 设置
您可以将 Prometheus 与独立资源、副本集或分片集群结合使用。要了解更多信息,请参阅部署资源以用于 Prometheus。要查看示例,请参阅用于 Prometheus 的 MongoDB 资源。
当您将 Prometheus 与 MongoDB 资源结合使用时,适用以下设置:
- spec.prometheus.passwordSecretRef
- 类型:对象 - 可选的 - 包含用于基本 HTTP 身份验证密钥详细信息的对象。如要将 Prometheus 与 MongoDB 资源一起使用,就必须指定此设置。 
- spec.prometheus.passwordSecretRef.key
- 类型:字符串 - Optional - 默认值: - "password"- 人类可读字符串,用于标识存储基本 HTTP 身份验证密码的秘密中的密钥。如果不指定此设置,则使用默认设置。 
- spec.prometheus.passwordSecretRef.name
- 类型:字符串 - 可选的 - 人类可读标签,用于标识用户进行基本 HTTP 身份验证的 密钥。如要将 Prometheus 与 MongoDB 资源一起使用,就必须指定此设置。 
安全设置
以下安全设置仅适用于副本集和分片集群资源类型:
- spec.security.tls.enabled
- 类型:布尔值 - 默认值: - false- 重要- 从 Kubernetes Operator 版本1.19开始, - spec.security.tls.enabled已弃用。 要启用TLS ,请为- spec.security.certsSecretPrefix设置提供一个值。- 使用 TLS 证书对以下设备之间的通信进行加密: - 副本集或分片集群配置中的 MongoDB 主机 
- 客户端( - mongoshell 、驱动程序、 MongoDB Compass等)和MongoDB部署
 - 默认情况下, - net.ssl.mode设置为- requireSSL。 要更改用于客户端和数据库连接的TLS模式,请参阅- spec.additionalMongodConfig.net.ssl.mode。
- spec.security.tls.ca
- 类型:字符串 - 提供存储 - MongoDB资源的 CA 的 ConfigMap 的名称。- 重要- 如果您使用自定义 CA 签署 - MongoDB资源的 TLS 证书,则必须指定此参数。- Kubernetes Operator 要求您在 ConfigMap 中将 - MongoDB资源证书命名为- ca-pem。
- spec.security.certsSecretPrefix
- 类型:字符串 - 要作为前缀添加到您创建的 Kubernetes 密钥中的文本,这些密钥包含了副本集或分片集群的 TLS 密钥和证书。 - 您必须在密钥前面加上 - <prefix>-<metadata.name>作为前缀。- 示例,如果您将部署调用为 - my-deployment并将前缀设立为- mdb,则必须为客户端 TLS 通信 命名 TLS- mdb-my-deployment-cert密钥。此外,您必须将用于内部集群身份验证(如果已启用)的TLS密钥命名为- mdb-my-deployment-clusterfile。- 要了解有关命名包含 TLS 证书的密钥的更多信息,请参阅部署副本集中适用于您的部署的主题。 
- spec.security.tls.additionalCertificateDomains
- 类型:布尔值 - 应添加到该部署中的每个 Pod 的 TLS 证书的每个域的列表。在您设置该参数时,Kubernetes Operator 转换为 TLS 证书的每个 CSR 都包含一个 - <pod name>.<additional cert domain>格式的 SAN。- 副本集资源不需要此参数。 请改用 - spec.connectivity.replicaSetHorizons。- 注意- 如果您将此参数添加到启用 TLS 的资源中,则当该资源达到 - Pending状态时,Kubernetes 会显示错误。 此错误显示:- Please manually remove the |csr| in order to proceed.要解决此问题:- 删除任何现有的 CSR,以便 Kubernetes 可以生成新的 CSR。如需了解如何删除资源,请参阅 Kubernetes 文档中的删除资源。 
- 在 Kubernetes 生成 CSR 后批准它们。 
 
- spec.additionalMongodConfig.net.ssl.mode
- 类型:字符串 - 默认值: - requireSSL- 指定用于网络连接的 - sslMode。以下是有效选项:值说明- allowSSL- 服务器之间的连接不使用 TLS。对于传入连接,服务器既接受 TLS,也接受非 TLS。 - preferSSL- 服务器之间的连接使用 TLS。对于传入连接,服务器既接受 TLS,也接受非 TLS。 - requireSSL- 服务器仅使用和接受 TLS 加密连接。 
- spec.additionalMongodConfig.net.tls.disabledProtocols
- 类型:字符串 - MongoDB 版本 4.2 新增内容。 - 禁止使用 TLS 运行的 MongoDB 服务器接受使用一个或多个特定协议的传入连接。要指定多个协议,请输入以逗号分隔的协议列表。例如, - TLS1_0,TLS1_1。- 此设置可识别以下协议: - TLS1_0、- TLS1_1、- TLS1_2,以及从 MongoDB 4.0.4(和 3.6.9)开始,还可识别- TLS1_3。如果指定了未识别的协议,服务器将无法启动。- 在 macOS 上,您无法禁用 - TLS1_1并同时启用- TLS1_0和- TLS1_2。您还必须至少禁用- TLS1_0或- TLS1_2。例如,- TLS1_0,TLS1_1在 macOS 上禁用- TLS1_2。- 禁用的协议列表将替换默认的禁用协议列表。 - 从 MongoDB 版本4.0开始, 如果系统上支持 TLS1.0 1.1+,则 MongoDB 将禁用 TLS 。启用已禁用的TLS 1 。 0 、 将 - none指定为- spec.additionalMongodConfig.net.tls.disabledProtocols的值。 要了解有关此设置的更多信息,请参阅禁用 TLS 1 。 0 。- 副本集和分片集群的成员必须至少使用一个共同协议。 
- spec.security.authentication.enabled
- 类型:布尔值 - 默认值: - false- 指定是否在Cloud Manager或MongoDB Ops Manager项目上启用身份验证。 如果设置为 - true,则必须在- spec.security.authentication.modes中设置身份验证机制。- 重要- 如果您包含此设置,即使将其设置为 - false,Kubernetes Operator 也会管理此 MongoDB 资源的身份验证。当资源规范中存在此设置时,您无法使用 Cloud Manager 或 Ops Manager UI 或 API 配置此资源的身份验证。- 如果您想使用 Cloud Manager 或 Ops Manager 用户界面或 API 管理身份验证,请忽略此设置。 
- spec.security.authentication.modes
- 类型:数组 - 指定 MongoDB 部署使用的身份验证机制。有效值为 - SCRAM、- SCRAM-SHA-1、- MONGODB-CR、- X509和- LDAP。我们建议使用- SCRAM-SHA-256(- SCRAM),而不建议使用- SCRAM-SHA-1。如果指定- SCRAM-SHA-1,则还必须指定- MONGODB-CR。- 如果您为 - spec.security.authentication.modes提供多个值,则还必须为- spec.security.authentication.agents.mode指定一个值。
- spec.security.authentication.internalCluster
- 类型:字符串 - 指定是否启用X. 509内部集群身份验证。 - 要启用 X.509 内部集群身份验证,请设置为 - "X509"。要求指定以下设置:- Kubernetes Operator 接受以下值: - ["X509"]:启用 X.509 内部集群身份验证。
- ""或省略:未启用内部集群身份验证。
 - 重要- 启用内部集群身份验证后,就无法再将其禁用。 
- spec.security.authentication.requireClientTLSAuthentication
- 类型:布尔值 - 默认值: - false- 指定 MongoDB 主机是否要求客户端使用 TLS 证书进行连接。如果启用 TLS 身份验证,默认为 - true。- 要启用 TLS 身份验证,请为 - spec.security.certsSecretPrefix设置提供一个值。
- spec.security.authentication.ldap
- 类型:集合 - LDAP 身份验证所需。 - 为 或 LDAP项目配置 身份验证。Cloud ManagerMongoDB Ops Manager要启用LDAP身份验证,请将 - spec.security.authentication.modes设置为- ["LDAP"]。
- spec.security.authentication.ldap.servers
- 类型:字符串数组 - LDAP 身份验证所需。 - LDAP 服务器的主机名和端口列表。按以下格式指定主机名及其相应的端口: - spec: - security: - authentication: - ldap: - servers: - - "<hostname1>:<port1>" - - "<hostname2>:<port2>" 
- spec.security.authentication.ldap.transportSecurity
- 类型:字符串 - LDAP 身份验证所需。 - 指定 LDAP 服务器是否接受 TLS。 - 如果 LDAP 服务器接受 TLS,则将值设置为 - tls。 如果 LDAP 服务器不接受 TLS,请将此值留空或设置为- none。- 注意- 如果指定 - none或- tls以外的字符串,则 Kubernetes Operator 仍会将该项设置设为- tls。
- spec.security.authentication.ldap.caConfigMapRef
- 类型:集合 - 是使用 TLS 进行 LDAP 身份验证所必需的。 - ConfigMap,其中包含用于验证LDAP服务器的 TLS 证书的 CA。 
- spec.security.authentication.ldap.caConfigMapRef.name
- 类型:字符串 - 是使用 TLS 进行 LDAP 身份验证所必需的。 - 包含验证LDAP服务器 TLS 证书的 CA 的 ConfigMap 的名称。 
- spec.security.authentication.ldap.caConfigMapRef.key
- 类型:字符串 - 是使用 TLS 进行 LDAP 身份验证所必需的。 - 存储验证 LDAP 服务器 TLS 证书的 CA 的字段名称。 
- spec.security.authentication.ldap.bindQueryUser
- 类型:字符串 - LDAP 身份验证所需。 - 连接到 LDAP 服务器时 MongoDB 绑定到的 LDAP 可分辨名称。 
- spec.security.authentication.ldap.bindQueryPasswordSecretRef
- 类型:集合 - LDAP 身份验证所需。 - 指定密钥,其中包含 MongoDB 在连接到LDAP 服务器时绑定的密码。 
- spec.security.authentication.ldap.bindQueryPasswordSecretRef.name
- 类型:字符串 - LDAP 身份验证所需。 - 包含MongoDB在连接到LDAP服务器时绑定的密码的密钥名称。 - 密钥 必须仅包含一个用于存储密码的 - password字段。
- spec.security.authentication.ldap.authzQueryTemplate
- 类型:字符串 - 是 LDAP 授权所必需的。 - 由MongoDB执行的 RFC4515 和 RFC4516 LDAP格式查询URL模板,用于获取用户所属的LDAP群组。查询相对于 - spec.security.authentication.ldap.servers中指定的托管或多个主机。您可以在模板中使用以下词元:- {USER}
- 将经过身份验证的用户名或transformed用户名替换到 LDAP 查询中。
 
- {PROVIDED_USER}
- 在 LDAP 查询中替换所提供的用户名(在身份验证或 LDAP 转换之前)。(从 MongoDB 版本 4.2 开始提供)
 
 - 提示- MongoDB 手册中的LDAP 查询模板 
- spec.security.authentication.agents.automationLdapGroupDN
- 类型:字符串 - MongoDB 助手用户所属的 LDAP 组的可分辨名称 (DN)。 - 在以下情况下需要使用此设置: 
- spec.security.authentication.ldap.userToDNMapping
- 类型:字符串 - 将提供给 - mongod或- mongos进行身份验证的用户名映射到 LDAP 标识名 (DN)。- 提示- MongoDB 手册中的security.ldap.userToDNMapping 
- spec.security.authentication.ldap.userCacheInvalidationInterval
- 类型:整型 - 指定 MongoDB 等待刷新 LDAP 用户缓存的秒数。默认为 30 秒。 
- spec.security.authentication.agents.mode
- 类型:字符串 - MongoDB 部署的 MongoDB 助手使用的身份验证机制。 有效值为 - SCRAM、- SCARM-SHA-1、- MONGODB-CR、- X509和- LDAP。 您指定的值也必须存在于- spec.security.authentication.modes中。 我们建议使用- SCRAM-SHA-256(- SCRAM) 而不是- SCRAM-SHA-1。 如果指定- SCRAM-SHA-1,则还必须指定- MONGODB-CR。
- spec.security.authentication.agents.automationUserName
- 类型:字符串 - MongoDB 助手与 MongoDB 部署交互时使用的用户名。 用户名根据 - spec.security.authentication.ldap.userToDNMapping映射到 LDAP 标识名 (DN)。 生成的 DN 必须已存在于 LDAP 部署中。- 如果 - spec.security.authentication.agents.mode为- LDAP,则需要此设置。
- spec.security.authentication.agents.automationPasswordSecretRef
- 类型:集合 - 包含 - spec.security.authentication.agents.automationUserName用户密码的密钥的详细信息。- 如果 - spec.security.authentication.agents.mode为- LDAP,则需要此设置。
- spec.security.authentication.agents.automationPasswordSecretRef.name
- 类型:字符串 - 包含 - spec.security.authentication.agents.automationUserName用户密码的密钥名称。您必须在部署Kubernetes Operator 的同一命名空间中创建此密钥:- kubectl create secret generic ldap-agent-user \ - --from-literal="password=<password>" -n <metadata.namespace> - 此密钥必须包含一个密钥,其值与 LDAP 部署中的 - spec.security.authentication.agents.automationUserName用户的密码匹配。- 如果 - spec.security.authentication.agents.mode为- LDAP,则需要此设置。
- spec.security.authentication.agents.automationPasswordSecretRef.key
- 类型:字符串 - 键入包含 - spec.security.authentication.agents.automationPasswordSecretRef.name中用户密码的- spec.security.authentication.agents.automationUserName密钥。- 如果 - spec.security.authentication.agents.mode为- LDAP,则需要此设置。
- spec.security.authentication.agents.clientCertificateSecretRef.name
- 类型:字符串 - 指定包含MongoDB助手的 TLS 证书的密钥。如果省略,则默认为 - agent-certs。- 此密钥必须包含 - mms-automation-agent-pem密钥。此密钥的值必须是可由服务器验证的 TLS 证书。- 必须在部署 Kubernetes Operator 的同一命名空间中创建此密钥: - kubectl create secret generic agent-certs \ - --from-file=mms-automation-agent-pem=<automation-cert.pem> \ - --namespace=<metadata.namespace> 
- spec.security.roles
- 类型:数组 - 定义用户定义的角色的数组,您可以通过这些角色对 MongoDB 部署进行精细的访问控制。 - 要启用用户定义的角色, - spec.security.authentication.enabled必须为- true。- 例子- 在此示例中,名为 - customRole的用户定义角色允许用户将此角色分配给:- 在 - pets数据库的- cats集合中插入文档,以及
- 查找文档并将其插入到 - pets数据库的- dogs集合中。
 - 1 - 2 - apiVersion: mongodb.com/v1 - 3 - kind: MongoDB - 4 - metadata: - 5 - name: <my-replica-set> - 6 - spec: - 7 - members: 3 - 8 - version: "4.2.2-ent" - 9 - type: ReplicaSet - 10 - opsManager: - 11 - configMapRef: - 12 - name: <configMap.metadata.name> - 13 - credentials: <mycredentials> - 14 - persistent: true - 15 - security: - 16 - authentication: - 17 - enabled: true - 18 - modes: - 19 - - "SCRAM" - 20 - roles: - 21 - - role: "customRole" - 22 - db: admin - 23 - privileges: - 24 - - actions: - 25 - - insert - 26 - resource: - 27 - collection: cats - 28 - db: pets - 29 - - actions: - 30 - - insert - 31 - - find - 32 - resource: - 33 - collection: dogs - 34 - db: pets - 35 - ... 
- spec.security.roles.authenticationRestrictions
- 类型:数组 - 定义分配此 - spec.security.roles.role的用户可以连接的 IP 地址的数组。
- spec.security.roles.authenticationRestrictions.clientSource
- 类型:数组 - 分配此 - spec.security.roles.role的用户可以从中进行连接的 IP 地址或 CIDR 块的数组。- 如果请求来自此数组中不存在的客户端,则 MongoDB Server 会拒绝具有此角色的用户的连接请求。 
- spec.security.roles.authenticationRestrictions.serverAddress
- 类型:数组 - 分配此 - spec.security.roles.role的用户可以连接的 IP 地址或 CIDR 块的数组。- 如果客户端请求连接到该数组中不存在的服务器,则 MongoDB 服务器拒绝具有该角色的用户的连接请求。 
- spec.security.roles.privileges.actions
- 类型:数组 - 授予此角色的用户可以执行的操作列表。 有关接受值的列表,请参阅使用 Kubernetes Operator 部署的 MongoDB 版本的 MongoDB 手册中的特权操作。 
- spec.security.roles.privileges.resource
- 类型:集合 - 特权 - actions适用的资源。- 此集合必须包含以下任一项: 
- spec.security.roles.privileges.resource.database
- 类型:字符串 - 应用权限 - actions的数据库。- 如果您为此设置提供了值,则还必须为 - spec.security.roles.privileges.resource.collection提供一个值。
- spec.security.roles.privileges.resource.collection
- 类型:字符串 - 如果您为此设置提供了值,则还必须为 - spec.security.roles.privileges.resource.database提供一个值。
- spec.security.roles.privileges.resource.cluster
- 类型:布尔值 - 默认值:False - 指示特权 - actions适用于 MongoDB 部署中的所有数据库和集合的标志。 如果省略,则默认为- false。- 如果设置为 true,则不要为 - spec.security.roles.privileges.resource.database和- spec.security.roles.privileges.resource.collection提供值。
示例
以下示例显示了提供所有设置的独立部署的资源规范:
apiVersion: mongodb.com/v1 kind: MongoDB metadata:   name: my-standalone spec:   version: "4.2.2-ent"   service: my-service   opsManager: # Alias of cloudManager     configMapRef:       name: my-project   credentials: my-credentials   persistent: true   type: Standalone   additionalMongodConfig:     systemLog:       logAppend: true       verbosity: 4     operationProfiling:       mode: slowOp   podSpec:     persistence:       single:         storage: "12Gi"         storageClass: standard         labelSelector:           matchExpressions:           - {key: environment, operator: In, values: [dev]}     podTemplate:       metadata:         labels:           label1: mycustomlabel       affinity:         podAffinity:           requiredDuringSchedulingIgnoredDuringExecution:           - labelSelector:               matchExpressions:               - key: security                 operator: In                 values:                 - S1             topologyKey: failure-domain.beta.kubernetes.io/zone         nodeAffinity:           requiredDuringSchedulingIgnoredDuringExecution:             nodeSelectorTerms:             - matchExpressions:               - key: kubernetes.io/e2e-az-name                 operator: In                 values:                 - e2e-az1                 - e2e-az2         podAntiAffinity:           preferredDuringSchedulingIgnoredDuringExecution:             - podAffinityTerm:                 topologyKey: "mykey"               weight: 50 ... 
以下示例显示了提供每个设置的副本集的资源规范:
apiVersion: mongodb.com/v1 kind: MongoDB metadata:   name: my-replica-set spec:   members: 3   version: "6.0.0-ent"   service: my-service   opsManager: # Alias of cloudManager     configMapRef:       name: my-project   credentials: my-credentials   persistent: true   type: ReplicaSet   podSpec:     persistence:       multiple:         data:           storage: "10Gi"         journal:           storage: "1Gi"           labelSelector:             matchLabels:               app: "my-app"         logs:           storage: "500M"           storageClass: standard     podTemplate:       metadata:         labels:           label1: mycustomlabel       affinity:         podAffinity:           requiredDuringSchedulingIgnoredDuringExecution:           - labelSelector:               matchExpressions:               - key: security                 operator: In                 values:                 - S1             topologyKey: failure-domain.beta.kubernetes.io/zone         nodeAffinity:           requiredDuringSchedulingIgnoredDuringExecution:             nodeSelectorTerms:             - matchExpressions:               - key: kubernetes.io/e2e-az-name                 operator: In                 values:                 - e2e-az1                 - e2e-az2         podAntiAffinity:           preferredDuringSchedulingIgnoredDuringExecution:             - podAffinityTerm:                 topologyKey: "mykey"               weight: 50       spec:         affinity:           podAntiAffinity:             preferredDuringSchedulingIgnoredDuringExecution:               - podAffinityTerm:                   topologyKey: "mykey"                 weight: 50   security:     certsSecretPrefix: "prefix"     tls:       ca: custom-ca     authentication:       enabled: true       modes: ["X509"]       internalCluster: "X509"   statefulSet:     spec:       serviceName: my-service   additionalMongodConfig:     net:       ssl:         mode: preferSSL ... 
以下示例显示了提供每个设置的分片集群的资源规范:
apiVersion: mongodb.com/v1 kind: MongoDB metadata:   name: my-sharded-cluster spec:   shardCount: 2   mongodsPerShardCount: 3   mongosCount: 2   configServerCount: 3   version: "6.0.0-ent"   service: my-service   type: ShardedCluster   ## Please Note: The default Kubernetes cluster name is   ## `cluster.local`.   ## If your cluster has been configured with another name, you can   ## specify it with the `clusterDomain` attribute.   opsManager: # Alias of cloudManager     configMapRef:       name: my-project   credentials: my-credentials   persistent: true   configSrvPodSpec:     # if "persistence" element is omitted then Operator uses the     # default size (5Gi) for mounting single Persistent Volume     podTemplate:       spec:         affinity:           podAffinity:             requiredDuringSchedulingIgnoredDuringExecution:               - labelSelector:                   matchExpressions:                     - key: security                       operator: In                       values:                         - S1                 topologyKey: failure-domain.beta.kubernetes.io/zone           nodeAffinity:             requiredDuringSchedulingIgnoredDuringExecution:               nodeSelectorTerms:                 - matchExpressions:                     - key: kubernetes.io/e2e-az-name                       operator: In                       values:                         - e2e-az1                         - e2e-az2           podAntiAffinity:             requiredDuringSchedulingIgnoredDuringExecution:             - podAffinityTerm:                 topologyKey: nodeId   mongosPodSpec:     podTemplate:       spec:         affinity:           podAffinity:             requiredDuringSchedulingIgnoredDuringExecution:               - labelSelector:                   matchExpressions:                     - key: security                       operator: In                       values:                         - S1                 topologyKey: failure-domain.beta.kubernetes.io/zone           nodeAffinity:             requiredDuringSchedulingIgnoredDuringExecution:               nodeSelectorTerms:                 - matchExpressions:                     - key: kubernetes.io/e2e-az-name                       operator: In                       values:                         - e2e-az1                         - e2e-az2           podAntiAffinity:             requiredDuringSchedulingIgnoredDuringExecution:             - podAffinityTerm:                 topologyKey: nodeId   shardPodSpec:     persistence:       multiple:         # if the child of "multiple" is omitted then the default size will be used.         # 16GB for "data", 1GB for "journal", 3GB for "logs"         data:           storage: "20Gi"         logs:           storage: "4Gi"           storageClass: standard     podTemplate:       spec:         affinity:           podAffinity:             requiredDuringSchedulingIgnoredDuringExecution:               - labelSelector:                   matchExpressions:                     - key: security                       operator: In                       values:                         - S1                 topologyKey: failure-domain.beta.kubernetes.io/zone           nodeAffinity:             requiredDuringSchedulingIgnoredDuringExecution:               nodeSelectorTerms:                 - matchExpressions:                     - key: kubernetes.io/e2e-az-name                       operator: In                       values:                         - e2e-az1                         - e2e-az2           podAntiAffinity:             requiredDuringSchedulingIgnoredDuringExecution:             - podAffinityTerm:                 topologyKey: nodeId   mongos:     additionalMongodConfig:       systemLog:         logAppend: true         verbosity: 4   configSrv:     additionalMongodConfig:       operationProfiling:         mode: slowOp   shard:     additionalMongodConfig:       storage:         journal:           commitIntervalMs: 50   security:     certsSecretPrefix: "prefix"     tls:      ca: custom-ca     authentication:       enabled: true       modes: ["X509"]       internalCluster: "X509"   statefulSet:     spec:       serviceName: my-service ... 
StatefulSet 设置
以下 StatefulSet 设置仅适用于副本集和分片集群资源类型。
- spec.statefulSet.spec.serviceName
- 类型:字符串 - 默认值: - <resource_name>-svc和- <resource_name>-svc-external- 要为 StatefulSet 创建或用于 StatefulSet 的 Kubernetes 服务的名称。如果具有该名称的服务已存在,MongoDB Enterprise Kubernetes Operator 不会删除或重新创建该服务。该设置允许您创建自己的自定义服务,并让 Kubernetes Operator 重新使用这些服务。