Antes de instalar o Kubernetes Operator, você pode definir o escopo do sistema do Kubernetes Operator. Os escopos dependem dos namespaces nos quais você escolhe para implantar os recursos do Ops Manager e do MongoDB .
Escopos de implantação do operador Kubernetes
Você pode definir um destes escopos:
O operador usa o mesmo namespace único que os recursos
You can set the scope for the Kubernetes Operator to use the same namespace as resources. In this case, the Kubernetes Operator watches Ops Manager and MongoDB resources in that same namespace.
Quando você instala o Operador Kubernetes, ele utiliza o namespace padrão.
O operador usa um subconjunto de namespaces
You can set the scope for the Kubernetes Operator to use one or more namespaces that differ from the namespace used by the Kubernetes Operator resources. In this case, the Kubernetes Operator watches Ops Manager and MongoDB resources in a subset of namespaces that you specify.
Para instalar as instâncias do Operador Kubernetes com esse escopo, use helm com o operador.watchNamespace Parâmetro.
Observar um subconjunto de namespaces é útil em sistemas em que uma única instância do Kubernetes Operator observa um tipo de recurso de cluster diferente. Por exemplo, você pode configurar o Operador Kubernetes para observar recursos do MongoDB em um subconjunto de namespaces e para monitorar recursos do MongoDBMultiCluster em outro subconjunto de namespaces. Para evitar condições de corrida durante a reconciliação de recursos, para cada tipo de recurso personalizado que você deseja que o Operador Kubernetes assista, certifique-se de definir o escopo para um subconjunto distinto de namespaces.
Siga as instruções de instalação relevantes para helm, mas especifique um ou mais namespaces no operador.watchNamespace parâmetro para o operador Kubernetes observar:
# 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"
Ao instalar o Operador Kubernetes para observar recursos em um ou mais namespaces diferentes do namespace no qual o Operador Kubernetes está distribuído:
Crie os seguintes recursos:
Um ClusterRole com acesso a vários recursos. Para a definição completa do recurso, consulte o exemplo operator-roles.yaml. Este é um recurso com escopo de cluster.
Create a ClusterRoleBinding to link ClusterRole with ServiceAccount. This
clusterRoleBindingwill bind theclusterRolethat you created with the ServiceAccount that the Kubernetes Operator is using on the namespace where you install it.
Inclua o ClusterRole e o ClusterRoleBinding nos arquivos de configuração padrão que você aplica durante a instalação.
Criar contas de serviçolocais do Kubernetes:
Para cada namespace, crie algumas ou todas as seguintes ServiceAccounts locais do Kubernetes:
Se você deseja implantar uma instância MongoDB no namespace, utilize
mongodb-kubernetes-database-pods.Se você deseja implantar o Ops Manager no namespace, use
mongodb-kubernetes-appdbemongodb-kubernetes-ops-manager.
O exemplo a seguir ilustra como ClusterRole e ClusterRoleBinding trabalham juntos no cluster.
Suponha que você crie um ServiceAccount no namespace mongodb e depois instale o Kubernetes Operator nesse namespace. O Operador Kubernetes usa esta ServiceAccount.
Para definir o escopo do Operador Kubernetes para monitorar os namespaces ns1 e ns2:
Usando esses privilégios, crie um ClusterRole sem namespace e em todo o cluster.
Create a ClusterRoleBinding in three namespaces:
mongodb,ns1andns2. This ClusterRoleBinding will bind the ClusterRole to the ServiceAccount in themongodbnamespace. TheclusterRoleBindingwill allow the Kubernetes Operator deployed in themongodbnamespace to access the resources described in theclusterRoleof the target namespace, that is, inmongodb,ns1andns2.
Consulte também operator.watchNamespace.
O operador usa o escopo em todo o cluster
Você pode definir o escopo do Operador Kubernetes para o cluster Kubernetes. Neste caso, o Operador do Kubernetes observa os recursos do Ops Manager e do MongoDB em todos os namespaces no cluster do Kubernetes.
Importante
Você pode implantar apenas uma instância do Operador Kubernetes com um escopo de todo o cluster por cluster Kubernetes.
Para definir um escopo de todo o cluster para o Operador Kubernetes, siga as instruções para seu método de instalação preferido.
Use the mongodb-kubernetes.yaml sample YAML file from the MongoDB Controllers for Kubernetes Operator GitHub repository.
Set the
spec.template.spec.containers.name.env.name:WATCH_NAMESPACEin mongodb-kubernetes.yaml to"*". You must include the double quotation marks (") around the asterisk (*) in the YAML file.WATCH_NAMESPACE: "*" In mongodb-kubernetes.yaml, change:
kind: Role apiVersion: rbac.authorization.k8s.io/v1 metadata: name: mongodb-kubernetes-operator para:
kind: ClusterRole apiVersion: rbac.authorization.k8s.io/v1 metadata: name: mongodb-kubernetes-operator Adicione o seguinte código ao
ClusterRoleque você acabou de modificar:- 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 para:
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 No arquivo
mongodb-kubernetes.yaml, altere o valor<namespace>para o namespace em que você deseja que o operador Kubernetes implemente recursos e aplique o arquivo 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 ... Crie contas de serviço locais do Kubernetes:
Para cada namespace, crie algumas ou todas as seguintes contas de serviço local do Kubernetes:
Se você deseja implantar uma instância MongoDB no namespace, utilize
mongodb-kubernetes-database-pods.Se você deseja implantar o Ops Manager no namespace, use
mongodb-kubernetes-appdbemongodb-kubernetes-ops-manager.
Copie e cole os exemplos aplicáveis e substitua o valor
<namespace>pelo rótulo que identifica o 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>
Antes de implementar o Operador Kubernetes, configure os seguintes itens:
Configure o operador Kubernetes para observar todos os namespaces:
helm install mongodb-kubernetes-operator mongodb/mongodb-kubernetes \ --set operator.watchNamespace="*" Crie contas de serviço locais do Kubernetes:
Para cada namespace, crie algumas ou todas as seguintes contas de serviço local do Kubernetes:
Se você deseja implantar uma instância MongoDB no namespace, utilize
mongodb-kubernetes-database-pods.Se você deseja implantar o Ops Manager no namespace, use
mongodb-kubernetes-appdbemongodb-kubernetes-ops-manager.
Copie e cole os exemplos aplicáveis e substitua o valor
<namespace>pelo rótulo que identifica o namespace.helm template mongodb/mongodb-kubernetes \ --set operator.namespace=<metadata.namespace> \ --show-only templates/database-roles.yaml | kubectl apply -f -
Antes de implementar o Operador Kubernetes, configure os seguintes itens:
Use the mongodb-kubernetes-openshift.yaml sample YAML file from the MongoDB Controllers for Kubernetes Operator GitHub repository.
Set the
spec.template.spec.containers.name.env.name:WATCH_NAMESPACEin mongodb-kubernetes-openshift.yaml to"*". You must include the double quotation marks (") around the asterisk (*) in the YAML file.WATCH_NAMESPACE: "*" Crie os roles correspondentes para estas contas. Em mongodb-kubernetes-openshift.yaml, altere:
kind: Role apiVersion: rbac.authorization.k8s.io/v1 metadata: name: enterprise-operator para:
kind: ClusterRole apiVersion: rbac.authorization.k8s.io/v1 metadata: name: enterprise-operator Adicione o seguinte código ao
ClusterRoleque você acabou de modificar:- apiGroups: - "" resources: - namespaces verbs: - list - watch Em mongodb-kubernetes-openshift.yaml, altere:
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 para:
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 Create the secret only in the namespace where you will deploy the Kubernetes Operator. If you deploy MongoDB resources in multiple namespaces or with a cluster-wide scope, the Kubernetes Operator synchronizes the secret across all watched namespaces. To learn more, see the
registry.imagePullSecretssetting in the Helm installation settings.No arquivo
mongodb-kubernetes.yaml, substitua<namespace>pelo namespace no qual você deseja instalar o Kubernetes Operator. Use oc ou a interface do usuário do OpenShift Container Platform para aplicar o arquivo YAML resultante.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 ... Crie contas de serviço locais do Kubernetes:
Para cada namespace, crie algumas ou todas as seguintes contas de serviço local do Kubernetes:
Se você deseja implantar uma instância MongoDB no namespace, utilize
mongodb-kubernetes-database-pods.Se você deseja implantar o Ops Manager no namespace, use
mongodb-kubernetes-appdbemongodb-kubernetes-ops-manager.
Copie e cole os exemplos aplicáveis e substitua o valor
<namespace>pelo rótulo que identifica o namespace.
Antes de implementar o Operador Kubernetes, configure os seguintes itens:
Configure o operador Kubernetes para observar todos os namespaces:
helm install mongodb-kubernetes-operator mongodb/mongodb-kubernetes \ --set operator.watchNamespace="*" \ Create the secret only in the namespace where you will deploy the Kubernetes Operator. If you deploy MongoDB resources in multiple namespaces or with a cluster-wide scope, the Kubernetes Operator synchronizes the secret across all watched namespaces. To learn more, see the
registry.imagePullSecretssetting in the Helm installation settings.No arquivo
mongodb-kubernetes.yaml, substitua<namespace>pelo namespace no qual você deseja instalar o Kubernetes Operator. Use oc ou a interface do usuário do OpenShift Container Platform para aplicar o arquivo YAML resultante.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 ... Crie contas de serviço locais do Kubernetes:
Para cada namespace, crie algumas ou todas as seguintes contas de serviço local do Kubernetes:
Se você deseja implantar uma instância MongoDB no namespace, utilize
mongodb-kubernetes-database-pods.Se você deseja implantar o Ops Manager no namespace, use
mongodb-kubernetes-appdbemongodb-kubernetes-ops-manager.
Copie e cole os exemplos aplicáveis e substitua o valor
<namespace>pelo rótulo que identifica o namespace.helm template mongodb/mongodb-kubernetes \ --set operator.namespace=<metadata.namespace> \ --show-only templates/database-roles.yaml | oc apply -f -
Próximos passos
Depois de configurar o escopo dos Controladores MongoDB para o Operador Kubernetes, você pode:
Leia as considerações.
Conclua os pré- requisitos.