MongoDB 数据库资源规范
注意
对于此页面上提到的所有 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 ManagerAPIKubernetesOperator 创建 的 作为 身份验证凭证,用于与Cloud Manager 或MongoDB Ops Manager 通信。
持有凭证的 Ops Manager Kubernetes Secret 对象必须与您要创建的资源位于同一个命名空间中。
重要
Operator 管理对密钥的更改
Kubernetes Operator 会跟踪该 Secret 的任何更改并协调
MongoDB
资源的状态。
spec.persistent
类型:布尔值
默认:真
警告: 授予容器写入 持久卷 的权限 。Kubernetes Operator 在 中设置
fsGroup = 2000
、runAsUser = 2000
和runAsNonRoot = true
securityContext
。Kubernetes Operator 将fsgroup
设置为等于runAsUser
,以使在容器中运行主进程的用户可写入该卷。 要学习;了解更多信息,请参阅 为 Pod 或容器配置安全上下文 以及相关 讨论 在Kubernetes文档中。如果重新部署资源无法解决持久卷的问题,请联系MongoDB支持部门。Disk UsageDisk IOPSAtlas Charts如果不使用Processes DeploymentMetrics持久卷 , 和 无法显示在 页面的 标签页中, 查看此部署的数据 时也无法显示在 页面中。
spec.version
类型:字符串
您在此
MongoDB
资源上安装的 MongoDB 版本。重要
请务必选择兼容的 MongoDB Server 版本。
兼容版本因 MongoDB 数据库资源使用的基础图片而异。
注意
如果您将此值更新为数据库资源的更高版本的MongoDB ,则特征兼容性版本将保留为您要升级的MongoDB版本,以便您可以在必要时选择降级。 如果您希望特征兼容性版本与新的MongoDB版本匹配,则必须手动设立
spec.featureCompatibilityVersion
设置为新版本或AlwaysMatchVersion
。 要学习;了解更多信息,请参阅spec.featureCompatibilityVersion
。
可选的
每个资源必须使用以下设置之一:
spec.opsManager.configMapRef.name
类型:字符串
ConfigMap 的名称 使用Cloud Manager 或MongoDB Ops Manager 连接配置。
spec.cloudManager.configMapRef.name
设置是此设置的别名,可以用来代替它。此值必须与待创建的资源位于同一命名空间。
重要
Operator 管理对 ConfigMap 的更改
Kubernetes Operator 会跟踪该 ConfigMap 的任何更改并协调
MongoDB
资源的状态。
Optional
每种资源类型都可以使用以下设置:
metadata.annotations.mongodb.com/v1.architecture
类型:字符串
确定特定部署使用的容器架构:
在运行时下载 MongoDB 二进制文件的默认非静态容器,或
在运行时不可变的静态容器(公共预览版) 。
接受的值为:
static
non-static
apiVersion: mongodb.com/v1 kind: MongoDB metadata: name: my-project annotations: mongodb.com/v1.architecture: "static"
spec.agent.mongod.auditlogRotate.sizeThresholdMB
类型:数字
在MongoDB Agent轮换日志之前,Atlas 审核日志文件的最大大小(以 MB 为单位)。
spec.agent.mongod.auditlogRotate.numTotal
类型:整型
MongoDB Ops Manager保留的Atlas 审核日志文件总数。 如果不设立此值,则Atlas 审核日志文件的总数默认为0 。
spec.agent.mongod.auditlogRotate.percentOfDiskspace
类型:数字
Ops Manager 可用于存储日志文件的总磁盘空间的最大百分比,以十进制表示。如果超过此限制,Ops Manager 将删除压缩的日志文件,直到达到此限制。Ops Manager 首先删除最早的日志文件。
默认值为0.02 。
spec.agent.mongod.logRotate.sizeThresholdMB
类型:整型
MongoDB Ops Manager轮换单个日志文件之前的最大大小(以 MB 为单位)。 MongoDB Ops Manager如果满足此
sizeThresholdMB
或 中给定的值,spec.agent.mongod.logRotate.timeThresholdHrs
会立即轮换日志文件。
spec.agent.mongod.logRotate.timeThresholdHrs
类型:整型
下次轮换之前单个日志文件的最大持续时间(以小时为单位)。 自上次轮换以来的时间。
MongoDB Ops Manager一旦文件满足此
timeThresholdHrs
spec.agent.mongod.logRotate.sizeThresholdMB
或 , 就会轮换日志文件。
spec.agent.monitoringAgent.logRotate.sizeThresholdMB
类型:整型
在MongoDB Agent轮换监控日志之前,单个日志文件的最大大小(以 MB 为单位)。
spec.agent.readinessProbe.environmentVariables
类型:对象
配置以下环境变量,用于控制就绪探针的日志文件:
apiVersion: mongodb.com/v1 kind: MongoDB metadata: name: my-project spec: agent: readinessProbe: environmentVariables: READINESS_PROBE_LOGGER_BACKUPS: 1 READINESS_PROBE_LOGGER_MAX_SIZE: 10 READINESS_PROBE_LOGGER_MAX_AGE: 3 READINESS_PROBE_LOGGER_COMPRESS: true MDB_WITH_AGENT_FILE_LOGGING: false LOG_FILE_PATH: /var/log/mongodb-mms-automation/readiness.log
spec.featureCompatibilityVersion
类型:字符串
MongoDB升级后默认为之前的MongoDB主要版本。
限制升级到新的主要版本时发生的数据更改。 示例,如果您从MongoDB 5.0升级到MongoDB 6.0 ,则特征兼容性版本将保持为5.0 ,以便您可以在必要时选择降级。
如果您希望特征兼容性版本与新的MongoDB版本匹配,则必须手动设立
featureCompatibilityVersion
设置为新版本。 示例,featureCompatibilityVersion: 6.0
。或者,您可以启用
AlwaysMatchVersion
选项,以便在升级期间自动更新特征兼容性版本以匹配MongoDB版本。 示例,featureCompatibilityVersion: AlwaysMatchVersion
。要学习;了解有关功能兼容性的更多信息,请参阅MongoDB手册中的
setFeatureCompatibilityVersion
。
spec.clusterDomain
类型:字符串
默认值:cluster.local
部署 Kubernetes Operator 的 Kubernetes 集群的域名。当 Kubernetes 创建 StatefulSet 时,Kubernetes 会为每个 Pod 分配一个 FQDN。要更新 Cloud Manager 或 Ops Manager,Kubernetes Operator 使用提供的集群名称计算每个 Pod 的 FQDN。Kubernetes 不提供这些主机名查询用的 API。
警告
如果 Kubernetes 集群具有
spec.clusterDomain
默认域 ,则必须设置 除默认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。
警告
如果 Kubernetes 集群具有
spec.clusterDomain
默认域 ,则必须设置 除默认cluster.local
之外的其他值。如果既不使用默认值,也不设置spec.clusterDomain
选项,Kubernetes Operator 可能无法按预期运行。
spec.service
类型:字符串
默认:<resource_name>+"-svc" 和 <resource_name>+"-svc-external"
要为 StatefulSet 创建或用于 StatefulSet 的 Kubernetes 服务的名称。如果具有该名称的服务已存在,MongoDB Enterprise Kubernetes Operator 不会删除或重新创建该服务。该设置允许您创建自己的自定义服务,并让 Kubernetes Operator 重新使用这些服务。
spec.logLevel
类型:字符串
默认值:INFO
配置 Pod 内自动化代理日志记录的级别。接受的值包括:
DEBUG
INFO
WARN
ERROR
FATAL
部署特定的资源设置
您可以且必须在 MongoDB
资源规范中使用的其他设置取决于您要创建的 MongoDB 部署项:
独立的设置
注意
所有独立设置也会应用于副本集资源。
spec.additionalMongodConfig
类型:集合
启动 MongoDB 进程时需要使用的其他配置选项。
Kubernetes Operator 支持您通过 MongoDB 助手部署的 MongoDB 版本所支持的所有配置选项,但 Kubernetes Operator 会覆盖您为以下任何选项提供的值:
要详细了解 Kubernetes Operator 拥有的配置选项,请参阅 MongoDB Kubernetes Operator 独有设置。
如需了解可以使用哪些配置选项,请参阅 Ops Manager 文档中的“MongoDB 部署高级选项”。
spec.agent.startupOptions
类型:集合
您要用来启动 MongoDB 数据库资源的 MongoDB 助手设置。
您必须以键值对形式提供 MongoDB 助手设置。这些值必须是字符串。
有关支持的 MongoDB 助手设置列表,请参阅:
云管理器项目的 MongoDB 代理设置。
MongoDB Agent Operator 部署的MongoDB Ops Manager版本的 MongoDB Kubernetes 。
1 2 apiVersion: mongodb.com/v1 3 kind: MongoDB 4 metadata: 5 name: my-standalone 6 spec: 7 version: "6.0.0-ent" 8 service: my-service 9 10 opsManager: 11 configMapRef: 12 name: my-project 13 credentials: my-credentials 14 type: Standalone 15 16 persistent: true 17 agent: 18 startupOptions: 19 maxLogFiles: "30" 20 dialTimeoutSeconds: "40" 21 ...
spec.podSpec
类型:对象
包含MongoDB CustomResourceDefinition 规范的对象 Pod。
spec.externalAccess
类型:集合
适用于外部连接的集群公开规范。要了解如何从 Kubernetes 集群外部连接到您的 MongoDB 资源,请参阅从 Kubernetes 外部连接到 MongoDB 数据库资源。
如果您添加
spec.externalAccess
,则 Kubernetes Operator 为副本集中的每个 Pod 创建一个外部服务。外部服务为集群中的每个 MongoDB 数据库 Pod 提供外部入口点。每个外部服务具有选择器,它将外部服务与特定 Pod 相匹配。如果添加此设置时不带任何值,Kubernetes Operator 会创建具有以下默认值的外部服务:
字段值说明Name
<pod-name>-svc-external
外部服务的名称。您无法更改此值。
Type
LoadBalancer
创建外部 LoadBalancer 服务。
Port
<Port Number>
mongod
的端口。publishNotReadyAddress
true
指定 DNS 记录 即使 Pod 尚未准备就绪,也会创建。对于任何数据库 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
以 保留 。这可确保在 持久卷声明 时保留数据 已删除。
spec.podSpec.persistence.multiple.data
类型:集合
让 Kubernetes Operator 创建持久卷声明,并将数据目录挂载到自己的持久卷上。
注意
如果
spec.persistent
: true
,则必须设置此集合中的值。您可以设置此集合或
persistence.single
集合,但不能同时设置这两个集合。
标量数据类型说明labelSelector
字符串
标记 用于将挂载的卷绑定到目录。
storage
字符串
storageClass
字符串
独立运行部署所需的存储类型。 您可以将此存储类型创建为 StorageClass 对象,然后在此 对象 中使用它 规范。
确保将 StorageClass 设置为
reclaimPolicy
以 保留 。这可确保在 持久卷声明 时保留数据 已删除。
spec.podSpec.persistence.multiple.journal
类型:集合
让 Kubernetes Operator 创建持久卷声明,并将日志目录挂载到自己的持久卷上。
注意
如果
spec.persistent
: true
,则必须设置此集合中的值。您可以设置此集合或
persistence.single
集合,但不能同时设置这两个集合。
标量数据类型说明labelSelector
字符串
标记 用于将挂载的卷绑定到目录。
storage
字符串
storageClass
字符串
独立运行部署所需的存储类型。 您可以将此存储类型创建为 StorageClass 对象,然后在此 对象 中使用它 规范。
确保将 StorageClass 设置为
reclaimPolicy
以 保留 。这可确保在 持久卷声明 时保留数据 已删除。
spec.podSpec.persistence.multiple.logs
类型:集合
让 Kubernetes Operator 创建持久卷声明,并将日志目录挂载到自己的持久卷上。
注意
如果
spec.persistent
: true
,则必须设置此集合中的值。您可以设置此集合或
persistence.single
集合,但不能同时设置这两个集合。
标量数据类型说明labelSelector
字符串
标记 用于将挂载的卷绑定到目录。
storage
字符串
storageClass
字符串
独立运行部署所需的存储类型。 您可以将此存储类型创建为 StorageClass 对象,然后在此 对象 中使用它 规范。
确保将 StorageClass 设置为
reclaimPolicy
以 保留 。这可确保在 持久卷声明 时保留数据 已删除。
spec.podSpec.podTemplate.affinity.nodeAffinity
类型:结构
Kubernetes 规则 以放置 Pod 针对特定范围的 节点 上的 副本集 。
为了优化读写性能,请使用节点关联性规则来限制 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
类型:集合
模板 KubernetesMongoDBEnterprise Kubernetes Operator用于MongoDB database 资源创建的 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 v1Core 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。
警告
如果 Kubernetes 集群具有
spec.clusterDomain
默认域 ,则必须设置 除默认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
类型:数字
连续集群检查点之间的分钟数。 此设置仅适用于运行分片的且特征兼容性版本为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 助手设置列表,请参阅:
云管理器项目的 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
以 保留 。这可确保在 持久卷声明 时保留数据 已删除。
spec.configSrvPodSpec.persistence.multiple.data
类型:集合
让 Kubernetes Operator 创建持久卷声明,并将数据目录挂载到自己的持久卷上。
注意
如果
spec.persistent
: true
,则必须设置此集合中的值。您可以设置此集合或
persistence.single
集合,但不能同时设置这两个集合。
标量数据类型说明labelSelector
字符串
标记 用于将挂载的卷绑定到目录。
storage
字符串
storageClass
字符串
每个配置服务器成员所需的存储类型。 您可以将此存储类型创建为 StorageClass 对象,然后在此 对象 中使用它 规范。
确保将 StorageClass 设置为
reclaimPolicy
以 保留 。这可确保在 持久卷声明 时保留数据 已删除。
spec.configSrvPodSpec.persistence.multiple.journal
类型:集合
让 Kubernetes Operator 创建持久卷声明,并将日志目录挂载到自己的持久卷上。
注意
如果
spec.persistent
: true
,则必须设置此集合中的值。您可以设置此集合或
persistence.single
集合,但不能同时设置这两个集合。
标量数据类型说明labelSelector
字符串
标记 用于将挂载的卷绑定到目录。
storage
字符串
storageClass
字符串
每个配置服务器成员所需的存储类型。 您可以将此存储类型创建为 StorageClass 对象,然后在此 对象 中使用它 规范。
确保将 StorageClass 设置为
reclaimPolicy
以 保留 。这可确保在 持久卷声明 时保留数据 已删除。
spec.configSrvPodSpec.persistence.multiple.logs
类型:集合
让 Kubernetes Operator 创建持久卷声明,并将日志目录挂载到自己的持久卷上。
注意
如果
spec.persistent
: true
,则必须设置此集合中的值。您可以设置此集合或
persistence.single
集合,但不能同时设置这两个集合。
标量数据类型说明labelSelector
字符串
标记 用于将挂载的卷绑定到目录。
storage
字符串
storageClass
字符串
每个配置服务器成员所需的存储类型。 您可以将此存储类型创建为 StorageClass 对象,然后在此 对象 中使用它 规范。
确保将 StorageClass 设置为
reclaimPolicy
以 保留 。这可确保在 持久卷声明 时保留数据 已删除。
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 针对特定范围的 节点 上的 副本集 。
为了优化读写性能,请使用节点关联性规则来限制 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 v1Core 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
mongos
Pod。模板值优先于
spec.mongosPodSpec
中指定的值。注意
Kubernetes Operator 不会验证您在
spec.mongosPodSpec.podTemplate
中提供的字段。
spec.mongosPodSpec.podTemplate.affinity.nodeAffinity
类型:集合
Kubernetes 规则 以放置 Pod 针对特定范围的 节点 上的 副本集 。
为了优化读写性能,请使用节点关联性规则来限制 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 v1Core 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 规范的对象 分片 。
spec.shardPodSpec.persistence.multiple.data
类型:集合
让 Kubernetes Operator 创建持久卷声明,并将数据目录挂载到自己的持久卷上。
注意
如果
spec.persistent
: true
,则必须设置此集合中的值。您可以设置此集合或
persistence.single
集合,但不能同时设置这两个集合。
标量数据类型说明labelSelector
字符串
标记 用于将挂载的卷绑定到目录。
storage
字符串
storageClass
字符串
每个分片集群分片成员所需的存储类型。 您可以将此存储类型创建为 StorageClass 对象,然后再在此对象规范中使用。
确保将 StorageClass 设置为
reclaimPolicy
以 保留 。这可确保在 持久卷声明 时保留数据 已删除。
spec.shardPodSpec.persistence.multiple.journal
类型:集合
让 Kubernetes Operator 创建持久卷声明,并将日志目录挂载到自己的持久卷上。
注意
如果
spec.persistent
: true
,则必须设置此集合中的值。您可以设置此集合或
persistence.single
集合,但不能同时设置这两个集合。
标量数据类型说明labelSelector
字符串
标记 用于将挂载的卷绑定到目录。
storage
字符串
storageClass
字符串
每个分片集群分片成员所需的存储类型。 您可以将此存储类型创建为 StorageClass 对象,然后再在此对象规范中使用。
确保将 StorageClass 设置为
reclaimPolicy
以 保留 。这可确保在 持久卷声明 时保留数据 已删除。
spec.shardPodSpec.persistence.multiple.logs
类型:集合
让 Kubernetes Operator 创建持久卷声明,并将日志目录挂载到自己的持久卷上。
注意
如果
spec.persistent
: true
,则必须设置此集合中的值。您可以设置此集合或
persistence.single
集合,但不能同时设置这两个集合。
标量数据类型说明labelSelector
字符串
标记 用于将挂载的卷绑定到目录。
storage
字符串
storageClass
字符串
每个分片集群分片成员所需的存储类型。 您可以将此存储类型创建为 StorageClass 对象,然后再在此对象规范中使用。
确保将 StorageClass 设置为
reclaimPolicy
以 保留 。这可确保在 持久卷声明 时保留数据 已删除。
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 针对特定范围的 节点 上的 副本集 。
为了优化读写性能,请使用节点关联性规则来限制 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 v1Core 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 v1Core API 。注意
在将容器添加到
spec.shardSpecificPodSpec.podTemplate.spec.containers
时,Kubernetes Operator 将它们添加到 Kubernetes Pod 中。这些容器附加到 Pod 中的特定分片容器。使用此设置为每个 Pod 指定 CPU 和 RAM 分配。 相关示例请参阅 GitHub 上的示例。
spec.topology
类型:字符串
Optional
默认值:
SingleCluster
定义分分片集群的拓扑结构。 无法对现有部署进行更改。 如果设立为
MultiCluster
:所有分片集群组件都必须定义
clusterSpecList
:spec.mongos.clusterSpecList
spec.configSrv.clusterSpecList
spec.shard.clusterSpecList
以下字段将被忽略,因为它们的等效值会传递给
spec.<section>.clusterSpecList
对象中的每个集群:spec.mongodsPerShardCount
定义于spec.shard.clusterSpecList.members
spec.mongosCount
定义于spec.mongos.clusterSpecList.members
spec.configServerCount
定义于spec.configSrv.clusterSpecList.members
spec.shardOverrides.memberConfig
定义于spec.shardOverrides.clusterSpecList.memberConfig
spec.shardOverrides.members
定义于spec.shardOverrides.clusterSpecList.members
spec.shardOverrides.statefulSet
定义于spec.shardOverrides.clusterSpecList.statefulSet
示例:
apiVersion: mongodb.com/v1 kind: MongoDB metadata: name: sc spec: shardCount: 3 # we don't specify mongodsPerShardCount, mongosCount and configServerCount as they don't make sense for multi-cluster topology: MultiCluster type: ShardedCluster version: 7.0.12 cloudManager: configMapRef: name: my-project credentials: my-credentials persistent: true shard: clusterSpecList: - clusterName: member-cluster-0 members: 2 # each shard will have 2 members in cluster 0, unless overriden - clusterName: member-cluster-1 members: 2 - clusterName: member-cluster-2 members: 1 shardOverrides: - shardNames: [sc-2] # this override will apply to the third shard (here, shards are indexed from 0 to 2 as we have 3 shards) clusterSpecList: - clusterName: member-cluster-0 # all other fields are optional, if not provided the fields from matching member cluster from shard.clusterSpecList will be taken by default members: 3 - clusterName: member-cluster-1 # we don't deploy this shard to member-cluster-1 # Note that it is also possible to make it explicit with members: 0 # we don't provide entry for clusterName: member-cluster-1, so it won't be deployed there - clusterName: member-cluster-2 members: 2 configSrv: clusterSpecList: - clusterName: member-cluster-0 members: 2 # config server will have 2 members in this cluster - clusterName: member-cluster-1 members: 1 - clusterName: member-cluster-2 members: 2 mongos: clusterSpecList: - clusterName: member-cluster-0 members: 2 # router will have 2 members in this cluster - clusterName: member-cluster-1 members: 1 以下字段仅与包含
topology=MultiCluster
的部署相关:spec.configSrv.clusterSpecList
类型:对象数组
如果
topology=MultiCluster
,则为必填项用于多集群分片分片集群部署的对象大量,具有以下顶级字段:
clusterName
类型:字符串
MongoDB Enterprise Kubernetes Operator 调度 StatefulSet 的集群的名称 。
externalAccess
类型:集合
用于向外部连接公开多 Kubernetes集群MongoDB 部署的规范。 要学习;了解如何从 Kubernetes集群外部连接到多 Kubernetes集群MongoDB 部署,请参阅从外部KubernetesKubernetes到多集群资源。
这些设置应用于所有集群中的服务。 要在特定集群中覆盖这些全局设置,请使用spec.clusterSpecList.externalAccess.externalService。
如果您添加
spec.externalAccess
,则 Kubernetes Operator 为副本集中的每个 Pod 创建一个外部服务。外部服务为集群中的每个 MongoDB 数据库 Pod 提供外部入口点。每个外部服务具有选择器,它将外部服务与特定 Pod 相匹配。如果添加此设置时不带任何值,Kubernetes Operator 会创建具有以下默认值的外部服务:
字段值说明Name
<pod-name>-svc-external
外部服务的名称。您无法更改此值。
Type
LoadBalancer
创建外部 LoadBalancer 服务。
Port
<Port Number>
mongod
的端口。publishNotReadyAddress
true
指定 DNS 记录 即使 Pod 尚未准备就绪,也会创建。对于任何数据库 Pod,请勿设置为
false
。注意
如果设立spec.clusterSpecList.externalAccess.externalDomain ,则外部服务会添加另一个端口 (
Port Number + 1
) 用于备份。
members
类型:数字
MongoDB 副本集中的节点数。
memberConfig
类型:集合
多分片集群MongoDB 部署中每个MongoDB分片及其成员的规范。
分片对象中元素的分片必须反映副本集成员的顺序。 示例,第一个元素会影响索引
0
的 Pod,第二个元素会影响索引1
的 Pod,依此类推。例子
请考虑以下具有三个副本集的多 Kubernetes 集群 MongoDB 部署的示例规范:
apiVersion: mongodb.com/v1 kind: MongoDBMultiCluster metadata: name: multi-replica-set spec: version: 6.0.0-ent type: ReplicaSet duplicateServiceObjects: false credentials: my-credentials opsManager: configMapRef: name: my-project clusterSpecList: - clusterName: cluster1.example.com members: 2 memberConfig: - votes: 1 priority: "0.5" tags: tag1: "value1" environment: "prod" - votes: 1 priority: "1.5" tags: tag2: "value2" environment: "prod" - clusterName: cluster2.example.com members: 1 memberConfig: - votes: 1 priority: "0.5" tags: tag1: "value1" environment: "prod" - clusterName: cluster3.example.com members: 1 memberConfig: - votes: 1 priority: "0.5" tags: tag1: "value1" environment: "prod"
podSpec.persistence
类型:集合
仅在传递给
spec.configSrv.clusterSpecList
和spec.shard.clusterSpecList
的clusterSpecItem
对象中可用。 覆盖给定集群的现有持久性配置。
statefulSet
类型:集合
为 StatefulSet 提供配置 覆盖多 Kubernetes集群MongoDB 部署中集群的每个 StatefulSet。要设立适用于多 Kubernetes集群MongoDB 部署中所有集群的全局配置,请参阅spec.statefulSet.spec。
此设置仅适用于多 Kubernetes 集群 MongoDB 部署中的副本集资源类型。
spec.duplicateServiceObjects
类型:布尔值
Optional
默认值:
true
如果拓扑结构不是
MultiCluster
,则忽略。 适用于所有分片集群组件的服务:mongos
、configSrv
和shards
。- 如果设立为
true
: - Kubernetes Operator 从每个成员集群的所有成员集群中创建所有
Pod Services
。 - 如果设立为
false
: - Kubernetes Operator 仅创建
- 如果设立为
spec.mongos.clusterSpecList
类型:对象数组
如果
topology=MultiCluster
,则为必填项用于多集群分片分片集群部署的对象大量,具有以下顶级字段:
clusterName
类型:字符串
MongoDB Enterprise Kubernetes Operator 调度 StatefulSet 的集群的名称 。
externalAccess
类型:集合
用于向外部连接公开多 Kubernetes集群MongoDB 部署的规范。 要学习;了解如何从 Kubernetes集群外部连接到多 Kubernetes集群MongoDB 部署,请参阅从外部KubernetesKubernetes到多集群资源。
这些设置应用于所有集群中的服务。 要在特定集群中覆盖这些全局设置,请使用spec.clusterSpecList.externalAccess.externalService。
如果您添加
spec.externalAccess
,则 Kubernetes Operator 为副本集中的每个 Pod 创建一个外部服务。外部服务为集群中的每个 MongoDB 数据库 Pod 提供外部入口点。每个外部服务具有选择器,它将外部服务与特定 Pod 相匹配。如果添加此设置时不带任何值,Kubernetes Operator 会创建具有以下默认值的外部服务:
字段值说明Name
<pod-name>-svc-external
外部服务的名称。您无法更改此值。
Type
LoadBalancer
创建外部 LoadBalancer 服务。
Port
<Port Number>
mongod
的端口。publishNotReadyAddress
true
指定 DNS 记录 即使 Pod 尚未准备就绪,也会创建。对于任何数据库 Pod,请勿设置为
false
。注意
如果设立spec.clusterSpecList.externalAccess.externalDomain ,则外部服务会添加另一个端口 (
Port Number + 1
) 用于备份。
members
类型:数字
MongoDB 副本集中的节点数。
memberConfig
类型:集合
多分片集群MongoDB 部署中每个MongoDB分片及其成员的规范。
分片对象中元素的分片必须反映副本集成员的顺序。 示例,第一个元素会影响索引
0
的 Pod,第二个元素会影响索引1
的 Pod,依此类推。例子
请考虑以下具有三个副本集的多 Kubernetes 集群 MongoDB 部署的示例规范:
apiVersion: mongodb.com/v1 kind: MongoDBMultiCluster metadata: name: multi-replica-set spec: version: 6.0.0-ent type: ReplicaSet duplicateServiceObjects: false credentials: my-credentials opsManager: configMapRef: name: my-project clusterSpecList: - clusterName: cluster1.example.com members: 2 memberConfig: - votes: 1 priority: "0.5" tags: tag1: "value1" environment: "prod" - votes: 1 priority: "1.5" tags: tag2: "value2" environment: "prod" - clusterName: cluster2.example.com members: 1 memberConfig: - votes: 1 priority: "0.5" tags: tag1: "value1" environment: "prod" - clusterName: cluster3.example.com members: 1 memberConfig: - votes: 1 priority: "0.5" tags: tag1: "value1" environment: "prod"
statefulSet
类型:集合
为 StatefulSet 提供配置 覆盖多 Kubernetes集群MongoDB 部署中集群的每个 StatefulSet。要设立适用于多 Kubernetes集群MongoDB 部署中所有集群的全局配置,请参阅spec.statefulSet.spec。
此设置仅适用于多 Kubernetes 集群 MongoDB 部署中的副本集资源类型。
spec.shard.clusterSpecList
类型:对象数组
如果
topology=MultiCluster
,则为必填项用于多集群分片分片集群部署的对象大量,具有以下顶级字段:
clusterName
类型:字符串
MongoDB Enterprise Kubernetes Operator 调度 StatefulSet 的集群的名称 。
externalAccess
类型:集合
用于向外部连接公开多 Kubernetes集群MongoDB 部署的规范。 要学习;了解如何从 Kubernetes集群外部连接到多 Kubernetes集群MongoDB 部署,请参阅从外部KubernetesKubernetes到多集群资源。
这些设置应用于所有集群中的服务。 要在特定集群中覆盖这些全局设置,请使用spec.clusterSpecList.externalAccess.externalService。
如果您添加
spec.externalAccess
,则 Kubernetes Operator 为副本集中的每个 Pod 创建一个外部服务。外部服务为集群中的每个 MongoDB 数据库 Pod 提供外部入口点。每个外部服务具有选择器,它将外部服务与特定 Pod 相匹配。如果添加此设置时不带任何值,Kubernetes Operator 会创建具有以下默认值的外部服务:
字段值说明Name
<pod-name>-svc-external
外部服务的名称。您无法更改此值。
Type
LoadBalancer
创建外部 LoadBalancer 服务。
Port
<Port Number>
mongod
的端口。publishNotReadyAddress
true
指定 DNS 记录 即使 Pod 尚未准备就绪,也会创建。对于任何数据库 Pod,请勿设置为
false
。注意
如果设立spec.clusterSpecList.externalAccess.externalDomain ,则外部服务会添加另一个端口 (
Port Number + 1
) 用于备份。
members
类型:数字
MongoDB 副本集中的节点数。
memberConfig
类型:集合
多分片集群MongoDB 部署中每个MongoDB分片及其成员的规范。
分片对象中元素的分片必须反映副本集成员的顺序。 示例,第一个元素会影响索引
0
的 Pod,第二个元素会影响索引1
的 Pod,依此类推。例子
请考虑以下具有三个副本集的多 Kubernetes 集群 MongoDB 部署的示例规范:
apiVersion: mongodb.com/v1 kind: MongoDBMultiCluster metadata: name: multi-replica-set spec: version: 6.0.0-ent type: ReplicaSet duplicateServiceObjects: false credentials: my-credentials opsManager: configMapRef: name: my-project clusterSpecList: - clusterName: cluster1.example.com members: 2 memberConfig: - votes: 1 priority: "0.5" tags: tag1: "value1" environment: "prod" - votes: 1 priority: "1.5" tags: tag2: "value2" environment: "prod" - clusterName: cluster2.example.com members: 1 memberConfig: - votes: 1 priority: "0.5" tags: tag1: "value1" environment: "prod" - clusterName: cluster3.example.com members: 1 memberConfig: - votes: 1 priority: "0.5" tags: tag1: "value1" environment: "prod"
podSpec.persistence
类型:集合
仅在传递给
spec.configSrv.clusterSpecList
和spec.shard.clusterSpecList
的clusterSpecItem
对象中可用。 覆盖给定集群的现有持久性配置。
statefulSet
类型:集合
为 StatefulSet 提供配置 覆盖多 Kubernetes集群MongoDB 部署中集群的每个 StatefulSet。要设立适用于多 Kubernetes集群MongoDB 部署中所有集群的全局配置,请参阅spec.statefulSet.spec。
此设置仅适用于多 Kubernetes 集群 MongoDB 部署中的副本集资源类型。
spec.shardOverrides
类型:对象数组
Optional
包含每个分片覆盖项的分片。 每个对象包含以下字段:
shardNames
必需
此覆盖适用的分片的名称。
podSpec.Persistence
Optional
定义Kubernetes Operator 如何创建持久卷并将其绑定到分片。 对于
topology=MultiCluster
,它为所有成员集群设置持久性设置。 您可以在spec.shardOverrides.clusterSpecList.persistence
中为特定成员集群定义持久性设置。additionalMongodConfig
Optional
spec.shard.additionalMongodConfig
的特定于分片的覆盖。agent
Optional
spec.shard.agent
的特定于分片的覆盖。statefulSet
Optional
spec.shardPodSpec.podTemplate
和spec.shard.clusterSpecList.statefulSet
的特定于分片的覆盖。members
Optional
仅在
topology=SingleCluster
时可用。用于覆盖spec.mongodsPerShardCount
的特定于分片的覆盖。memberConfig
Optional
仅在
topology=SingleCluster
时可用。spec.shard.memberConfig
的特定于分片的覆盖。
spec.shardPodSpec.persistence.single
类型:集合
让 Kubernetes Operator 创建持久化卷声明,并将数据、事务日志与运行日志的所有三个目录挂载到同一个持久卷。
注意
如果
spec.persistent
: true
,则必须设置此集合中的值。您可以设置此集合或
persistence.multiple
集合,但不能同时设置两者。
标量数据类型说明labelSelector
字符串
标记 用于将挂载的卷绑定到目录。
storage
字符串
storageClass
字符串
持久卷声明 中指定的存储类型 。您可以将此存储类型创建为 StorageClass 对象,然后在此 对象 中使用它 规范。
确保将 StorageClass 设置为
reclaimPolicy
以 保留 。这可确保在 持久卷声明 时保留数据 已删除。
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.prometheus.tlseSecretKeyRef
类型:对象
Optional
包含 密钥 详细信息的对象 用于 TLS 身份验证。
spec.prometheus.tlseSecretKeyRef.name
类型:字符串
可选的
标识 密钥 的人类可读标签 ,其中包含用于 TLS 身份验证的密码。如果要将 Prometheus 与 MongoDB 资源一起使用并且想要使用TLS身份验证,则必须指定此设置。
安全设置
以下安全设置仅适用于副本集和分片集群资源类型:
spec.security.tls.enabled
类型:布尔值
默认值:
false
重要
从 Kubernetes Operator 版本1.19开始,
spec.security.tls.enabled
已弃用。 要启用TLS ,请为spec.security.certsSecretPrefix
设置提供一个值。使用 TLS 证书对以下设备之间的通信进行加密:
副本集或分片集群配置中的 MongoDB 主机
客户端(
mongo
shell 、驱动程序、 MongoDB Compass等)和MongoDB部署
默认情况下,
net.ssl.mode
设置为requireSSL
。 要更改用于客户端和数据库连接的TLS模式,请参阅spec.additionalMongodConfig.net.ssl.mode
。
spec.security.tls.ca
类型:字符串
提供 ConfigMap 的名称 存储
MongoDB
资源的 CA。重要
如果您使用自定义 CA 签署
MongoDB
资源的 TLS 证书,则必须指定此参数。Kubernetes Operator 要求您在 ConfigMap 中将
MongoDB
资源证书命名为ca-pem
。
spec.security.certsSecretPrefix
类型:字符串
要作为前缀添加到您创建的 Kubernetes Secrets 中的文本,这些密钥包含了副本集或分片集群的 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 身份验证所必需的。
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 身份验证所需。
密钥 名称 包含连接到 LDAP 服务器时 MongoDB 绑定的密码。
秘密 必须仅包含一个用于存储密码的
password
字段。
spec.security.authentication.ldap.authzQueryTemplate
类型:字符串
是 LDAP 授权所必需的。
RFC4515 和 RFC4516 MongoDB 执行的 LDAP 格式查询 URL 模板,用于获取用户所属的 LDAP 群组。查询相对于
spec.security.authentication.ldap.servers
中指定的一个或多个主机。 您可以在模板中使用以下词元:{USER}
- 将经过身份验证的用户名或
transformed
用户名替换到 LDAP 查询中。
{PROVIDED_USER}
- 在 LDAP 查询中替换所提供的用户名(在身份验证或 LDAP 转换之前)。(从 MongoDB 版本 4.2 开始提供)
spec.security.authentication.agents.automationLdapGroupDN
类型:字符串
MongoDB 助手用户所属的 LDAP 组的可分辨名称 (DN)。
在以下情况下需要使用此设置:
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 Agent密钥 包含 的 TLS 证书。如果省略,则默认为
agent-certs
。此密钥必须包含以下键,其值是可以由服务器验证的 TLS 证书:
mms-automation-agent-pem
mms-backup-agent-pem
mms-monitoring-agent-pem
必须在部署 Kubernetes Operator 的同一命名空间中创建此密钥:
kubectl create secret generic agent-certs \ --from-file=mms-automation-agent-pem=<automation-cert.pem> \ --from-file=mms-backup-agent-pem=<backup-cert.pem> \ --from-file=mms-monitoring-agent-pem=<monitoring-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
类型:集合
StatefulSet 规范 MongoDB Enterprise Kubernetes Operator 为
MongoDB
资源创建的。
spec.statefulSet.spec.serviceName
类型:字符串
默认值:
<resource_name>-svc
和<resource_name>-svc-external
要为 StatefulSet 创建或用于 StatefulSet 的 Kubernetes 服务的名称。如果具有该名称的服务已存在,MongoDB Enterprise Kubernetes Operator 不会删除或重新创建该服务。该设置允许您创建自己的自定义服务,并让 Kubernetes Operator 重新使用这些服务。