Antes de instalar el Operador de Kubernetes, puedes definir el alcance de la implementación del Operador de Kubernetes. Los alcances dependen de los espacios de nombres en los que elija implementar Ops Manager y los recursos de MongoDB.
Alcances de implementación del operador de Kubernetes
Puede establecer uno de estos ámbitos:
El operador utiliza el mismo namespace único que los 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.
Cuando instalas el Kubernetes operador, se utiliza el namespace por defecto.
El Operador usa un 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 las instancias del Operador de Kubernetes en este alcance, utiliza helm con el operator.watchNamespace parámetro.
Observar un subconjunto de namespaces es útil en implementaciones donde una sola instancia de Kubernetes operador observa un tipo diferente de recurso en el clúster. Por ejemplo, puedes configurar el operador de Kubernetes para monitorear recursos MongoDB en un subconjunto de namespaces y monitorear recursos MongoDBMultiCluster en otro subconjunto de namespaces. Para evitar condiciones de carrera durante la reconciliación de recursos, para cada tipo de recurso personalizado que quieras que el Operador de Kubernetes observe, asegúrate de establecer el alcance en un subconjunto distinto de espacios de nombres.
Siga las instrucciones de instalación pertinentes para helm, pero especifique uno o más espacios de nombres en operador.watchNamespace parámetro para que el Operador de Kubernetes observe:
# 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"
Al instalar el Operador de Kubernetes para monitorear recursos en uno o más namespaces distintos al namespace en el que está implementado el Operador de Kubernetes:
Crea los siguientes recursos:
Un ClusterRole con acceso a múltiples recursos. Para obtener la definición completa del recurso, consulte el ejemplo operator-roles.yaml. Este es un recurso con ámbito de clúster.
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.
Incluya el ClusterRole y ClusterRoleBinding en los archivos de configuración por defecto que se aplican durante la instalación.
Cree ServiceAccounts:locales de Kubernetes
Para cada namespace, cree algunas o todas las siguientes ServiceAccounts de Kubernetes locales:
Si deseas implementar una instancia de MongoDB en el namespace, utiliza
mongodb-kubernetes-database-pods.Si deseas implementar Ops Manager en el namespace, utiliza
mongodb-kubernetes-appdbymongodb-kubernetes-ops-manager.
El siguiente ejemplo ilustra cómo el ClusterRole y el ClusterRoleBinding trabajan juntos en el clúster.
Supongamos que crea una ServiceAccount en el namespace mongodb y luego instala el Kubernetes Operator en este namespace. El Operador de Kubernetes utiliza esta cuenta de servicio.
Para configurar el ámbito del operador de Kubernetes para observar los namespaces ns1 y ns2:
Usando estos privilegios, crea un ClusterRole a nivel de clúster, sin espacio de nombres.
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.
Consulta también operator.watchNamespace.
El operador utiliza el ámbito en todo el clúster
Puede establecer el alcance del Operador de Kubernetes al clúster de Kubernetes. En este caso, el Operador de Kubernetes monitorea Ops Manager y los recursos MongoDB en todos los namespaces en el clúster de Kubernetes.
Importante
Solo puedes implementar una sola instancia del Kubernetes Operator con un alcance a nivel de clúster por cada clúster de Kubernetes.
Para establecer un alcance a nivel de clúster para el operador de Kubernetes, sigue las instrucciones para tu método de instalación preferido.
Utilice el archivo de mongodb-kubernetes.yaml muestra YAML del repositorio de GitHub de MongoDB Controllers for Kubernetes Operator
Establezca el
spec.template.spec.containers.name.env.name:WATCH_NAMESPACEen mongodb-kubernetes.yaml a"*". Debe incluir las comillas double (") alrededor del asterisco (*) en el archivo YAML.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 Agrega el siguiente código al
ClusterRoleque acabas 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 En el archivo
mongodb-kubernetes.yaml, cambie el valor de<namespace>al namespace donde desea que el Kubernetes Operator despliegue recursos y aplique el archivo 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 ... Create local Kubernetes service accounts:
Para cada namespace, cree algunas o todas las siguientes cuentas de servicio locales de Kubernetes:
Si deseas implementar una instancia de MongoDB en el namespace, utiliza
mongodb-kubernetes-database-pods.Si deseas implementar Ops Manager en el namespace, utiliza
mongodb-kubernetes-appdbymongodb-kubernetes-ops-manager.
Copia y pega los ejemplos aplicables y reemplaza el valor
<namespace>con la etiqueta que identifica el espacio de nombres.--- 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 el operador de Kubernetes, configure los siguientes elementos:
Configure el operador de Kubernetes para monitorizar todos los namespaces:
helm install mongodb-kubernetes-operator mongodb/mongodb-kubernetes \ --set operator.watchNamespace="*" Create local Kubernetes service accounts:
Para cada namespace, cree algunas o todas las siguientes cuentas de servicio locales de Kubernetes:
Si deseas implementar una instancia de MongoDB en el namespace, utiliza
mongodb-kubernetes-database-pods.Si deseas implementar Ops Manager en el namespace, utiliza
mongodb-kubernetes-appdbymongodb-kubernetes-ops-manager.
Copia y pega los ejemplos aplicables y reemplaza el valor
<namespace>con la etiqueta que identifica el espacio de nombres.helm template mongodb/mongodb-kubernetes \ --set operator.namespace=<metadata.namespace> \ --show-only templates/database-roles.yaml | kubectl apply -f -
Antes de implementar el operador de Kubernetes, configure los siguientes elementos:
Utiliza el archivo de muestra mongodb-kubernetes-openshift.yaml YAML del Repositorio GitHub de MongoDB Controllers para Kubernetes Operator.
Establezca el
spec.template.spec.containers.name.env.name:WATCH_NAMESPACEen mongodb-kubernetes-openshift.yaml en"*". Debe incluir las comillas double (") alrededor del asterisco (*) en el archivo YAML.WATCH_NAMESPACE: "*" Cree los roles correspondientes para estas cuentas. En mongodb-kubernetes-openshift.yaml, cambiar:
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 Agrega el siguiente código al
ClusterRoleque acabas de modificar:- apiGroups: - "" resources: - namespaces verbs: - list - watch En mongodb-kubernetes-openshift.yaml, cambie:
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.En el archivo
mongodb-kubernetes.yaml, reemplace<namespace>con el namespace en el que quiera instalar el Operador de Kubernetes. Usa oc o la Interfaz de Usuario de OpenShift Container Platform para aplicar el archivo 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 ... Create local Kubernetes service accounts:
Para cada namespace, cree algunas o todas las siguientes cuentas de servicio locales de Kubernetes:
Si deseas implementar una instancia de MongoDB en el namespace, utiliza
mongodb-kubernetes-database-pods.Si deseas implementar Ops Manager en el namespace, utiliza
mongodb-kubernetes-appdbymongodb-kubernetes-ops-manager.
Copia y pega los ejemplos aplicables y reemplaza el valor
<namespace>con la etiqueta que identifica el espacio de nombres.
Antes de implementar el operador de Kubernetes, configure los siguientes elementos:
Configure el operador de Kubernetes para monitorizar todos los 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.En el archivo
mongodb-kubernetes.yaml, reemplace<namespace>con el namespace en el que quiera instalar el Operador de Kubernetes. Usa oc o la Interfaz de Usuario de OpenShift Container Platform para aplicar el archivo 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 ... Create local Kubernetes service accounts:
Para cada namespace, cree algunas o todas las siguientes cuentas de servicio locales de Kubernetes:
Si deseas implementar una instancia de MongoDB en el namespace, utiliza
mongodb-kubernetes-database-pods.Si deseas implementar Ops Manager en el namespace, utiliza
mongodb-kubernetes-appdbymongodb-kubernetes-ops-manager.
Copia y pega los ejemplos aplicables y reemplaza el valor
<namespace>con la etiqueta que identifica el espacio de nombres.helm template mongodb/mongodb-kubernetes \ --set operator.namespace=<metadata.namespace> \ --show-only templates/database-roles.yaml | oc apply -f -
Próximos pasos
Después de establecer el alcance para los MongoDB Controllers para Kubernetes operador, puedes:
Lee las Consideraciones.
Completa los requisitos previos.