注意
对于此页面上提到的所有 Ops Manager,您都可以将其替换为 Cloud Manager。
Kubernetes Operator 的 MongoDB控制器根据您写入的规范文件创建Kubernetes StatefulSet。
Kubernetes Operator 在 Kubernetes 中创建 MongoDB 专用资源作为自定义资源。
要管理这些自定义资源,请使用以下进程:
创建或更新
MongoDB
资源规范。指导MongoDB Controllers for 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的Kubernetes服务的名称。如果具有此名称的服务已存在, MongoDB Controllers for 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: "8.0.0" 8 service: my-service 9 10 opsManager: 11 configMapRef: 12 name: my-project 13 credentials: my-credentials 14 type: Standalone 15 16 persistent: true 17 agent: 18 startupOptions: 19 maxLogFiles: "30" 20 dialTimeoutSeconds: "40" 21 ...
spec.podSpec
类型:对象
包含MongoDB CustomResourceDefinition 规范的对象 Pod。
spec.externalAccess
类型:集合
适用于外部连接的集群公开规范。要了解如何从 Kubernetes 集群外部连接到您的 MongoDB 资源,请参阅从 Kubernetes 外部连接到 MongoDB 数据库资源。
如果您添加
spec.externalAccess
,则 Kubernetes Operator 为副本集中的每个 Pod 创建一个外部服务。外部服务为集群中的每个 MongoDB 数据库 Pod 提供外部入口点。每个外部服务具有选择器,它将外部服务与特定 Pod 相匹配。如果添加此设置时不带任何值,Kubernetes Operator 会创建具有以下默认值的外部服务:
字段值说明Name
<pod-name>-svc-external
外部服务的名称。您无法更改此值。
Type
LoadBalancer
创建外部 LoadBalancer 服务。
Port
<Port Number>
mongod
的端口。publishNotReadyAddress
true
指定 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
类型:集合
MongoDB Controllers for Kubernetes Operator 为MongoDB 数据库资源创建的Kubernetes Pod 的模板。
模板值优先于
spec.podSpec
中指定的值。注意
Kubernetes Operator 不会验证您在
spec.podSpec.podTemplate
中提供的字段。
spec.podSpec.podTemplate.metadata
类型:集合
Kubernetes Operator 的MongoDB控制器为MongoDB 数据库资源创建的Kubernetes Pod 的元数据。
要查看可以添加到
spec.podSpec.podTemplate.metadata
的字段,请参阅 Kubernetes 文档。
spec.podSpec.podTemplate.spec
类型:集合
Kubernetes Operator 的MongoDB控制器为MongoDB 数据库资源创建的Kubernetes Pod 的规范。
要查看哪些字段可以添加到
spec.podSpec.podTemplate.spec
,请参阅Kubernetes PodSpec 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: "8.0.0" 9 type: ReplicaSet 10 opsManager: 11 configMapRef: 12 name: <configMap.metadata.name> 13 credentials: <mycredentials> 14 persistent: true 15 security: 16 tls: 17 enabled: true 18 connectivity: 19 replicaSetHorizons: 20 - "example-website": "web1.example.com:30907" 21 - "example-website": "web2.example.com:32350" 22 - "example-website": "web3.example.com:31185" 23 ...
spec.externalAccess.externalDomain
类型:字符串
用于向外部公开您的副本集部署的外部域。
默认情况下,每个副本集节点将 Kubernetes Pod 的 FQDN (
*.svc.cluster.local
) 作为默认主机名。不过,如果您将一个外部域添加到该设置中,副本集将使用作为指定域的子域的主机名。该主机名使用以下格式:<replica-set-name>-<pod-idx>.<externalDomain>
例如:
replica-set-1.example.com
使用此设置部署副本集后, Kubernetes Operator 使用带有外部域的主机名来覆盖MongoDB Ops Manager自动化配置中的
processes[n].hostname
字段。 然后, MongoDB Agent会使用此主机名连接到mongod
。要指定用于连接到副本集的其他主机名,可以使用
spec.connectivity.replicaSetHorizons
设置。 但是,以下连接仍使用带有外部域的主机名:警告:指定此字段会更改MongoDB Ops Manager注册
mongod
进程的方式。对于运行的副本集部署,您无法更改此字段或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: "8.0.0" 8 type: ShardedCluster 9 opsManager: 10 configMapRef: 11 name: my-project 12 credentials: my-credentials 13 persistent: true 14 shardCount: 2 15 mongodsPerShardCount: 3 16 mongosCount: 2 17 configServerCount: 1 18 19 mongos: 20 agent: 21 startupOptions: 22 maxLogFiles: "30" 23 24 configSrv: 25 agent: 26 startupOptions: 27 dialTimeoutSeconds: "40" 28 shard: 29 agent: 30 startupOptions: 31 serverSelectionTimeoutSeconds: "20" 32 ...
spec.configSrvPodSpec
类型:对象
包含MongoDB CustomResourceDefinition 规范的对象 配置服务器Pod。
spec.configSrvPodSpec.persistence.single
类型:集合
让 Kubernetes Operator 创建持久化卷声明,并将数据、事务日志与运行日志的所有三个目录挂载到同一个持久卷。
注意
如果
spec.persistent
: true
,则必须设置此集合中的值。您可以设置此集合或
persistence.multiple
集合,但不能同时设置两者。
标量数据类型说明labelSelector
字符串
标记 用于将挂载的卷绑定到目录。
storage
字符串
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 Controllers for 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 Controllers for Kubernetes Operator 为每个配置服务器成员创建的Kubernetes Pod 的元数据。
要查看可以添加到
spec.configSrvPodSpec.podTemplate.metadata
的字段,请参阅 Kubernetes 文档。
spec.configSrvPodSpec.podTemplate.spec
类型:集合
Kubernetes Operator 的MongoDB控制器为每个配置服务器成员创建的Kubernetes Pod 的规范。
要查看哪些字段可以添加到
spec.configSrvPodSpec.podTemplate.spec
,请参阅Kubernetes PodSpec 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: "8.0.0" 8 type: ShardedCluster 9 opsManager: 10 configMapRef: 11 name: my-project 12 credentials: my-credentials 13 persistent: true 14 shardCount: 2 15 mongodsPerShardCount: 3 16 mongosCount: 2 17 configServerCount: 1 18 19 mongos: 20 agent: 21 startupOptions: 22 maxLogFiles: "30" 23 24 configSrv: 25 agent: 26 startupOptions: 27 dialTimeoutSeconds: "40" 28 shard: 29 agent: 30 startupOptions: 31 serverSelectionTimeoutSeconds: "20" 32 ...
spec.mongosPodSpec
类型:对象
包含MongoDB CustomResourceDefinition 规范的对象 mongos Pod。
spec.mongosPodSpec.podTemplate
类型:集合
模板 Kubernetes Operator 的MongoDB控制器为每个
mongos
实例创建的Kubernetes 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
类型:集合
Kubernetes Operator 的MongoDB控制器为每个
mongos
实例创建的Kubernetes Pod 的元数据。要查看可以添加到
spec.mongosPodSpec.podTemplate.metadata
的字段,请参阅 Kubernetes 文档。
spec.mongosPodSpec.podTemplate.spec
类型:集合
Kubernetes Operator 的MongoDB控制器为每个
mongos
实例创建的Kubernetes Pod 的规范。要查看哪些字段可以添加到
spec.mongosPodSpec.podTemplate.spec
,请参阅Kubernetes PodSpec 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: "8.0.0" 8 type: ShardedCluster 9 opsManager: 10 configMapRef: 11 name: my-project 12 credentials: my-credentials 13 persistent: true 14 shardCount: 2 15 mongodsPerShardCount: 3 16 mongosCount: 2 17 configServerCount: 1 18 19 mongos: 20 agent: 21 startupOptions: 22 maxLogFiles: "30" 23 24 configSrv: 25 agent: 26 startupOptions: 27 dialTimeoutSeconds: "40" 28 shard: 29 agent: 30 startupOptions: 31 serverSelectionTimeoutSeconds: "20" 32 ...
spec.shardPodSpec
类型:对象
包含MongoDB CustomResourceDefinition 规范的对象 分片 。
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 Controllers for 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
类型:集合
Kubernetes Operator 的MongoDB控制器为每个分片集群分片成员创建的Kubernetes Pod 的元数据。
要查看可以添加到
spec.shardPodSpec.podTemplate.metadata
的字段,请参阅 Kubernetes 文档。
spec.shardPodSpec.podTemplate.spec
类型:集合
Kubernetes Operator 的MongoDB控制器为每个分片集群分片成员创建的Kubernetes Pod 的规范。
要查看哪些字段可以添加到
spec.shardPodSpec.podTemplate.spec
,请参阅Kubernetes PodSpec v1Core API 。注意
当您将容器添加到
spec.shardPodSpec.podTemplate.spec.containers
时,Kubernetes Operator 会将它们添加到 Kubernetes Pod 中。 这些容器会附加到 Pod 中的每个分片集群的分片成员容器。使用此设置为每个 Pod 指定 CPU 和 RAM 分配。 相关示例请参阅 GitHub 上的示例。
spec.shardSpecificPodSpec
类型:数组
包含每个分片 StatefulSet 覆盖配置的列表。
spec.shardSpecificPodSpec.podTemplate
类型:集合
MongoDB Controllers for 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 Controllers for Kubernetes Operator 为特定分片创建的Kubernetes Pod 的元数据。
要查看可以添加到
spec.shardSpecificPodSpec.podTemplate.metadata
的字段,请参阅 Kubernetes 文档。
spec.shardSpecificPodSpec.podTemplate.spec
类型:集合
Kubernetes Operator 的MongoDB控制器为特定分片创建的Kubernetes Pod 的规范。
要查看哪些字段可以添加到
spec.shardSpecificPodSpec.podTemplate.spec
,请参阅Kubernetes PodSpec 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 Controllers for Kubernetes Operator 在其中调度StatefulSet的集群的名称。
externalAccess
类型:集合
用于向外部连接公开多 Kubernetes集群MongoDB 部署的规范。 要学习;了解如何从 Kubernetes集群外部连接到多 Kubernetes集群MongoDB 部署,请参阅从外部KubernetesKubernetes到多集群资源。
这些设置应用于所有集群中的服务。 要在特定集群中覆盖这些全局设置,请使用spec.clusterSpecList.externalAccess.externalService。
如果您添加
spec.externalAccess
,则 Kubernetes Operator 为副本集中的每个 Pod 创建一个外部服务。外部服务为集群中的每个 MongoDB 数据库 Pod 提供外部入口点。每个外部服务具有选择器,它将外部服务与特定 Pod 相匹配。如果添加此设置时不带任何值,Kubernetes Operator 会创建具有以下默认值的外部服务:
字段值说明Name
<pod-name>-svc-external
外部服务的名称。您无法更改此值。
Type
LoadBalancer
创建外部 LoadBalancer 服务。
Port
<Port Number>
mongod
的端口。publishNotReadyAddress
true
指定 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: 8.0.0 type: ReplicaSet duplicateServiceObjects: false credentials: my-credentials opsManager: configMapRef: name: my-project clusterSpecList: - clusterName: cluster1.example.com members: 2 memberConfig: - votes: 1 priority: "0.5" tags: tag1: "value1" environment: "prod" - votes: 1 priority: "1.5" tags: tag2: "value2" environment: "prod" - clusterName: cluster2.example.com members: 1 memberConfig: - votes: 1 priority: "0.5" tags: tag1: "value1" environment: "prod" - clusterName: cluster3.example.com members: 1 memberConfig: - votes: 1 priority: "0.5" tags: tag1: "value1" environment: "prod"
podSpec.persistence
类型:集合
仅在传递给
spec.configSrv.clusterSpecList
和spec.shard.clusterSpecList
的clusterSpecItem
对象中可用。 覆盖给定集群的现有持久性配置。
statefulSet
类型:集合
为 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 Controllers for Kubernetes Operator 在其中调度StatefulSet的集群的名称。
externalAccess
类型:集合
用于向外部连接公开多 Kubernetes集群MongoDB 部署的规范。 要学习;了解如何从 Kubernetes集群外部连接到多 Kubernetes集群MongoDB 部署,请参阅从外部KubernetesKubernetes到多集群资源。
这些设置应用于所有集群中的服务。 要在特定集群中覆盖这些全局设置,请使用spec.clusterSpecList.externalAccess.externalService。
如果您添加
spec.externalAccess
,则 Kubernetes Operator 为副本集中的每个 Pod 创建一个外部服务。外部服务为集群中的每个 MongoDB 数据库 Pod 提供外部入口点。每个外部服务具有选择器,它将外部服务与特定 Pod 相匹配。如果添加此设置时不带任何值,Kubernetes Operator 会创建具有以下默认值的外部服务:
字段值说明Name
<pod-name>-svc-external
外部服务的名称。您无法更改此值。
Type
LoadBalancer
创建外部 LoadBalancer 服务。
Port
<Port Number>
mongod
的端口。publishNotReadyAddress
true
指定 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: 8.0.0 type: ReplicaSet duplicateServiceObjects: false credentials: my-credentials opsManager: configMapRef: name: my-project clusterSpecList: - clusterName: cluster1.example.com members: 2 memberConfig: - votes: 1 priority: "0.5" tags: tag1: "value1" environment: "prod" - votes: 1 priority: "1.5" tags: tag2: "value2" environment: "prod" - clusterName: cluster2.example.com members: 1 memberConfig: - votes: 1 priority: "0.5" tags: tag1: "value1" environment: "prod" - clusterName: cluster3.example.com members: 1 memberConfig: - votes: 1 priority: "0.5" tags: tag1: "value1" environment: "prod"
statefulSet
类型:集合
为 StatefulSet 提供配置 覆盖多 Kubernetes集群MongoDB 部署中集群的每个 StatefulSet。要设立适用于多 Kubernetes集群MongoDB 部署中所有集群的全局配置,请参阅spec.statefulSet.spec。
此设置仅适用于多 Kubernetes 集群 MongoDB 部署中的副本集资源类型。
spec.shard.clusterSpecList
注意
此字段专门用于多集群分片集群部署。
类型:对象数组
如果
topology=MultiCluster
,则为必填项用于多集群分片分片集群部署的对象大量,具有以下顶级字段:
clusterName
类型:字符串
MongoDB Controllers for Kubernetes Operator 在其中调度StatefulSet的集群的名称。
externalAccess
类型:集合
用于向外部连接公开多 Kubernetes集群MongoDB 部署的规范。 要学习;了解如何从 Kubernetes集群外部连接到多 Kubernetes集群MongoDB 部署,请参阅从外部KubernetesKubernetes到多集群资源。
这些设置应用于所有集群中的服务。 要在特定集群中覆盖这些全局设置,请使用spec.clusterSpecList.externalAccess.externalService。
如果您添加
spec.externalAccess
,则 Kubernetes Operator 为副本集中的每个 Pod 创建一个外部服务。外部服务为集群中的每个 MongoDB 数据库 Pod 提供外部入口点。每个外部服务具有选择器,它将外部服务与特定 Pod 相匹配。如果添加此设置时不带任何值,Kubernetes Operator 会创建具有以下默认值的外部服务:
字段值说明Name
<pod-name>-svc-external
外部服务的名称。您无法更改此值。
Type
LoadBalancer
创建外部 LoadBalancer 服务。
Port
<Port Number>
mongod
的端口。publishNotReadyAddress
true
指定 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: 8.0.0 type: ReplicaSet duplicateServiceObjects: false credentials: my-credentials opsManager: configMapRef: name: my-project clusterSpecList: - clusterName: cluster1.example.com members: 2 memberConfig: - votes: 1 priority: "0.5" tags: tag1: "value1" environment: "prod" - votes: 1 priority: "1.5" tags: tag2: "value2" environment: "prod" - clusterName: cluster2.example.com members: 1 memberConfig: - votes: 1 priority: "0.5" tags: tag1: "value1" environment: "prod" - clusterName: cluster3.example.com members: 1 memberConfig: - votes: 1 priority: "0.5" tags: tag1: "value1" environment: "prod"
podSpec.persistence
类型:集合
仅在传递给
spec.configSrv.clusterSpecList
和spec.shard.clusterSpecList
的clusterSpecItem
对象中可用。 覆盖给定集群的现有持久性配置。
statefulSet
类型:集合
为 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.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 开始提供)
提示
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 Agent密钥 包含 的 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: "8.0.0" 9 type: ReplicaSet 10 opsManager: 11 configMapRef: 12 name: <configMap.metadata.name> 13 credentials: <mycredentials> 14 persistent: true 15 security: 16 authentication: 17 enabled: true 18 modes: 19 - "SCRAM" 20 roles: 21 - role: "customRole" 22 db: admin 23 privileges: 24 - actions: 25 - insert 26 resource: 27 collection: cats 28 db: pets 29 - actions: 30 - insert 31 - find 32 resource: 33 collection: dogs 34 db: pets 35 ...
spec.security.roles.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: "8.0.0" service: my-service opsManager: # Alias of cloudManager configMapRef: name: my-project credentials: my-credentials persistent: true type: Standalone additionalMongodConfig: systemLog: logAppend: true verbosity: 4 operationProfiling: mode: slowOp podSpec: persistence: single: storage: "12Gi" storageClass: standard labelSelector: matchExpressions: - {key: environment, operator: In, values: [dev]} podTemplate: metadata: labels: label1: mycustomlabel 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: "8.0.0" 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: "8.0.0" 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
类型:集合
Kubernetes Operator 的MongoDB控制器为
MongoDB
资源创建的StatefulSet规范。
spec.statefulSet.spec.serviceName
类型:字符串
默认值:
<resource_name>-svc
和<resource_name>-svc-external
要创建或用于StatefulSet的Kubernetes服务的名称。如果具有此名称的服务已存在, MongoDB Controllers for Kubernetes Operator 不会删除或重新创建该服务。通过此设置,您可以创建自己的自定义服务,并允许Kubernetes Operator 重复使用这些服务。