Join us Sept 17 at .local NYC! Use code WEB50 to save 50% on tickets. Learn more >
MongoDB Event
Docs 菜单
Docs 主页
/
Enterprise Kubernetes Operator
/ /

为 MongoDB Enterprise Kubernetes Operator 部署设置范围

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

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

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

安装 Kubernetes 操作符时,它会使用默认命名空间。

您可以将Kubernetes Operator 的范围设立为使用一个或多个与Kubernetes Operator 资源使用的命名空间不同的命名空间。在这种情况下, Kubernetes Operator 会监视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. 创建以下资源:

  2. ClusterRole ClusterRoleBinding 包含在安装期间应用的默认配置文件中。

  3. 创建本地Kubernetes ServiceAccounts:

    为每个命名空间创建以下部分或全部本地Kubernetes ServiceAccounts:

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

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

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

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

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

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

  2. 使用这些特权,创建一个集群范围的、无命名空间的 ClusterRole

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

另请参阅Operator.watchNamespace。

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

重要

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

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

  1. Use the mongodb-enterprise.yaml sample YAML file from the MongoDB Enterprise Kubernetes Operator GitHub repository.

  2. Set the spec.template.spec.containers.name.env.name:WATCH_NAMESPACE in mongodb-enterprise.yaml to "*". You must include the double quotation marks (") around the asterisk (*) in the YAML file.

    WATCH_NAMESPACE: "*"
  3. In mongodb-enterprise.yaml, change:

    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. In mongodb-enterprise.yaml, change:

    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. Use the mongodb-enterprise-openshift.yaml sample YAML file from the MongoDB Enterprise Kubernetes Operator GitHub repository.

  2. Set the spec.template.spec.containers.name.env.name:WATCH_NAMESPACE in mongodb-enterprise-openshift.yaml to "*". You must include the double quotation marks (") around the asterisk (*) in the YAML file.

    WATCH_NAMESPACE: "*"
  3. Create the corresponding roles for these accounts. In mongodb-enterprise-openshift.yaml, change:

    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. In mongodb-enterprise-openshift.yaml, change:

    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 的范围后,您可以:

在此页面上