在安装 Kubernetes Operator 之前,您可以设置 Kubernetes Operator 部署的范围。 范围取决于您选择在其中部署 MongoDB Ops Manager 和 MongoDB 资源的命名空间。
Kubernetes Operator 部署范围
您可以设置以下范围之一:
Operator 使用与资源相同的单一命名空间
您可以将 Kubernetes 操作符的范围设置为使用与资源相同的命名空间。在这种情况下,Kubernetes 操作符会监视该命名空间中的 MongoDB Ops Manager 和 MongoDB 资源。
安装 Kubernetes 操作符时,它会使用默认命名空间。
操作符使用命名空间的子集
您可以将 Kubernetes 操作符 的范围设置为使用一个或多个与 Kubernetes 操作符 资源使用的命名空间不同的命名空间。在这种情况下,Kubernetes 操作符 会监视您指定的命名空间子集中的 MongoDB Ops Manager 和 MongoDB 资源。
要安装具有此范围的 Kubernetes 操作符 instances,请将helm与操作符.watchNamespace结合使用参数。
在单个 Kubernetes 操作符实例监视不同集群资源类型的部署中,监视命名空间子集非常有用。例如,您可以将 Kubernetes 操作符 配置为监视一个命名空间子集中的MongoDB资源,并监视另一命名空间子集中的MongoDBMultiCluster资源。为了避免在资源协调期间出现竞争条件,对于您希望 Kubernetes 操作符监视的每种自定义资源类型,请确保将范围设置为命名空间的不同子集。
按照helm的相关安装说明进行操作,但在Operator.watchNamespace中指定一个或多个命名空间 Kubernetes Operator 要监视的参数:
# Watch one namespace helm install mongodb-kubernetes-operator mongodb/mongodb-kubernetes \ --set operator.watchNamespace='namespace-to-watch' <...>
# Watch both namespace-a and namespace-b helm install mongodb-kubernetes-operator mongodb/mongodb-kubernetes \ --set operator.watchNamespace="namespace-a\,namespace-b"
# Operator with name `mongodb-kubernetes-operator-qa-envs` will # watch ns-dev, ns-qa and ns-uat namespaces helm install mongodb-kubernetes-operator-qa-envs mongodb/mongodb-kubernetes \ --set operator.watchNamespace="ns-dev\,ns-qa\,ns-uat"
# Operator with name `mongodb-kubernetes-operator-staging` will # watch ns-staging and ns-pre-prod helm install mongodb-kubernetes-operator-staging mongodb/mongodb-kubernetes --set operator.watchNamespace="ns-staging\,ns-pre-prod"
安装 Kubernetes Operator 以监控一个或多个命名空间(部署 Kubernetes Operator 的命名空间以外)中的资源时:
创建以下资源:
可以访问权限多种资源的 ClusterRole。有关完整的资源定义,请参阅 Operator-roles.yaml 示例。这是集群范围的资源。
创建ClusterRoleBinding以将ClusterRole与 ServiceAccount 关联。此
clusterRoleBinding将绑定您使用Kubernetes Operator 在安装它的命名空间上使用的 ServiceAccount 创建的clusterRole。
将 ClusterRole 和 ClusterRoleBinding 包含在安装期间应用的默认配置文件中。
创建本地Kubernetes ServiceAccounts:
为每个命名空间创建以下部分或全部本地Kubernetes ServiceAccounts:
如果要在命名空间中部署 MongoDB 实例,请使用
mongodb-kubernetes-database-pods。如果要在命名空间中部署 Ops Manager,请使用
mongodb-kubernetes-appdb和mongodb-kubernetes-ops-manager。
以下示例说明了 ClusterRole 和 ClusterRoleBinding 如何在集群中协同工作。
假设您在mongodb命名空间中创建一个 ServiceAccount,然后在此命名空间中安装 Kubernetes 操作符。Kubernetes 操作符 使用此 ServiceAccount。
要将 Kubernetes 操作符范围设置为监视命名空间ns1和ns2 ,请执行以下操作:
获取集群管理员权限。
使用这些特权,创建一个集群范围的、无命名空间的ClusterRole。
在三个命名空间中创建 ClusterRoleBinding:
mongodb、ns1和ns2。此 ClusterRoleBinding 会将 ClusterRole 绑定到mongodb命名空间中的 ServiceAccount。clusterRoleBinding将允许部署在mongodb命名空间中的Kubernetes Operator访问权限目标命名空间的clusterRole中描述的资源,即mongodb、ns1和ns2中描述的资源。
Operator 使用集群范围的作用域
您可以将 Kubernetes 操作符 的作用域设置为 Kubernetes 集群。在这种情况下,Kubernetes 操作符 会监视 Kubernetes 集群中所有命名空间中的 Ops Manager 和 MongoDB 资源。
重要
对于每个 Kubernetes 集群,您只能部署一个具有集群范围范围的 Kubernetes Operator 实例。
要为 Kubernetes Operator 设置集群范围的作用域,请按照您的首选安装方法的说明进行操作。
使用MongoDB Controllers for Kubernetes Operator GitHub存储库中的 mongodb-kubernetes.yaml示例YAML文件。
在 mongodb-kubernetes.yaml 中将
spec.template.spec.containers.name.env.name:WATCH_NAMESPACE设置为"*"。您必须在 YAML 文件中用双引号 (") 将星号 (*) 括起来。WATCH_NAMESPACE: "*" In mongodb-kubernetes.yaml, change:
kind: Role apiVersion: rbac.authorization.k8s.io/v1 metadata: name: mongodb-kubernetes-operator 至:
kind: ClusterRole apiVersion: rbac.authorization.k8s.io/v1 metadata: name: mongodb-kubernetes-operator 将以下代码添加到刚刚修改的
ClusterRole中:- apiGroups: - "" resources: - namespaces verbs: - list - watch In mongodb-kubernetes.yaml, change:
kind: RoleBinding apiVersion: rbac.authorization.k8s.io/v1 metadata: name: mongodb-kubernetes-operator namespace: mongodb roleRef: apiGroup: rbac.authorization.k8s.io kind: Role name: mongodb-kubernetes-operator subjects: - kind: ServiceAccount name: mongodb-kubernetes-operator namespace: mongodb 至:
kind: ClusterRoleBinding apiVersion: rbac.authorization.k8s.io/v1 metadata: name: mongodb-kubernetes-operator namespace: mongodb roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: mongodb-kubernetes-operator subjects: - kind: ServiceAccount name: mongodb-kubernetes-operator namespace: mongodb 在
mongodb-kubernetes.yaml文件中,将<namespace>值更改为您希望Kubernetes Operator部署资源并应用YAML文件的命名空间。1 2 kind: ServiceAccount 3 apiVersion: v1 4 metadata: 5 name: mongodb-kubernetes-appdb 6 namespace: <namespace> 7 8 kind: ServiceAccount 9 apiVersion: v1 10 metadata: 11 name: mongodb-kubernetes-database-pods 12 namespace: <namespace> 13 14 kind: ServiceAccount 15 apiVersion: v1 16 metadata: 17 name: mongodb-kubernetes-ops-manager 18 namespace: <namespace> 19 20 kind: Role 21 apiVersion: rbac.authorization.k8s.io/v1 22 metadata: 23 name: mongodb-kubernetes-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-kubernetes-appdb 43 namespace: <namespace> 44 roleRef: 45 apiGroup: rbac.authorization.k8s.io 46 kind: Role 47 name: mongodb-kubernetes-appdb 48 subjects: 49 - kind: ServiceAccount 50 name: mongodb-kubernetes-appdb 51 namespace: <namespace> 52 ... 创建本地Kubernetes服务帐户:
为每个命名空间创建以下部分或全部本地Kubernetes 服务帐户:
如果要在命名空间中部署 MongoDB 实例,请使用
mongodb-kubernetes-database-pods。如果要在命名空间中部署 Ops Manager,请使用
mongodb-kubernetes-appdb和mongodb-kubernetes-ops-manager。
复制并粘贴适用的示例,并将
<namespace>值替换为标识命名空间的标签。--- kind: ServiceAccount apiVersion: v1 metadata: name: mongodb-kubernetes-database-pods namespace: <namespace> --- kind: ServiceAccount apiVersion: v1 metadata: name: mongodb-kubernetes-appdb namespace: <namespace> --- kind: ServiceAccount apiVersion: v1 metadata: name: mongodb-kubernetes-ops-manager namespace: <namespace>
在部署Kubernetes Operator 之前,请配置以下项目:
配置Kubernetes Operator 以监视所有命名空间:
helm install mongodb-kubernetes-operator mongodb/mongodb-kubernetes \ --set operator.watchNamespace="*" 创建本地Kubernetes服务帐户:
为每个命名空间创建以下部分或全部本地Kubernetes 服务帐户:
如果要在命名空间中部署 MongoDB 实例,请使用
mongodb-kubernetes-database-pods。如果要在命名空间中部署 Ops Manager,请使用
mongodb-kubernetes-appdb和mongodb-kubernetes-ops-manager。
复制并粘贴适用的示例,并将
<namespace>值替换为标识命名空间的标签。helm template mongodb/mongodb-kubernetes \ --set operator.namespace=<metadata.namespace> \ --show-only templates/database-roles.yaml | kubectl apply -f -
在部署Kubernetes Operator 之前,请配置以下项目:
使用MongoDB Controllers for Kubernetes Operator Github存储库的 mongodb-kubernetes-openshift.yaml示例YAML文件。
将 mongodb-kubernetes-openshift.yaml 中的
spec.template.spec.containers.name.env.name:WATCH_NAMESPACE设置为"*"。您必须在 YAML 文件中用双引号 (") 将星号 (*) 括起来。WATCH_NAMESPACE: "*" 为这些帐户创建相应的角色。在 mongodb-kubernetes-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-kubernetes-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-kubernetes.yaml文件中,将<namespace>替换为要安装Kubernetes Operator 的命名空间。使用 oc 或 OpenShift Container Platform 用户界面应用生成的 YAML 文件。1 2 kind: ServiceAccount 3 apiVersion: v1 4 metadata: 5 name: mongodb-kubernetes-appdb 6 namespace: <namespace> 7 8 kind: ServiceAccount 9 apiVersion: v1 10 metadata: 11 name: mongodb-kubernetes-database-pods 12 namespace: <namespace> 13 14 kind: ServiceAccount 15 apiVersion: v1 16 metadata: 17 name: mongodb-kubernetes-ops-manager 18 namespace: <namespace> 19 20 kind: Role 21 apiVersion: rbac.authorization.k8s.io/v1 22 metadata: 23 name: mongodb-kubernetes-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-kubernetes-appdb 43 namespace: <namespace> 44 roleRef: 45 apiGroup: rbac.authorization.k8s.io 46 kind: Role 47 name: mongodb-kubernetes-appdb 48 subjects: 49 - kind: ServiceAccount 50 name: mongodb-kubernetes-appdb 51 namespace: <namespace> 52 ...
在部署Kubernetes Operator 之前,请配置以下项目:
配置Kubernetes Operator 以监视所有命名空间:
helm install mongodb-kubernetes-operator mongodb/mongodb-kubernetes \ --set operator.watchNamespace="*" \ 仅在要部署Kubernetes Operator 的命名空间中创建密钥。 如果您在多个命名空间中或在集群范围内部署MongoDB资源, Kubernetes Operator 会在所有受监视的命名空间之间同步密钥。 要学习;了解更多信息,请参阅Helm 安装设置中的
registry.imagePullSecrets设置。在
mongodb-kubernetes.yaml文件中,将<namespace>替换为要安装Kubernetes Operator 的命名空间。使用 oc 或 OpenShift Container Platform 用户界面应用生成的 YAML 文件。1 2 kind: ServiceAccount 3 apiVersion: v1 4 metadata: 5 name: mongodb-kubernetes-appdb 6 namespace: <namespace> 7 8 kind: ServiceAccount 9 apiVersion: v1 10 metadata: 11 name: mongodb-kubernetes-database-pods 12 namespace: <namespace> 13 14 kind: ServiceAccount 15 apiVersion: v1 16 metadata: 17 name: mongodb-kubernetes-ops-manager 18 namespace: <namespace> 19 20 kind: Role 21 apiVersion: rbac.authorization.k8s.io/v1 22 metadata: 23 name: mongodb-kubernetes-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-kubernetes-appdb 43 namespace: <namespace> 44 roleRef: 45 apiGroup: rbac.authorization.k8s.io 46 kind: Role 47 name: mongodb-kubernetes-appdb 48 subjects: 49 - kind: ServiceAccount 50 name: mongodb-kubernetes-appdb 51 namespace: <namespace> 52 ... 创建本地Kubernetes服务帐户:
为每个命名空间创建以下部分或全部本地Kubernetes 服务帐户:
如果要在命名空间中部署 MongoDB 实例,请使用
mongodb-kubernetes-database-pods。如果要在命名空间中部署 Ops Manager,请使用
mongodb-kubernetes-appdb和mongodb-kubernetes-ops-manager。
复制并粘贴适用的示例,并将
<namespace>值替换为标识命名空间的标签。helm template mongodb/mongodb-kubernetes \ --set operator.namespace=<metadata.namespace> \ --show-only templates/database-roles.yaml | oc apply -f -
后续步骤
设置Kubernetes Operator 的MongoDB控制器的作用域后,您可以: