为 MongoDB Enterprise Kubernetes Operator 部署设置范围
在安装 Kubernetes Operator 之前,您可以设置 Kubernetes Operator 部署的范围。 范围取决于您选择在其中部署 Ops Manager 和 MongoDB
资源的命名空间。
Kubernetes Operator 部署范围
您可以设置以下范围之一:
Operator 使用与资源相同的单一命名空间
您可以设立Kubernetes Operator 的作用域设置为使用与资源相同的命名空间 。在这种情况下,Kubernetes Kubernetes OperatorMongoDB Ops Manager MongoDB
会监视同一命名空间中的MongoDB Ops Manager和 资源。
当您安装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 的命名空间以外)中的资源时:
创建以下资源:
ClusterRole 可访问多种资源。有关完整的资源定义,请参阅 Operator-roles.yaml 示例。这是集群范围的资源。
创建 ClusterRoleBinding 链接 ClusterRole 和 ServiceAccount。此
clusterRoleBinding
将绑定您使用 Kubernetes Operator 在安装它的命名空间上使用的 ServiceAccount 创建的clusterRole
。
包括 ClusterRole 和 ClusterRoleBinding 在安装过程中应用的默认配置文件中。
创建本地Kubernetes ServiceAccounts:
为每个命名空间创建以下部分或全部本地Kubernetes ServiceAccounts:
如果要在命名空间中部署 MongoDB 实例,请使用
mongodb-enterprise-database-pods
。如果要在命名空间中部署 Ops Manager,请使用
mongodb-enterprise-appdb
和mongodb-enterprise-ops-manager
。
以下示例说明了 ClusterRole 如何 和 ClusterRoleBinding 在集群中协同工作。
假设您在mongodb
命名空间中创建一个 ServiceAccount,然后在此命名空间中安装 Kubernetes 操作符。Kubernetes 操作符 使用此 ServiceAccount。
要将 Kubernetes 操作符范围设置为监视命名空间ns1
和ns2
,请执行以下操作:
获取 集群管理员权限。
使用这些权限,创建集群范围内的非命名 ClusterRole 。
创建 ClusterRoleBinding 位于三个命名空间中:
mongodb
、ns1
和ns2
。此 ClusterRoleBinding 将绑定 ClusterRole 到 命名空间中的 ServiceAccount。mongodb
clusterRoleBinding
将允许部署在mongodb
命名空间中的 Kubernetes Operator 访问目标命名空间的clusterRole
中描述的资源,即mongodb
、ns1
和ns2
中描述的资源。
Operator 使用集群范围的作用域
您可以将 Kubernetes Operator 的作用域设置为 Kubernetes 集群。 在这种情况下,Kubernetes MongoDB Ops ManagerOperatorMongoDB
会监视所有 命名空间 中的 和 资源 在Kubernetes 集群中。
重要
对于每个 Kubernetes 集群,您只能部署一个具有集群范围范围的 Kubernetes Operator 实例。
要为 Kubernetes Operator 设置集群范围的作用域,请按照您的首选安装方法的说明进行操作。
使用 mongodb-enterprise.yaml MongoDBEnterprise Kubernetes OperatorGithub存储库中 的示例 YAML 文件。
在 mongodb-enterprise.yaml 中设置
spec.template.spec.containers.name.env.name:WATCH_NAMESPACE
到"*"
。您必须在 YAML 文件中用 double引号 ()"
将星号*
() 括起来。WATCH_NAMESPACE: "*" 在 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 将以下代码添加到刚刚修改的
ClusterRole
中:- apiGroups: - "" resources: - namespaces verbs: - list - watch 在 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 在
mongodb-enterprise.yaml
文件中,将<namespace>
值更改为您希望Kubernetes Operator部署资源并应用YAML文件的命名空间。1 2 kind: ServiceAccount 3 apiVersion: v1 4 metadata: 5 name: mongodb-enterprise-appdb 6 namespace: <namespace> 7 8 kind: ServiceAccount 9 apiVersion: v1 10 metadata: 11 name: mongodb-enterprise-database-pods 12 namespace: <namespace> 13 14 kind: ServiceAccount 15 apiVersion: v1 16 metadata: 17 name: mongodb-enterprise-ops-manager 18 namespace: <namespace> 19 20 kind: Role 21 apiVersion: rbac.authorization.k8s.io/v1 22 metadata: 23 name: mongodb-enterprise-appdb 24 namespace: <namespace> 25 rules: 26 - apiGroups: 27 - "" 28 resources: 29 - secrets 30 verbs: 31 - get 32 - apiGroups: 33 - "" 34 resources: 35 - pods 36 verbs: 37 - patch 38 39 kind: RoleBinding 40 apiVersion: rbac.authorization.k8s.io/v1 41 metadata: 42 name: mongodb-enterprise-appdb 43 namespace: <namespace> 44 roleRef: 45 apiGroup: rbac.authorization.k8s.io 46 kind: Role 47 name: mongodb-enterprise-appdb 48 subjects: 49 - kind: ServiceAccount 50 name: mongodb-enterprise-appdb 51 namespace: <namespace> 52 ... 为每个命名空间创建以下部分或全部本地 Kubernetes 服务帐户 :
如果要在命名空间中部署 MongoDB 实例,请使用
mongodb-enterprise-database-pods
。如果要在命名空间中部署 Ops Manager,请使用
mongodb-enterprise-appdb
和mongodb-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 之前,请配置以下项目:
配置Kubernetes Operator 以监视所有命名空间:
helm install enterprise-operator mongodb/enterprise-operator \ --set operator.watchNamespace="*" 为每个命名空间创建以下部分或全部本地 Kubernetes 服务帐户 :
如果要在命名空间中部署 MongoDB 实例,请使用
mongodb-enterprise-database-pods
。如果要在命名空间中部署 Ops Manager,请使用
mongodb-enterprise-appdb
和mongodb-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 之前,请配置以下项目:
使用 mongodb-enterprise-openshift.yamlMongoDBEnterprise Kubernetes OperatorGithub 存储库中 的示例 YAML 文件。
在
spec.template.spec.containers.name.env.name:WATCH_NAMESPACE
mongodb-enterprise-openshift.yaml 中设置 到"*"
。您必须在 YAML 文件中用 double引号 ()"
将星号*
() 括起来。WATCH_NAMESPACE: "*" 为这些帐户创建相应的角色。 在 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 将以下代码添加到刚刚修改的
ClusterRole
中:- apiGroups: - "" resources: - namespaces verbs: - list - watch 在 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 仅在要部署Kubernetes Operator 的命名空间中创建密钥。 如果您在多个命名空间中或在集群范围内部署MongoDB资源, Kubernetes Operator 会在所有受监视的命名空间之间同步密钥。 要学习;了解更多信息,请参阅Helm 安装设置中的
registry.imagePullSecrets
设置。在
mongodb-enterprise.yaml
文件中,将<namespace>
替换为要安装Kubernetes Operator 的命名空间。 使用 oc 或OpenShift Container Platform用户界面应用生成的 YAML 文件。1 2 kind: ServiceAccount 3 apiVersion: v1 4 metadata: 5 name: mongodb-enterprise-appdb 6 namespace: <namespace> 7 8 kind: ServiceAccount 9 apiVersion: v1 10 metadata: 11 name: mongodb-enterprise-database-pods 12 namespace: <namespace> 13 14 kind: ServiceAccount 15 apiVersion: v1 16 metadata: 17 name: mongodb-enterprise-ops-manager 18 namespace: <namespace> 19 20 kind: Role 21 apiVersion: rbac.authorization.k8s.io/v1 22 metadata: 23 name: mongodb-enterprise-appdb 24 namespace: <namespace> 25 rules: 26 - apiGroups: 27 - "" 28 resources: 29 - secrets 30 verbs: 31 - get 32 - apiGroups: 33 - "" 34 resources: 35 - pods 36 verbs: 37 - patch 38 39 kind: RoleBinding 40 apiVersion: rbac.authorization.k8s.io/v1 41 metadata: 42 name: mongodb-enterprise-appdb 43 namespace: <namespace> 44 roleRef: 45 apiGroup: rbac.authorization.k8s.io 46 kind: Role 47 name: mongodb-enterprise-appdb 48 subjects: 49 - kind: ServiceAccount 50 name: mongodb-enterprise-appdb 51 namespace: <namespace> 52 ... 为每个命名空间创建以下部分或全部本地 Kubernetes 服务帐户 :
如果要在命名空间中部署 MongoDB 实例,请使用
mongodb-enterprise-database-pods
。如果要在命名空间中部署 Ops Manager,请使用
mongodb-enterprise-appdb
和mongodb-enterprise-ops-manager
。
复制并粘贴适用的示例,并将
<namespace>
值替换为标识命名空间的标签。
在部署Kubernetes Operator 之前,请配置以下项目:
配置Kubernetes Operator 以监视所有命名空间:
helm install enterprise-operator mongodb/enterprise-operator \ --set operator.watchNamespace="*" \ 仅在要部署Kubernetes Operator 的命名空间中创建密钥。 如果您在多个命名空间中或在集群范围内部署MongoDB资源, Kubernetes Operator 会在所有受监视的命名空间之间同步密钥。 要学习;了解更多信息,请参阅Helm 安装设置中的
registry.imagePullSecrets
设置。在
mongodb-enterprise.yaml
文件中,将<namespace>
替换为要安装Kubernetes Operator 的命名空间。 使用 oc 或OpenShift Container Platform用户界面应用生成的 YAML 文件。1 2 kind: ServiceAccount 3 apiVersion: v1 4 metadata: 5 name: mongodb-enterprise-appdb 6 namespace: <namespace> 7 8 kind: ServiceAccount 9 apiVersion: v1 10 metadata: 11 name: mongodb-enterprise-database-pods 12 namespace: <namespace> 13 14 kind: ServiceAccount 15 apiVersion: v1 16 metadata: 17 name: mongodb-enterprise-ops-manager 18 namespace: <namespace> 19 20 kind: Role 21 apiVersion: rbac.authorization.k8s.io/v1 22 metadata: 23 name: mongodb-enterprise-appdb 24 namespace: <namespace> 25 rules: 26 - apiGroups: 27 - "" 28 resources: 29 - secrets 30 verbs: 31 - get 32 - apiGroups: 33 - "" 34 resources: 35 - pods 36 verbs: 37 - patch 38 39 kind: RoleBinding 40 apiVersion: rbac.authorization.k8s.io/v1 41 metadata: 42 name: mongodb-enterprise-appdb 43 namespace: <namespace> 44 roleRef: 45 apiGroup: rbac.authorization.k8s.io 46 kind: Role 47 name: mongodb-enterprise-appdb 48 subjects: 49 - kind: ServiceAccount 50 name: mongodb-enterprise-appdb 51 namespace: <namespace> 52 ... 为每个命名空间创建以下部分或全部本地 Kubernetes 服务帐户 :
如果要在命名空间中部署 MongoDB 实例,请使用
mongodb-enterprise-database-pods
。如果要在命名空间中部署 Ops Manager,请使用
mongodb-enterprise-appdb
和mongodb-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 的范围后,您可以: