Docs 菜单
Docs 主页
/
MongoDB Enterprise Kubernetes Operator
/ /

为 MongoDB Enterprise Kubernetes Operator 部署设置范围

在此页面上

  • Kubernetes Operator 部署范围
  • 后续步骤

在安装 Kubernetes Operator 之前,您可以设置 Kubernetes Operator 部署的范围。 范围取决于您选择在其中部署 Ops Manager 和 MongoDB资源的命名空间。

您可以设置以下范围之一:

  • Operator 使用与资源相同的单一命名空间 (默认)

  • 操作符使用命名空间的子集

  • Operator 使用集群范围的作用域

您可以将 Kubernetes Operator 的范围设置为使用相同的 命名空间 作为资源。在这种情况下,Kubernetes MongoDB Ops ManagerOperatorMongoDB 会监视同一 命名空间 中的 和 资源 。

当您安装Kubernetes Operator 时,它会使用默认命名空间。

您可以将 Kubernetes Operator 的范围设置为使用一个或多个 命名空间 与 Kubernetes Operator 资源使用的命名空间不同。在这种情况下,Kubernetes Operator 会监视MongoDB Ops Manager 和MongoDB 命名空间 子集中的 资源 您指定的。

要安装具有此范围的 Kubernetes 操作符 instances,请将helm操作符.watchNamespace结合使用参数。

在单个 Kubernetes 操作符实例监视不同集群资源类型的部署中,监视命名空间子集非常有用。例如,您可以将 Kubernetes 操作符 配置为监视一个命名空间子集中的MongoDB资源,并监视另一命名空间子集中的MongoDBMultiCluster资源。为了避免在资源协调期间出现竞争条件,对于您希望 Kubernetes 操作符监视的每种自定义资源类型,请确保将范围设置为命名空间的不同子集。

按照helm的相关安装说明进行操作,但在Operator.watchNamespace中指定一个或多个命名空间 Kubernetes Operator 要监视的参数:

# Watch one namespace
helm install enterprise-operator mongodb/enterprise-operator \
--set operator.watchNamespace='namespace-to-watch' <...>
# Watch both namespace-a and namespace-b
helm install enterprise-operator mongodb/enterprise-operator \
--set operator.watchNamespace="namespace-a\,namespace-b"
# Operator with name `mongodb-enterprise-operator-qa-envs` will
# watch ns-dev, ns-qa and ns-uat namespaces
helm install mongodb-enterprise-operator-qa-envs mongodb/enterprise-operator \
--set operator.watchNamespace="ns-dev\,ns-qa\,ns-uat"
# Operator with name `mongodb-enterprise-operator-staging` will
# watch ns-staging and ns-pre-prod
helm install mongodb-operator helm-chart --set operator.watchNamespace="ns-staging\,ns-pre-prod" mongodb-enterprise-operator-staging

安装 Kubernetes Operator 以监控一个或多个命名空间(部署 Kubernetes Operator 的命名空间以外)中的资源时:

  1. 创建以下资源:

    • ClusterRole 可访问多种资源。有关完整的资源定义,请参阅 Operator-roles.yaml 示例。这是集群范围的资源。

    • 创建 ClusterRoleBinding 链接 ClusterRole 和 ServiceAccount。此clusterRoleBinding将绑定您使用 Kubernetes Operator 在安装它的命名空间上使用的 ServiceAccount 创建的clusterRole

  2. 包括 ClusterRole ClusterRoleBinding 在安装过程中应用的默认配置文件中。

以下示例说明了 ClusterRole 如何 和 ClusterRoleBinding 在集群中协同工作。

假设您在mongodb命名空间中创建一个 ServiceAccount,然后在此命名空间中安装 Kubernetes 操作符。Kubernetes 操作符 使用此 ServiceAccount。

要将 Kubernetes 操作符范围设置为监视命名空间ns1ns2 ,请执行以下操作:

  1. 获取 集群管理员权限。

  2. 使用这些权限,创建集群范围内的非命名 ClusterRole

  3. 创建 ClusterRoleBinding 位于三个命名空间中:mongodbns1ns2 。此 ClusterRoleBinding 将绑定 ClusterRole 到 命名空间中的 ServiceAccount。mongodbclusterRoleBinding将允许部署在mongodb命名空间中的 Kubernetes Operator 访问目标命名空间的clusterRole中描述的资源,即mongodbns1ns2中描述的资源。

另请参阅Operator.watchNamespace。

您可以将 Kubernetes Operator 的作用域设置为 Kubernetes 集群。 在这种情况下,Kubernetes MongoDB Ops ManagerOperatorMongoDB 会监视所有 命名空间 中的 和 资源 在Kubernetes 集群中。

重要

对于每个 Kubernetes 集群,您只能部署一个具有集群范围范围的 Kubernetes Operator 实例。

要为 Kubernetes Operator 设置集群范围的作用域,请按照您的首选安装方法的说明进行操作。

  1. 使用 mongodb-enterprise.yaml MongoDB Enterprise Kubernetes Operator GitHub 存储库中 的示例 YAML 文件。

  2. spec.template.spec.containers.name.env.name:WATCH_NAMESPACE mongodb-enterprise.yaml "*"中设置 到 。您必须在" *YAML 文件中用双引号 ( ) 将星号 ( ) 括起来。

    WATCH_NAMESPACE: "*"
  3. mongodb-enterprise.yaml 中 ,更改:

    kind: Role
    apiVersion: rbac.authorization.k8s.io/v1
    metadata:
    name: mongodb-enterprise-operator

    至:

    kind: ClusterRole
    apiVersion: rbac.authorization.k8s.io/v1
    metadata:
    name: mongodb-enterprise-operator
  4. 将以下代码添加到刚刚修改的ClusterRole中:

    - apiGroups:
    - ""
    resources:
    - namespaces
    verbs:
    - list
    - watch
  5. mongodb-enterprise.yaml 中 ,更改:

    kind: RoleBinding
    apiVersion: rbac.authorization.k8s.io/v1
    metadata:
    name: mongodb-enterprise-operator
    namespace: mongodb
    roleRef:
    apiGroup: rbac.authorization.k8s.io
    kind: Role
    name: mongodb-enterprise-operator
    subjects:
    - kind: ServiceAccount
    name: mongodb-enterprise-operator
    namespace: mongodb

    至:

    kind: ClusterRoleBinding
    apiVersion: rbac.authorization.k8s.io/v1
    metadata:
    name: mongodb-enterprise-operator
    namespace: mongodb
    roleRef:
    apiGroup: rbac.authorization.k8s.io
    kind: ClusterRole
    name: mongodb-enterprise-operator
    subjects:
    - kind: ServiceAccount
    name: mongodb-enterprise-operator
    namespace: mongodb
  6. mongodb-enterprise.yaml文件中,将<namespace>值更改为您希望 Kubernetes Operator 部署资源并应用YAML文件的命名空间。

    1---
    2kind: ServiceAccount
    3apiVersion: v1
    4metadata:
    5 name: mongodb-enterprise-appdb
    6 namespace: <namespace>
    7---
    8kind: ServiceAccount
    9apiVersion: v1
    10metadata:
    11 name: mongodb-enterprise-database-pods
    12 namespace: <namespace>
    13---
    14kind: ServiceAccount
    15apiVersion: v1
    16metadata:
    17 name: mongodb-enterprise-ops-manager
    18 namespace: <namespace>
    19---
    20kind: Role
    21apiVersion: rbac.authorization.k8s.io/v1
    22metadata:
    23 name: mongodb-enterprise-appdb
    24 namespace: <namespace>
    25rules:
    26 - apiGroups:
    27 - ""
    28 resources:
    29 - secrets
    30 verbs:
    31 - get
    32 - apiGroups:
    33 - ""
    34 resources:
    35 - pods
    36 verbs:
    37 - patch
    38---
    39kind: RoleBinding
    40apiVersion: rbac.authorization.k8s.io/v1
    41metadata:
    42 name: mongodb-enterprise-appdb
    43 namespace: <namespace>
    44roleRef:
    45 apiGroup: rbac.authorization.k8s.io
    46 kind: Role
    47 name: mongodb-enterprise-appdb
    48subjects:
    49 - kind: ServiceAccount
    50 name: mongodb-enterprise-appdb
    51 namespace: <namespace>
    52...
  7. 创建本地 Kubernetes 服务帐号 :

    为每个命名空间创建以下部分或全部本地 Kubernetes 服务帐户 :

    • 如果要在命名空间中部署 MongoDB 实例,请使用mongodb-enterprise-database-pods

    • 如果要在命名空间中部署 Ops Manager,请使用mongodb-enterprise-appdbmongodb-enterprise-ops-manager

    复制并粘贴适用的示例,并将<namespace>值替换为标识命名空间的标签。

    ---
    kind: ServiceAccount
    apiVersion: v1
    metadata:
    name: mongodb-enterprise-database-pods
    namespace: <namespace>
    ---
    kind: ServiceAccount
    apiVersion: v1
    metadata:
    name: mongodb-enterprise-appdb
    namespace: <namespace>
    ---
    kind: ServiceAccount
    apiVersion: v1
    metadata:
    name: mongodb-enterprise-ops-manager
    namespace: <namespace>

在部署 Kubernetes Operator 之前,请配置以下项目:

  1. 配置 Kubernetes Operator 以监视所有命名空间:

    helm install enterprise-operator mongodb/enterprise-operator \
    --set operator.watchNamespace="*"
  2. 创建本地 Kubernetes 服务帐号 :

    为每个命名空间创建以下部分或全部本地 Kubernetes 服务帐户 :

    • 如果要在命名空间中部署 MongoDB 实例,请使用mongodb-enterprise-database-pods

    • 如果要在命名空间中部署 Ops Manager,请使用mongodb-enterprise-appdbmongodb-enterprise-ops-manager

    复制并粘贴适用的示例,并将<namespace>值替换为标识命名空间的标签。

    helm template mongodb/enterprise-operator \
    --set operator.namespace=<metadata.namespace> \
    --show-only templates/database-roles.yaml | kubectl apply -f -

在部署 Kubernetes Operator 之前,请配置以下项目:

  1. 使用 mongodb-enterprise-openshift.yaml MongoDB Enterprise Kubernetes Operator GitHub 存储库中 的示例 YAML 文件。

  2. mongodb-enterprise-openshift.yaml 中设置spec.template.spec.containers.name.env.name:WATCH_NAMESPACE"*" 到 。您必须在" *YAML 文件中用双引号 ( ) 将星号 ( ) 括起来。

    WATCH_NAMESPACE: "*"
  3. 为这些帐户创建相应的角色。在 mongodb-enterprise-openshift.yaml ,更改:

    kind: Role
    apiVersion: rbac.authorization.k8s.io/v1
    metadata:
    name: enterprise-operator

    至:

    kind: ClusterRole
    apiVersion: rbac.authorization.k8s.io/v1
    metadata:
    name: enterprise-operator
  4. 将以下代码添加到刚刚修改的ClusterRole中:

    - apiGroups:
    - ""
    resources:
    - namespaces
    verbs:
    - list
    - watch
  5. mongodb-enterprise-openshift.yaml ,更改:

    kind: RoleBinding
    apiVersion: rbac.authorization.k8s.io/v1
    metadata:
    name: enterprise-operator
    namespace: mongodb
    roleRef:
    apiGroup: rbac.authorization.k8s.io
    kind: Role
    name: enterprise-operator
    subjects:
    - kind: ServiceAccount
    name: enterprise-operator
    namespace: mongodb

    至:

    kind: ClusterRoleBinding
    apiVersion: rbac.authorization.k8s.io/v1
    metadata:
    name: enterprise-operator
    namespace: mongodb
    roleRef:
    apiGroup: rbac.authorization.k8s.io
    kind: ClusterRole
    name: enterprise-operator
    subjects:
    - kind: ServiceAccount
    name: enterprise-operator
    namespace: mongodb
  6. 仅在要部署 Kubernetes Operator 的命名空间中创建密钥。如果您在多个命名空间中或在集群范围内部署 MongoDB 资源,Kubernetes Operator 会在所有受监视的命名空间之间同步密钥。要了解更多信息,请参阅Helm 安装设置中的registry.imagePullSecrets设置。

    mongodb-enterprise.yaml 文件中,将 替换为要安装<namespace> Kubernetes Operator 的命名空间。使用 oc 或 OpenShift Container Platform 用户界面应用生成的 YAML 文件。

    1---
    2kind: ServiceAccount
    3apiVersion: v1
    4metadata:
    5 name: mongodb-enterprise-appdb
    6 namespace: <namespace>
    7---
    8kind: ServiceAccount
    9apiVersion: v1
    10metadata:
    11 name: mongodb-enterprise-database-pods
    12 namespace: <namespace>
    13---
    14kind: ServiceAccount
    15apiVersion: v1
    16metadata:
    17 name: mongodb-enterprise-ops-manager
    18 namespace: <namespace>
    19---
    20kind: Role
    21apiVersion: rbac.authorization.k8s.io/v1
    22metadata:
    23 name: mongodb-enterprise-appdb
    24 namespace: <namespace>
    25rules:
    26 - apiGroups:
    27 - ""
    28 resources:
    29 - secrets
    30 verbs:
    31 - get
    32 - apiGroups:
    33 - ""
    34 resources:
    35 - pods
    36 verbs:
    37 - patch
    38---
    39kind: RoleBinding
    40apiVersion: rbac.authorization.k8s.io/v1
    41metadata:
    42 name: mongodb-enterprise-appdb
    43 namespace: <namespace>
    44roleRef:
    45 apiGroup: rbac.authorization.k8s.io
    46 kind: Role
    47 name: mongodb-enterprise-appdb
    48subjects:
    49 - kind: ServiceAccount
    50 name: mongodb-enterprise-appdb
    51 namespace: <namespace>
    52...
  7. 创建本地 Kubernetes 服务帐号 :

    为每个命名空间创建以下部分或全部本地 Kubernetes 服务帐户 :

    • 如果要在命名空间中部署 MongoDB 实例,请使用mongodb-enterprise-database-pods

    • 如果要在命名空间中部署 Ops Manager,请使用mongodb-enterprise-appdbmongodb-enterprise-ops-manager

    复制并粘贴适用的示例,并将<namespace>值替换为标识命名空间的标签。

在部署 Kubernetes Operator 之前,请配置以下项目:

  1. 配置 Kubernetes Operator 以监视所有命名空间:

    helm install enterprise-operator mongodb/enterprise-operator \
    --set operator.watchNamespace="*" \
  2. 仅在要部署 Kubernetes Operator 的命名空间中创建密钥。如果您在多个命名空间中或在集群范围内部署 MongoDB 资源,Kubernetes Operator 会在所有受监视的命名空间之间同步密钥。要了解更多信息,请参阅Helm 安装设置中的registry.imagePullSecrets设置。

    mongodb-enterprise.yaml 文件中,将 替换为要安装<namespace> Kubernetes Operator 的命名空间。使用 oc 或 OpenShift Container Platform 用户界面应用生成的 YAML 文件。

    1---
    2kind: ServiceAccount
    3apiVersion: v1
    4metadata:
    5 name: mongodb-enterprise-appdb
    6 namespace: <namespace>
    7---
    8kind: ServiceAccount
    9apiVersion: v1
    10metadata:
    11 name: mongodb-enterprise-database-pods
    12 namespace: <namespace>
    13---
    14kind: ServiceAccount
    15apiVersion: v1
    16metadata:
    17 name: mongodb-enterprise-ops-manager
    18 namespace: <namespace>
    19---
    20kind: Role
    21apiVersion: rbac.authorization.k8s.io/v1
    22metadata:
    23 name: mongodb-enterprise-appdb
    24 namespace: <namespace>
    25rules:
    26 - apiGroups:
    27 - ""
    28 resources:
    29 - secrets
    30 verbs:
    31 - get
    32 - apiGroups:
    33 - ""
    34 resources:
    35 - pods
    36 verbs:
    37 - patch
    38---
    39kind: RoleBinding
    40apiVersion: rbac.authorization.k8s.io/v1
    41metadata:
    42 name: mongodb-enterprise-appdb
    43 namespace: <namespace>
    44roleRef:
    45 apiGroup: rbac.authorization.k8s.io
    46 kind: Role
    47 name: mongodb-enterprise-appdb
    48subjects:
    49 - kind: ServiceAccount
    50 name: mongodb-enterprise-appdb
    51 namespace: <namespace>
    52...
  3. 创建本地 Kubernetes 服务帐号 :

    为每个命名空间创建以下部分或全部本地 Kubernetes 服务帐户 :

    • 如果要在命名空间中部署 MongoDB 实例,请使用mongodb-enterprise-database-pods

    • 如果要在命名空间中部署 Ops Manager,请使用mongodb-enterprise-appdbmongodb-enterprise-ops-manager

    复制并粘贴适用的示例,并将<namespace>值替换为标识命名空间的标签。

    helm template mongodb/enterprise-operator \
    --set operator.namespace=<metadata.namespace> \
    --show-only templates/database-roles.yaml | oc apply -f -

设置 MongoDB Enterprise Kubernetes Operator 的范围后,您可以: