对于 AI 代理:可在 https://www.mongodb.com/zh-cn/docs/llms.txt 获取文档索引—通过在任何 URL 路径后添加 .md 可获取所有页面的 Markdown 版本。
Docs 菜单

MongoDB 数据库资源规范

注意

对于此页面上提到的所有 Ops Manager,您都可以将其替换为 Cloud Manager。

MongoDB Controllers for Kubernetes Operator 从您写入的规范文件创建Kubernetes StatefulSet。

Kubernetes Operator 在 Kubernetes 中创建 MongoDB 专用资源作为自定义资源。

要管理这些自定义资源,请使用以下进程:

  1. 创建或更新一个 MongoDB 资源规范。

  2. 指导MongoDB Controllers for Kubernetes Operator 将其应用到您的Kubernetes环境。因此, Kubernetes Operator 会执行以下操作:

    • 创建已定义的 StatefulSets、服务和其他 Kubernetes 资源。

    • 更新 Ops Manager 部署配置以反映更改。

部署类型
StatefulSet
StatefulSet 大小

独立运行的实例

1

1 Pod

副本集(Replica Set)

1

每个节点的 1 Pod

分片集群

<numberOfShards> + 2

每个 MongoDB资源都使用 YAML 中的对象规范来定义MongoDB对象的特征和设置:独立运行、副本集和分片集群。

每种资源类型都必须使用以下设置:

apiVersion

类型:字符串

MongoDB 资源模式的版本。

kind

类型:字符串

要创建的 MongoDB 资源的类型。将其设置为 MongoDB

metadata.name

类型:字符串

您创建的 MongoDB 资源的名称。

资源名称必须少于或等于 44 个字符。

spec.credentials

类型:字符串

必需。您创建的Kubernetes密钥名称,该密钥作为Ops Manager API身份验证凭证,供Kubernetes Operator 与Cloud Manager或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 图表将无法显示在 Deployment 页面上的 Processes标签页中,也无法显示在 Metrics 页面中。

spec.type

类型:字符串

要创建的 MongoDB 资源的类型。接受的值为:

  • Standalone

  • ReplicaSet

  • ShardedCluster

spec.version

类型:字符串

您在此 MongoDB 资源上安装的 MongoDB 版本。

重要

请务必选择兼容的 MongoDB Server 版本。

兼容版本因 MongoDB 数据库资源使用的基础图片而异。

注意

如果您将此值更新为数据库资源的更高版本的MongoDB ,则特征兼容性版本将保留为您要升级的MongoDB版本,以便您可以在必要时选择降级。如果您希望特征兼容性版本与新的MongoDB版本匹配,则必须手动将 spec.featureCompatibilityVersion设立为新版本或 AlwaysMatchVersion。要学习;了解更多信息,请参阅 spec.featureCompatibilityVersion。

每个资源必须使用以下设置之一:

spec.opsManager.configMapRef.name

类型:字符串

具有Cloud Manager或Ops Manager连接配置的 ConfigMap 的名称。 spec.cloudManager.configMapRef.name 设置是此设置的别名,可以用来代替它。

此值必须与待创建的资源位于同一命名空间。

重要

Operator 管理对 ConfigMap 的更改

Kubernetes Operator 会跟踪该 ConfigMap 的任何更改并协调 MongoDB 资源的状态。

spec.cloudManager.configMapRef.name

类型:字符串

spec.opsManager.configMapRef.name 的别名。

每种资源类型都可以使用以下设置:

metadata.annotations.mongodb.com/v1.architecture

类型:字符串

确定特定部署使用的容器架构:

接受的值为:

  • static

  • non-static

apiVersion: mongodb.com/v1
kind: MongoDB
metadata:
name: my-project
annotations:
mongodb.com/v1.architecture: "static"
spec.agent.backupAgent.logRotate

类型:对象

MongoDB Agent轮换备份日志的阈值。

spec.agent.backupAgent.logRotate.sizeThresholdMB

类型:整型

在MongoDB Agent轮换日志之前,备份日志文件的最大大小(以 MB 为单位)。

spec.agent.backupAgent.logRotate.timeThresholdHrs

类型:整型

MongoDB Agent轮换备份日志文件的小时数。

spec.agent.mongod.auditlogRotate

类型:对象

包含MongoDB进程的Atlas 审核日志轮换配置的对象。

spec.agent.mongod.auditlogRotate.sizeThresholdMB

类型:数字

在MongoDB Agent轮换日志之前,Atlas 审核日志文件的最大大小(以 MB 为单位)。

spec.agent.mongod.auditlogRotate.timeThresholdHrs

类型:整型

MongoDB Agent轮换Atlas 审核日志文件的小时数。

spec.agent.mongod.auditlogRotate.numUncompressed

类型:整型

未压缩的Atlas 审核日志文件总数的最大数量,包括当前日志文件。

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

类型:对象

MongoDB Ops Manager轮换进程的MongoDB日志的阈值。

spec.agent.mongod.logRotate.sizeThresholdMB

类型:整型

Ops Manager轮换单个日志文件之前,该文件的最大大小(以 MB 为单位)。如果Ops Manager达到此 sizeThresholdMB 或 spec.agent.mongod.logRotate.timeThresholdHrs 中给定的值,则立即轮换日志文件。

spec.agent.mongod.logRotate.timeThresholdHrs

类型:整型

下次轮换之前单个日志文件的最大持续时间(以小时为单位)。 自上次轮换以来的时间。

一旦文件满足此 timeThresholdHrs 或 spec.agent.mongod.logRotate.sizeThresholdMB, Ops Manager就会轮换日志文件。

spec.agent.monitoringAgent.logRotate

类型:对象

阈值,超过该阈值, MongoDB Agent会轮换监控日志。

spec.agent.monitoringAgent.logRotate.sizeThresholdMB

类型:整型

在MongoDB Agent轮换监控日志之前,单个日志文件的最大大小(以 MB 为单位)。

spec.agent.monitoringAgent.logRotate.timeThresholdHrs

类型:整型

MongoDB Agent轮换监控日志的小时数。

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 。

警告

如果Kubernetes集群具有默认cluster.local 以外的默认域,则必须设立spec.clusterDomain。如果既不使用默认,也不设立spec.clusterDomain 选项, Kubernetes Operator 可能无法按预期运行。

spec.clusterName

类型:字符串

默认值:cluster.local

重要

spec.clusterName 已弃用

请改用 spec.clusterDomain。

部署Kubernetes Operator 的Kubernetes集群的域名。当Kubernetes创建 StatefulSet 时, Kubernetes会为每个 Pod 分配一个 FQDN。要更新Cloud Manager或Ops Manager, Kubernetes Operator 使用提供的集群名称计算每个 Pod 的 FQDN。 Kubernetes不提供用于查询这些主机名的API 。

警告

如果Kubernetes集群具有默认cluster.local 以外的默认域,则必须设立spec.clusterDomain。如果既不使用默认,也不设立spec.clusterDomain 选项, Kubernetes Operator 可能无法按预期运行。

metadata.namespace

类型:字符串

您在其中创建此 MongoDB资源和其他对象的Kubernetes命名空间。

spec.service

类型:字符串

默认:<resource_name>+"-svc" 和 <resource_name>+"-svc-external"

重要

spec.service 已弃用

请改用 spec.statefulSet.spec.serviceName。

要创建或用于StatefulSet的Kubernetes服务的名称。如果具有此名称的服务已存在, MongoDB Controllers for Kubernetes Operator 不会删除或重新创建该服务。通过此设置,您可以创建自己的自定义服务,并允许Kubernetes Operator 重复使用这些服务。

spec.logLevel

类型:字符串

默认值:INFO

配置 Pod 内自动化代理日志记录的级别。接受的值包括:

  • DEBUG

  • INFO

  • WARN

  • ERROR

  • FATAL

spec.security.authentication.ignoreUnknownUsers

类型:布尔值

默认值:false

确定是否可以修改未通过 Kubernetes Operator、Cloud Manager 或 Ops Manager 用户界面配置的数据库用户。

要直接通过 mongod 或 mongos管理数据库用户,设立将此设置设为 true。

您可以且必须在 MongoDB 资源规范中使用的其他设置取决于您要创建的 MongoDB 部署项:

注意

所有独立运行设置也应用于副本集资源。

spec.additionalMongodConfig

类型:集合

启动 MongoDB 进程时需要使用的其他配置选项。

Kubernetes Operator 支持您通过 MongoDB 助手部署的 MongoDB 版本所支持的所有配置选项,但 Kubernetes Operator 会覆盖您为以下任何选项提供的值:

要详细了解 Kubernetes Operator 拥有的配置选项,请参阅 MongoDB Kubernetes Operator 独有设置。

要学习;了解可以使用哪些配置选项,请参阅Ops Manager文档中的MongoDB部署高级选项。

spec.agent

类型:集合

MongoDB 数据库资源的 MongoDB 助手配置设置。

spec.agent.startupOptions

类型:集合

您要用来启动 MongoDB 数据库资源的 MongoDB 助手设置。

您必须以键值对形式提供 MongoDB 助手设置。这些值必须是字符串。

有关支持的 MongoDB 助手设置列表,请参阅:

1---
2apiVersion: mongodb.com/v1
3kind: MongoDB
4metadata:
5 name: my-standalone
6spec:
7 version: "8.0.0"
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.externalService

类型:集合

覆盖 spec.externalAccess 中默认值的规范。

当您设立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}

自动化配置中设立的mongod进程主机名。

进程主机名取决于您的部署配置。如果已将部署配置为使用 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

字符串

应安装的持久卷的最小大小。该值以整数表示,后跟采用 JEDEC 表示法的存储单位。

默认值为 16Gi。

示例,如果独立运行部署需要 60 GB 的存储空间,则将该值设立为60Gi。

storageClass

字符串

持久卷声明中指定的存储类型。您可以先将此存储类型创建为 StorageClass对象,然后再用于此对象规范。

确保将 StorageClass reclaimPolicy设立为 Retain。这可确保在删除持久卷声明时保留数据。

spec.podSpec.persistence.multiple.data

类型:集合

Kubernetes Operator 是否创建持久卷声明并将数据目录挂载到自己的持久卷。

注意

  • 如果 spec.persistent : true,则必须设立此集合中的值。

  • 您可以设置此集合或 persistence.single 集合,但不能同时设置这两个集合。

标量
数据类型
说明

labelSelector

字符串

用于将已安装卷绑定到目录的标签。

storage

字符串

Kubernetes 节点在 Kubernetes 上托管独立部署所需的最小存储容量。此值以整数表示,后跟采用 JEDEC 表示法的存储单位。

默认值为 16Gi。

示例,如果此MongoDB资源需要60 GB 的存储空间,请将此值设立为60Gi 。

storageClass

字符串

独立运行部署所需的存储类型。您可以先将此存储类型创建为 StorageClass对象,然后再用于此对象规范。

确保将 StorageClass reclaimPolicy设立为 Retain。这可确保在删除持久卷声明时保留数据。

spec.podSpec.persistence.multiple.journal

类型:集合

让 Kubernetes Operator 创建持久卷声明,并将日志目录挂载到自己的持久卷上。

注意

  • 如果 spec.persistent : true,则必须设立此集合中的值。

  • 您可以设置此集合或 persistence.single 集合,但不能同时设置这两个集合。

标量
数据类型
说明

labelSelector

字符串

用于将已安装卷绑定到目录的标签。

storage

字符串

Kubernetes 节点在 Kubernetes 上托管独立部署所需的最小存储容量。此值以整数表示,后跟采用 JEDEC 表示法的存储单位。

默认值为 1 Gi。

示例,如果此MongoDB资源需要60 GB 的存储空间,请将此值设立为60Gi 。

storageClass

字符串

独立运行部署所需的存储类型。您可以先将此存储类型创建为 StorageClass对象,然后再用于此对象规范。

确保将 StorageClass reclaimPolicy设立为 Retain。这可确保在删除持久卷声明时保留数据。

spec.podSpec.persistence.multiple.logs

类型:集合

让 Kubernetes Operator 创建持久卷声明,并将日志目录挂载到自己的持久卷上。

注意

  • 如果 spec.persistent : true,则必须设立此集合中的值。

  • 您可以设置此集合或 persistence.single 集合,但不能同时设置这两个集合。

标量
数据类型
说明

labelSelector

字符串

用于将已安装卷绑定到目录的标签。

storage

字符串

Kubernetes 节点在 Kubernetes 上托管独立部署所需的最小存储容量。此值以整数表示,后跟采用 JEDEC 表示法的存储单位。

默认值为 3Gi。

示例,如果此MongoDB资源需要60 GB 的存储空间,请将此值设立为60Gi 。

storageClass

字符串

独立运行部署所需的存储类型。您可以先将此存储类型创建为 StorageClass对象,然后再用于此对象规范。

确保将 StorageClass reclaimPolicy设立为 Retain。这可确保在删除持久卷声明时保留数据。

spec.podSpec.podTemplate

类型:集合

MongoDB Controllers for Kubernetes Operator 为MongoDB 数据库资源创建的Kubernetes Pod 的模板。

模板值优先于 spec.podSpec 中指定的值。

注意

Kubernetes Operator 不会验证您在 spec.podSpec.podTemplate 中提供的字段。

spec.podSpec.podTemplate.metadata

类型:集合

Kubernetes Operator 的MongoDB控制器为MongoDB 数据库资源创建的Kubernetes Pod 的元数据。

要查看可以添加到 spec.podSpec.podTemplate.metadata 的字段,请参阅Kubernetes文档。

spec.podSpec.podTemplate.spec

类型:集合

Kubernetes Operator 的MongoDB控制器为MongoDB 数据库资源创建的Kubernetes Pod 的规范。

要查看可以向 spec.podSpec.podTemplate.spec 添加哪些字段,请参阅Kubernetes PodSpec v1 核心API。

注意

在将容器添加到 spec.podSpec.podTemplate.spec.containers 时,Kubernetes Operator 将它们添加到 Kubernetes Pod 中。这些容器附加到 pod 中的 MongoDB 数据库资源容器。

使用此设置指定每个 Pod 的 CPU 和RAM分配。有关示例,请参阅 GitHub 上的示例。

spec.podSpec.podTemplate.spec.affinity.nodeAffinity

类型:结构

Kubernetes规则将副本集的 Pod 放置在特定范围的节点上。

为了优化读写性能,请使用节点关联性规则来限制 Pod 在特定 节点 上运行 ,或者更愿意在特定 节点 上运行 。

spec.podSpec.podTemplate.spec.affinity.podAffinity

类型:结构

Kubernetes规则来确定多个MongoDB资源Pod 是否必须与其他 Pod 共处一地。要学习;了解有关使用案例的更多信息,请参阅Kubernetes文档中的关联和反关联。

spec.podSpec.podTemplate.spec.affinity.podAntiAffinity

类型:结构

Default: kubernetes.io/hostname

设置规则,将托管 MongoDB资源的Pod 分布到不同位置。位置可以是单个节点、机架或地区。默认下, Kubernetes Operator 会尝试将 Pod 分布到不同的节点。

spec.podSpec.podTemplate.spec.affinity.podAntiAffinity.requiredDuringSchedulingIgnoredDuringExecution.topologyKey

类型:结构

Default: kubernetes.io/hostname

此键定义使用哪个标签来确定节点属于哪个拓扑结构域。

注意

所有独立运行设置也应用于副本集资源。

以下设置适用于副本集资源类型:

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 设置依赖于Ops Manager中启用的备份,并要求将Ops Manager资源规范中的 spec.backup.enabled 值设立为 true。

使用 spec.backup.mode 为MongoDB资源启用连续备份后,您可以检查备份状态。

spec.backup.encryption

类型:对象

包含备份加密配置设置的对象。

spec.backup.encryption.kmip

类型:对象

包含 KMIP备份加密配置设置的对象。要学习;了解更多信息,请参阅为Ops Manager配置 KMIP 备份加密。

spec.backup.encryption.kmip.client

类型:对象

包含 KMIP备份加密客户端配置设置的对象。

spec.backup.encryption.kmip.client.clientCertificatePrefix

类型:字符串

spec.backup.snapshotSchedule

类型:集合

用于 Kubernetes Operator 中的 MongoDB 资源连续备份的快照计划设置的集合容器。

spec.backup.snapshotSchedule.snapshotIntervalHours

类型:数字

快照之间的小时数。可以设置的值包括 6、8、12 或 24。

spec.backup.snapshotSchedule.snapshotRetentionDays

类型:数字

保留最近快照的天数。可以设置介于 2 和 5(含 36)之间的值。

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.pointInTimeWindowHours

类型:数字

可以创建时间点快照的过去小时数。

spec.backup.snapshotSchedule.referenceHourOfDay

类型:数字

使用 24 小时时钟安排快照的一天中的 UTC 小时。您可以设立介于 0 和 23(含)之间的值。

spec.backup.snapshotSchedule.referenceMinuteOfHour

类型:数字

用于安排快照的 UTC 分钟。您可以设立介于 0 和 59(含)之间的值。

spec.backup.snapshotSchedule.fullIncrementalDayOfWeek

类型:字符串

Ops Manager 撷取完整快照的星期几。此设置可确保最近的完整备份。Ops Manager 会将默认值设置为 SUNDAY。

spec.clusterName

类型:字符串

默认值:cluster.local

重要

spec.clusterName 已弃用

请改用 spec.clusterDomain。

部署Kubernetes Operator 的Kubernetes集群的域名。当Kubernetes创建 StatefulSet 时, Kubernetes会为每个 Pod 分配一个 FQDN。要更新Cloud Manager或Ops Manager, Kubernetes Operator 使用提供的集群名称计算每个 Pod 的 FQDN。 Kubernetes不提供用于查询这些主机名的API 。

警告

如果Kubernetes集群具有默认cluster.local 以外的默认域,则必须设立spec.clusterDomain。如果既不使用默认,也不设立spec.clusterDomain 选项, Kubernetes Operator 可能无法按预期运行。

spec.connectivity.replicaSetHorizons

类型:集合

允许您为客户端应用程序和 MongoDB 助手提供不同的 DNS 设置。Kubernetes Operator 为副本集节点使用水平分割 DNS。此功能允许 Kubernetes 集群内部与 Kubernetes 外部进行通信。

您可以为每台主机添加多个外部映射。

水平分割要求:

例子

副本集成员使用复制配置 (members[n].host) 中配置的主机名相互通信。 example-website 地平线为通过该地平线连接的客户端提供备用地址。

就本示例而言,所述范围的名称是任意的。 您可以将范围命名为任何名称,但要确保属于该范围的所有主机名都相同。

1---
2apiVersion: mongodb.com/v1
3kind: MongoDB
4metadata:
5 name: <my-replica-set>
6spec:
7 members: 3
8 version: "8.0.0"
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 使用带有外部域的主机名来覆盖Ops Manager自动化配置中的 processes[n].hostname字段。然后, MongoDB 助手会使用此主机名连接到 mongod。

要指定用于连接到副本集的其他主机名,可以使用 spec.connectivity.replicaSetHorizons 设置。但是,以下连接仍使用带有外部域的主机名:

警告:指定此字段会更改Ops Manager注册 mongod 进程的方式。对于运行的副本集部署,您无法更改此字段或Ops Manager自动化配置中任何 processes[n].hostname 字段的值。

spec.members

类型:整型

必需。副本集的节点数。

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副本集成员成为主节点 (primary node in the replica set)的相对可能性的数字。

  • 要增加副本集节点成为主节点的相对可能性,请指定较高的 priority 值。

  • 要降低副本集节点成为主节点的相对可能性,请指定较低的 priority 值。

例如,memberConfig.priority 为 1.5 的成员比 memberConfig.priority 为 0.5 的成员更有可能成为主节点。

memberConfig.priority 为 0 的节点没有资格成为主节点 (primary node in the replica set)。要学习;了解更多信息,请参阅成员优先级。

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

类型:数字

连续集群检查点之间的分钟数。 此设置仅适用于运行分片的且特征兼容性版本为4.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 助手设置列表,请参阅:

1---
2apiVersion: mongodb.com/v1
3kind: MongoDB
4metadata:
5 name: my-sharded-cluster-options
6spec:
7 version: "8.0.0"
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

字符串

应安装的持久卷的最小大小。该值以整数表示,后跟采用 JEDEC 表示法的存储单位。

默认值为 5Gi。

示例,如果每个配置服务器成员需要 60 GB 的存储空间,则将该值设立为60Gi。

storageClass

字符串

持久卷声明中指定的存储类型。您可以先将此存储类型创建为 StorageClass对象,然后再用于此对象规范。

确保将 StorageClass reclaimPolicy设立为 Retain。这可确保在删除持久卷声明时保留数据。

spec.configSrvPodSpec.persistence.multiple.data

类型:集合

Kubernetes Operator 是否创建持久卷声明并将数据目录挂载到自己的持久卷。

注意

  • 如果 spec.persistent : true,则必须设立此集合中的值。

  • 您可以设置此集合或 persistence.single 集合,但不能同时设置这两个集合。

标量
数据类型
说明

labelSelector

字符串

用于将已安装卷绑定到目录的标签。

storage

字符串

Kubernetes节点上必须提供的用于托管Kubernetes上每个配置服务器成员的最小存储容量。该值以整数表示,后跟采用 JEDEC 表示法的存储单位。

默认值为 16Gi。

示例,如果此MongoDB资源需要60 GB 的存储空间,请将此值设立为60Gi 。

storageClass

字符串

每个配置服务器成员所需的存储类型。您可以先将此存储类型创建为 StorageClass对象,然后再用于此对象规范。

确保将 StorageClass reclaimPolicy设立为 Retain。这可确保在删除持久卷声明时保留数据。

spec.configSrvPodSpec.persistence.multiple.journal

类型:集合

让 Kubernetes Operator 创建持久卷声明,并将日志目录挂载到自己的持久卷上。

注意

  • 如果 spec.persistent : true,则必须设立此集合中的值。

  • 您可以设置此集合或 persistence.single 集合,但不能同时设置这两个集合。

标量
数据类型
说明

labelSelector

字符串

用于将已安装卷绑定到目录的标签。

storage

字符串

Kubernetes节点上必须提供的用于托管Kubernetes上每个配置服务器成员的最小存储容量。该值以整数表示,后跟采用 JEDEC 表示法的存储单位。

默认值为 1 Gi。

示例,如果此MongoDB资源需要60 GB 的存储空间,请将此值设立为60Gi 。

storageClass

字符串

每个配置服务器成员所需的存储类型。您可以先将此存储类型创建为 StorageClass对象,然后再用于此对象规范。

确保将 StorageClass reclaimPolicy设立为 Retain。这可确保在删除持久卷声明时保留数据。

spec.configSrvPodSpec.persistence.multiple.logs

类型:集合

让 Kubernetes Operator 创建持久卷声明,并将日志目录挂载到自己的持久卷上。

注意

  • 如果 spec.persistent : true,则必须设立此集合中的值。

  • 您可以设置此集合或 persistence.single 集合,但不能同时设置这两个集合。

标量
数据类型
说明

labelSelector

字符串

用于将已安装卷绑定到目录的标签。

storage

字符串

Kubernetes节点上必须提供的用于托管Kubernetes上每个配置服务器成员的最小存储容量。该值以整数表示,后跟采用 JEDEC 表示法的存储单位。

默认值为 3Gi。

示例,如果此MongoDB资源需要60 GB 的存储空间,请将此值设立为60Gi 。

storageClass

字符串

每个配置服务器成员所需的存储类型。您可以先将此存储类型创建为 StorageClass对象,然后再用于此对象规范。

确保将 StorageClass reclaimPolicy设立为 Retain。这可确保在删除持久卷声明时保留数据。

spec.configSrvPodSpec.podTemplate

类型:集合

MongoDB Controllers for Kubernetes Operator 为每个配置服务器成员创建的Kubernetes Pod 模板。

模板值优先于 spec.configSrvPodSpec 中指定的值。

注意

Kubernetes Operator 不会验证您在 spec.configSrvPodSpec.podTemplate 中提供的字段。

spec.configSrvPodSpec.podTemplate.metadata

类型:集合

MongoDB Controllers for Kubernetes Operator 为每个配置服务器节点创建的Kubernetes Pod 的元数据。

要查看可以添加到 spec.configSrvPodSpec.podTemplate.metadata 的字段,请参阅Kubernetes文档。

spec.configSrvPodSpec.podTemplate.spec

类型:集合

Kubernetes Operator 的MongoDB控制器为每个配置服务器成员创建的Kubernetes Pod 的规范。

要查看可以向 spec.configSrvPodSpec.podTemplate.spec 添加哪些字段,请参阅Kubernetes PodSpec v1 核心API。

注意

在您将容器添加到 spec.configSrvPodSpec.podTemplate.spec.containers 时,Kubernetes Operator 将它们添加到 Kubernetes Pod 中。这些容器会附加到 Pod 中的每个配置服务器成员容器。

使用此设置指定每个 Pod 的 CPU 和RAM分配。有关示例,请参阅 GitHub 上的示例。

spec.configSrvPodSpec.podTemplate.spec.affinity.podAffinity

类型:集合

Kubernetes规则来确定多个MongoDB资源Pod 是否必须与其他 Pod 共处一地。要学习;了解有关使用案例的更多信息,请参阅Kubernetes文档中的关联和反关联。

spec.configSrvPodSpec.podTemplate.spec.affinity.nodeAffinity

类型:集合

Kubernetes规则将副本集的 Pod 放置在特定范围的节点上。

为了优化读写性能,请使用节点关联性规则来限制 Pod 在特定 节点 上运行 ,或者更愿意在特定 节点 上运行 。

spec.configSrvPodSpec.podTemplate.spec.affinity.podAntiAffinity

类型:字符串

Default: kubernetes.io/hostname

设置规则,将托管 MongoDB资源的Pod 分布到不同位置。位置可以是单个节点、机架或地区。默认下, Kubernetes Operator 会尝试将 Pod 分布到不同的节点。

spec.configSrvPodSpec.podTemplate.spec.affinity.podAntiAffinity.requiredDuringSchedulingIgnoredDuringExecution.topologyKey

类型:字符串

Default: kubernetes.io/hostname

此键定义使用哪个标签来确定节点属于哪个拓扑结构域。

spec.mongodsPerShardCount

类型:整型

必需。每个分片的节点数。

spec.mongosCount

类型:整型

必需。分片集群中 mongos 实例的数量。

spec.mongos.additionalMongodConfig

类型:集合

您要用于启动每个mongos实例的其他配置选项。

Kubernetes Operator 支持您通过 MongoDB 助手部署的 MongoDB 版本所支持的所有配置选项,但 Kubernetes Operator 会覆盖您为以下任何选项提供的值:

要详细了解 Kubernetes Operator 拥有的配置选项,请参阅 MongoDB Kubernetes Operator 独有设置。

要学习;了解可以使用哪些配置选项,请参阅Ops Manager文档中的MongoDB部署高级选项。

spec.mongos.agent

类型:集合

每个 mongos实例的MongoDB 助手配置设置。

spec.mongos.agent.startupOptions

类型:集合

要用于启动每个 mongos实例的MongoDB 助手设置。

您必须以键值对形式提供 MongoDB 助手设置。这些值必须是字符串。

有关支持的 MongoDB 助手设置列表,请参阅:

1---
2apiVersion: mongodb.com/v1
3kind: MongoDB
4metadata:
5 name: my-sharded-cluster-options
6spec:
7 version: "8.0.0"
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 Controllers for Kubernetes Operator 为每个 mongos实例创建的Kubernetes Pod 模板。

模板值优先于 spec.mongosPodSpec 中指定的值。

注意

Kubernetes Operator 不会验证您在 spec.mongosPodSpec.podTemplate 中提供的字段。

spec.mongosPodSpec.podTemplate.metadata

类型:集合

Kubernetes Operator 的MongoDB控制器为每个 mongos实例创建的Kubernetes Pod 的元数据。

要查看可以添加到 spec.mongosPodSpec.podTemplate.metadata 的字段,请参阅Kubernetes文档。

spec.mongosPodSpec.podTemplate.spec

类型:集合

Kubernetes Operator 的MongoDB控制器为每个 mongos实例创建的Kubernetes Pod 的规范。

要查看可以向 spec.mongosPodSpec.podTemplate.spec 添加哪些字段,请参阅Kubernetes PodSpec v1 核心API。

注意

当您将容器添加到 spec.mongosPodSpec.podTemplate.spec.containers 时, Kubernetes Operator 会将它们添加到Kubernetes Pod 中。这些容器附加到 Pod 中的每个 mongos实例容器。

使用此设置指定每个 Pod 的 CPU 和RAM分配。有关示例,请参阅 GitHub 上的示例。

spec.mongosPodSpec.podTemplate.spec.affinity.podAffinity

类型:集合

可选。 Kubernetes规则,用于确定多个MongoDB资源Pod 是否必须与其他 Pod 共处一地。

spec.mongosPodSpec.podTemplate.spec.affinity.nodeAffinity

类型:集合

Kubernetes规则将副本集的 Pod 放置在特定范围的节点上。

为了优化读写性能,请使用节点关联性规则来限制 Pod 在特定 节点 上运行 ,或者更愿意在特定 节点 上运行 。

spec.mongosPodSpec.podTemplate.spec.affinity.podAntiAffinity

类型:字符串

Default: kubernetes.io/hostname

设置规则,将托管 MongoDB资源的Pod 分布到不同位置。位置可以是单个节点、机架或地区。默认下, Kubernetes Operator 会尝试将 Pod 分布到不同的节点。

spec.mongosPodSpec.podTemplate.spec.affinity.podAntiAffinity.requiredDuringSchedulingIgnoredDuringExecution.topologyKey

类型:字符串

Default: kubernetes.io/hostname

此键定义使用哪个标签来确定节点属于哪个拓扑结构域。

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 助手设置列表,请参阅:

1---
2apiVersion: mongodb.com/v1
3kind: MongoDB
4metadata:
5 name: my-sharded-cluster-options
6spec:
7 version: "8.0.0"
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

字符串

Kubernetes节点上必须提供的用于托管Kubernetes上每个分片集群分片成员的最小存储容量。该值以整数表示,后跟采用 JEDEC 表示法的存储单位。

默认值为 16Gi。

示例,如果此MongoDB资源需要60 GB 的存储空间,请将此值设立为60Gi 。

storageClass

字符串

每个分片集群分片成员所需的存储类型。您可以先将此存储类型创建为 StorageClass对象,然后再用于此对象规范。

确保将 StorageClass reclaimPolicy设立为 Retain。这可确保在删除持久卷声明时保留数据。

spec.shardPodSpec.persistence.multiple.journal

类型:集合

让 Kubernetes Operator 创建持久卷声明,并将日志目录挂载到自己的持久卷上。

注意

  • 如果 spec.persistent : true,则必须设立此集合中的值。

  • 您可以设置此集合或 persistence.single 集合,但不能同时设置这两个集合。

标量
数据类型
说明

labelSelector

字符串

用于将已安装卷绑定到目录的标签。

storage

字符串

Kubernetes节点上必须提供的用于托管Kubernetes上每个分片集群分片成员的最小存储容量。该值以整数表示,后跟采用 JEDEC 表示法的存储单位。

默认值为 1 Gi。

示例,如果此MongoDB资源需要60 GB 的存储空间,请将此值设立为60Gi 。

storageClass

字符串

每个分片集群分片成员所需的存储类型。您可以先将此存储类型创建为 StorageClass对象,然后再用于此对象规范。

确保将 StorageClass reclaimPolicy设立为 Retain。这可确保在删除持久卷声明时保留数据。

spec.shardPodSpec.persistence.multiple.logs

类型:集合

让 Kubernetes Operator 创建持久卷声明,并将日志目录挂载到自己的持久卷上。

注意

  • 如果 spec.persistent : true,则必须设立此集合中的值。

  • 您可以设置此集合或 persistence.single 集合,但不能同时设置这两个集合。

标量
数据类型
说明

labelSelector

字符串

用于将已安装卷绑定到目录的标签。

storage

字符串

Kubernetes节点上必须提供的用于托管Kubernetes上每个分片集群分片成员的最小存储容量。该值以整数表示,后跟采用 JEDEC 表示法的存储单位。

默认值为 3Gi。

示例,如果此MongoDB资源需要60 GB 的存储空间,请将此值设立为60Gi 。

storageClass

字符串

每个分片集群分片成员所需的存储类型。您可以先将此存储类型创建为 StorageClass对象,然后再用于此对象规范。

确保将 StorageClass reclaimPolicy设立为 Retain。这可确保在删除持久卷声明时保留数据。

spec.shardPodSpec.podTemplate

类型:集合

MongoDB Controllers for Kubernetes Operator 为每个分片集群分片成员创建的Kubernetes Pod 模板。

模板值优先于 spec.shardPodSpec 中指定的值。

注意

Kubernetes Operator 不会验证您在 spec.shardPodSpec.podTemplate 中提供的字段。

spec.shardPodSpec.podTemplate.metadata

类型:集合

Kubernetes Operator 的MongoDB控制器为每个分片集群分片成员创建的Kubernetes Pod 的元数据。

要查看可以添加到 spec.shardPodSpec.podTemplate.metadata 的字段,请参阅Kubernetes文档。

spec.shardPodSpec.podTemplate.spec

类型:集合

Kubernetes Operator 的MongoDB控制器为每个分片集群分片成员创建的Kubernetes Pod 的规范。

要查看可以向 spec.shardPodSpec.podTemplate.spec 添加哪些字段,请参阅Kubernetes PodSpec v1 核心API。

注意

当您将容器添加到 spec.shardPodSpec.podTemplate.spec.containers 时, Kubernetes Operator 会将它们添加到Kubernetes Pod 中。这些容器会附加到 Pod 中的每个分片集群的分片成员容器。

使用此设置指定每个 Pod 的 CPU 和RAM分配。有关示例,请参阅 GitHub 上的示例。

spec.shardPodSpec.podTemplate.spec.affinity.podAffinity

类型:字符串

Kubernetes规则来确定多个MongoDB资源Pod 是否必须与其他 Pod 共处一地。要学习;了解有关使用案例的更多信息,请参阅Kubernetes文档中的关联和反关联。

spec.shardPodSpec.podTemplate.spec.affinity.nodeAffinity

类型:字符串

Kubernetes规则将副本集的 Pod 放置在特定范围的节点上。

为了优化读写性能,请使用节点关联性规则来限制 Pod 在特定 节点 上运行 ,或者更愿意在特定 节点 上运行 。

spec.shardPodSpec.podTemplate.spec.affinity.podAntiAffinity

类型:字符串

Default: kubernetes.io/hostname

设置规则,将托管 MongoDB资源的Pod 分布到不同位置。位置可以是单个节点、机架或地区。默认下, Kubernetes Operator 会尝试将 Pod 分布到不同的节点。

spec.shardPodSpec.podTemplate.spec.affinity.podAntiAffinity.requiredDuringSchedulingIgnoredDuringExecution.topologyKey

类型:字符串

Default: kubernetes.io/hostname

此键定义使用哪个标签来确定节点属于哪个拓扑结构域。

spec.shardSpecificPodSpec

类型:数组

包含每个分片 StatefulSet 覆盖配置的列表。

spec.shardSpecificPodSpec.podTemplate

类型:集合

MongoDB Controllers for Kubernetes Operator 为特定分片创建的Kubernetes Pod 的模板。

模板值优先于 spec.shardSpecificPodSpec 中指定的值。

注意

Kubernetes Operator 不会验证您在 spec.shardSpecificPodSpec.podTemplate 中提供的字段。

spec.shardSpecificPodSpec.podTemplate.metadata

类型:集合

MongoDB Controllers for Kubernetes Operator 为特定分片创建的Kubernetes Pod 的元数据。

要查看可以添加到 spec.shardSpecificPodSpec.podTemplate.metadata 的字段,请参阅Kubernetes文档。

spec.shardSpecificPodSpec.podTemplate.spec

类型:集合

Kubernetes Operator 的MongoDB控制器为特定分片创建的Kubernetes Pod 的规范。

要查看可以向 spec.shardSpecificPodSpec.podTemplate.spec 添加哪些字段,请参阅Kubernetes PodSpec v1 核心API。

注意

在将容器添加到 spec.shardSpecificPodSpec.podTemplate.spec.containers 时,Kubernetes Operator 将它们添加到 Kubernetes Pod 中。这些容器附加到 Pod 中的特定分片容器。

使用此设置指定每个 Pod 的 CPU 和RAM分配。有关示例,请参阅 GitHub 上的示例。

spec.shardSpecificPodSpec.podTemplate.spec.affinity.podAffinity

类型:字符串

Kubernetes规则来确定多个MongoDB资源Pod 是否必须与其他 Pod 共处一地。要学习;了解有关使用案例的更多信息,请参阅Kubernetes文档中的关联和反关联。

spec.shardSpecificPodSpec.podTemplate.spec.affinity.podAntiAffinity

类型:字符串

Default: kubernetes.io/hostname

设置规则,将托管 MongoDB资源的Pod 分布到不同位置。位置可以是单个节点、机架或地区。默认下, Kubernetes Operator 会尝试将 Pod 分布到不同的节点。

spec.shardSpecificPodSpec.podTemplate.spec.affinity.podAntiAffinity.requiredDuringSchedulingIgnoredDuringExecution.topologyKey

类型:字符串

Default: kubernetes.io/hostname

此键定义使用哪个标签来确定节点属于哪个拓扑结构域。

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 Controllers for 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: 8.0.0
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 Controllers for 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: 8.0.0
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 Controllers for 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: 8.0.0
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

字符串

应安装的持久卷的最小大小。该值以整数表示,后跟采用 JEDEC 表示法的存储单位。

默认值为 16Gi。

示例,如果 中的每个分片集群分片成员需要 60 GB 的存储空间,则将该值设立为60Gi。

storageClass

字符串

持久卷声明中指定的存储类型。您可以先将此存储类型创建为 StorageClass对象,然后再用于此对象规范。

确保将 StorageClass reclaimPolicy设立为 Retain。这可确保在删除持久卷声明时保留数据。

您可以将 Prometheus 与副本集或分片的集群结合使用。独立运行资源不支持 Prometheus监控。要使用 Prometheus监控单节点部署,部署单成员副本集。要学习;了解更多信息,请参阅部署资源以用于 Prometheus。要查看示例,请参阅使用 Prometheus 的MongoDB资源。

当您将 Prometheus 与 MongoDB 资源结合使用时,适用以下设置:

spec.prometheus

类型:数组

Optional

列表,其中包含用于向 Prometheus 公开指标的参数。

spec.prometheus.metricsPath

类型:字符串

Optional

默认值:"/metrics"

人类可读的字符串,指示指标端点的路径。如果不指定此设置,则使用默认设置。

spec.prometheus.passwordSecretRef

类型:对象

可选的

包含用于基本 HTTP 身份验证密钥详细信息的对象。如要将 Prometheus 与 MongoDB 资源一起使用,就必须指定此设置。

spec.prometheus.passwordSecretRef.key

类型:字符串

Optional

默认值:"password"

人类可读的字符串,用于标识密钥中存储基本HTTP身份验证密码的密钥。如果不指定此设置,则应用默认。

spec.prometheus.passwordSecretRef.name

类型:字符串

可选的

人类可读标签,用于标识包含基本HTTP身份验证密码的密钥。如果要将 Prometheus 与MongoDB资源一起使用,则必须指定此设置。

spec.prometheus.port

类型:整型

Optional

默认值:9216

数字,用于标识指标端点将绑定的端口。如果不指定此设置,则使用默认设置。

spec.prometheus.tlseSecretKeyRef

类型:对象

Optional

包含 TLS身份验证密钥详细信息的对象。

spec.prometheus.tlseSecretKeyRef.key

类型:字符串

Optional

默认值:"password"

人类可读的字符串,用于标识密钥中存储 TLS身份验证密码的密钥。如果不指定此设置,则应用默认。

spec.prometheus.tlseSecretKeyRef.name

类型:字符串

可选的

人类可读标签,用于标识包含 TLS身份验证密码的密钥。如果要将 Prometheus 与MongoDB资源一起使用并且想要使用 TLS身份验证,则必须指定此设置。

spec.prometheus.username

类型:字符串

可选的

人类可读标签,用于标识用户进行基本 HTTP 身份验证。如要将 Prometheus 与 MongoDB 资源一起使用,就必须指定此设置。

以下安全设置仅适用于副本集和分片集群资源类型:

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. 要解决此问题:

  1. 删除任何现有的 CSR,以便Kubernetes可以生成新的 CSR。要学习;了解如何删除资源,请参阅Kubernetes文档中的删除资源。

  2. 在Kubernetes生成 CSR 后批准 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.1+ 在系统上可用, MongoDB将禁用 TLS 1.0。要启用已禁用的 TLS 1.0,请指定 none 作为 spec.additionalMongodConfig.net.tls.disabledProtocols 的值。要学习;了解有关此设置的更多信息,请参阅禁用 TLS 1。0。

副本集和分片集群的成员必须至少使用一个共同协议。

spec.security.authentication

类型:集合

MongoDB 部署的身份验证规范。

spec.security.authentication.enabled

类型:布尔值

默认值:false

指定是否在Cloud Manager或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 身份验证所需。

为Cloud Manager或Ops Manager项目配置LDAP身份验证。要启用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.timeoutMS

类型:整型

指定身份验证请求超时前应等待的毫秒数。

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 身份验证所必需的。

ConfigMap 的名称,它包含验证 LDAP 服务器的 TLS 证书的 CA。

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

类型:集合

Cloud Manager 或 Ops Manager 项目的 MongoDB 助手身份验证配置。

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.modes 指定了多个值,则需要此设置。

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.automationUserName 中用户密码的 spec.security.authentication.agents.automationPasswordSecretRef.name 密钥。

如果 spec.security.authentication.agents.mode 为 LDAP,则需要此设置。

spec.security.authentication.agents.clientCertificateSecretRef.name

类型:字符串

指定包含MongoDB助手的 TLS 证书的密钥。如果省略,则默认为 agent-certs。

您必须在部署Kubernetes Operator 的同一命名空间中创建此密钥,并且密钥的类型必须为 kubernetes.io/tls。

spec.security.roles

类型:数组

定义用户定义的角色的数组,您可以通过这些角色对 MongoDB 部署进行精细的访问控制。

要启用用户定义的角色,spec.security.authentication.enabled 必须是 true。

例子

在此示例中,名为 customRole 的用户定义角色允许用户将此角色分配给:

  • 在 pets 数据库的 cats 集合中插入文档,以及

  • 查找文档并将其插入到 pets 数据库的 dogs 集合中。

1---
2apiVersion: mongodb.com/v1
3kind: MongoDB
4metadata:
5 name: <my-replica-set>
6spec:
7 members: 3
8 version: "8.0.0"
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.role

类型:字符串

用户定义角色的名称。

spec.security.roles.db

类型:字符串

您要在其中存储用户定义的角色的数据库。

例子

admin

spec.security.roles.authenticationRestrictions

类型:数组

定义分配此 spec.security.roles.role 的用户可以连接的IP解决的数组。

spec.security.roles.authenticationRestrictions.clientSource

类型:数组

IP地址或 CIDR 块的数组,分配此 spec.security.roles.role 的用户可以从中进行连接。

如果请求来自此数组中不存在的客户端,则 MongoDB Server 会拒绝具有此角色的用户的连接请求。

spec.security.roles.authenticationRestrictions.serverAddress

类型:数组

分配此 spec.security.roles.role 的用户可以连接的IP地址或 CIDR 块的数组。

如果客户端请求连接到该数组中不存在的服务器,则 MongoDB 服务器拒绝具有该角色的用户的连接请求。

spec.security.roles.privileges

类型:数组

描述被授予此角色的用户所拥有特权的数组。

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

类型:字符串

database 中应用权限actions 的集合。

如果您为此设置提供值,则还必须为 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: "8.0.0"
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
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:
preferredDuringSchedulingIgnoredDuringExecution:
- podAffinityTerm:
topologyKey: "mykey"
weight: 50
...

以下 StatefulSet 设置仅适用于副本集和分片集群资源类型。

Kubernetes Operator 支持通过指定MongoDB资源规范中的 spec.statefulSet.spec 字段的值来覆盖Kubernetes Operator默认StatefulSet 和 PVC 设置。但是,在合并进程中,只保留某些字段。下表列出了支持的覆盖字段。

spec.statefulSet.spec

类型:集合

Kubernetes Operator 的MongoDB控制器为 MongoDB 资源创建的 StatefulSet 规范。

当您在 spec.statefulSet.spec 中指定值时,以下字段将合并并优先于默认StatefulSet 设置。字段路径相对于 StatefulSet 定义,因此 spec.replicas 对应于MongoDB资源规范中的 spec.statefulSet.spec.replicas。

字段

spec.replicas

spec.selector

spec.podManagementPolicy

spec.revisionHistoryLimit

spec.updateStrategy.type

spec.updateStrategy.rollingUpdate

spec.serviceName

spec.template

spec.volumeClaimTemplates

spec.statefulSet.spec.serviceName

类型:字符串

默认值:<resource_name>-svc 和 <resource_name>-svc-external

要创建或用于StatefulSet的Kubernetes服务的名称。如果具有此名称的服务已存在, MongoDB Controllers for Kubernetes Operator 不会删除或重新创建该服务。通过此设置,您可以创建自己的自定义服务,并允许Kubernetes Operator 重复使用这些服务。

仅当 metadata.name 与现有卷声明模板的名称匹配时, Kubernetes Operator 才会合并您在 spec.statefulSet.spec.volumeClaimTemplates 中指定的卷声明模板。下表显示了当您指定 spec.statefulSet.spec.volumeClaimTemplates 中的值时Kubernetes Operator 保留和删除哪些 PVC 字段。字段路径相对于单个卷声明模板,因此 spec.volumeMode 对应于MongoDB资源规范中的 spec.statefulSet.spec.volumeClaimTemplates.spec.volumeMode。

支持(保留)
不支持(已删除)

metadata.namespace
metadata.labels
metadata.annotations
spec.volumeMode
spec.storageClassName
spec.accessModes [1]
spec.selector
spec.resources.limits
spec.resources.requests
spec.dataSource

spec.volumeAttributesClassName
spec.dataSourceRef
spec.volumeName

[ 1 ] Kubernetes 操作符将您指定的访问模式添加到默认访问模式,而不是替换它们。