注意
对于此页面上提到的所有 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,则特征兼容性版本 (FCV) 会自动更改为此版本,除非将
spec.featureCompatibilityVersion设置为原始版本。 请考虑将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 二进制文件的默认非静态容器,或
在运行时不可变的静态容器(公共预览版) 。
接受的值为:
staticnon-static
apiVersion: mongodb.com/v1 kind: MongoDB metadata: name: my-project annotations: mongodb.com/v1.architecture: "static"
spec.featureCompatibilityVersion类型:字符串
限制升级到新的主要版本时发生的数据更改。 这允许您降级到以前的主要版本。 要了解有关功能兼容性的更多信息,请参阅 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 内自动化代理日志记录的级别。接受的值包括:
DEBUGINFOWARNERRORFATAL
部署特定的资源设置
您可以且必须在 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外部服务的名称。您无法更改此值。
TypeLoadBalancer创建外部 LoadBalancer 服务。
Port<Port Number>mongod的端口。publishNotReadyAddresstrue指定即使 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 Managerspec.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类型:数字
Number of minutes between successive cluster checkpoints. This setting applies only to sharded clusters that run MongoDB with FCV of 7.0 or earlier. This number determines the granularity of point-in-time restores for sharded clusters. You can set a value of
15,30, or60.
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.single类型:集合
让 Kubernetes Operator 创建持久化卷声明,并将数据、事务日志与运行日志的所有三个目录挂载到同一个持久卷。
注意
如果
spec.persistent: true,则必须设置此集合中的值。您可以设置此集合或
persistence.multiple集合,但不能同时设置两者。
标量数据类型说明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 上的示例。
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 通信 命名 TLSmdb-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 重新使用这些服务。