Kubernetes Operator를 설치하기 전에 Kubernetes Operator 배포의 범위를 설정할 수 있습니다. 범위는 Ops Manager 및 MongoDB 리소스를 배포하기 위해 선택한 네임스페이스에 따라 달라집니다.
Kubernetes 연산자 배포 범위
다음 범위 중 하나를 설정할 수 있습니다.
연산자가 리소스와 동일한 단일 네임스페이스를 사용합니다.
Kubernetes 연산자가 리소스와 동일한 네임스페이스 사용하도록 범위를 설정하다 수 있습니다. 이 경우 Kubernetes Operator는 MongoDB 동일한 네임스페이스 에 있는 Ops Manager 및 리소스를 감시합니다.
Kubernetes 연산자를 설치 하면 기본 네임스페이스가 사용됩니다.
연산자가 네임스페이스의 하위 집합을 사용함
Kubernetes Operator 리소스에서 사용하는 네임 네임스페이스 와 다른 네임스페이스를 하나 이상 사용하도록 Kubernetes Operator 범위를 설정하다 수 있습니다. 이 경우 Kubernetes Operator는 사용자가 MongoDB 지정한 네임스페이스의 하위 집합에서 Ops Manager 및 리소스를 감시합니다.
이 범위로 Kubernetes 연산자 인스턴스를 설치하려면 operator.watchNamespace 와 함께 helm 를 사용합니다. 매개변수입니다.
네임스페이스의 하위 집합을 감시하는 것은 단일 Kubernetes 연산자 인스턴스가 다른 클러스터 리소스 유형을 감시하는 배포에서 유용합니다. 예를 들어, 네임스페이스의 한 하위 집합에서 MongoDB 리소스를 감시하고 네임스페이스의 다른 하위 집합에서 MongoDBMultiCluster 리소스를 감시하도록 Kubernetes 연산자를 구성할 수 있습니다. 리소스 조정 중에 경합 상태를 방지하려면 Kubernetes 연산자가 감시하려는 각 사용자 지정 리소스 유형에 대해 범위를 네임스페이스의 고유한 하위 집합으로 설정해야 합니다.
helm 관련 설치 지침 을 따르되 operator.watchNamespace 에 하나 이상의 네임스페이스를 지정합니다. Kubernetes 연산자가 관찰할 수 있는 매개변수입니다.
# 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 연산자가 배포된 네임스페이스가 아닌 하나 이상의 네임스페이스에 있는 리소스를 감시하기 위해 Kubernetes 연산자를 설치하는 경우:
다음 리소스를 만듭니다.
A 여러 리소스에 액세스 할 수 있는 ClusterRole 입니다. 전체 리소스 정의는 operator-roles.yaml 예시 참조하세요. 이는 클러스터 범위의 리소스 입니다.
ClusterRoleBinding을 생성하여 ClusterRole을 ServiceAccount와 연결합니다. 이
clusterRoleBindingclusterRole은(는) Kubernetes Operator가 설치한 네임스페이스 에서 사용 중인 ServiceAccount로 생성한 을(를) 바인딩합니다.
설치 중에 적용 기본값 구성 파일에 ClusterRole 및 ClusterRoleBinding을 포함합니다.
로컬 Kubernetes 서비스 계정:을 생성합니다.
각 네임스페이스 에 대해 다음 로컬 Kubernetes ServiceAccounts의 일부 또는 전부를 생성합니다.
네임스페이스에 MongoDB 인스턴스를 배포하려면
mongodb-kubernetes-database-pods을(를) 사용합니다.네임스페이스에 Ops Manager를 배포하려면
mongodb-kubernetes-appdb및mongodb-kubernetes-ops-manager을 사용합니다.
다음 예시 클러스터 에서 ClusterRole 과 ClusterRoleBinding 이 함께 작동하는 방식을 보여줍니다.
mongodb 네임스페이스에 ServiceAccount를 만든 다음 이 네임스페이스에 Kubernetes 연산자를 설치한다고 가정해 보겠습니다. Kubernetes 연산자는 이 서비스 계정을 사용합니다.
네임스페이스 ns1 및 ns2 을 감시하도록 Kubernetes 연산자 범위를 설정하려면 다음을 수행합니다.
Obtain cluster-admin privileges.
이러한 권한을 사용하여 클러스터 전체에 네임스페이스가 없는 ClusterRole을 생성합니다.
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.
클러스터 전체 범위를 사용하는 연산자
Kubernetes Operator의 범위를 Kubernetes 클러스터 로 설정하다 수 있습니다. 이 경우 Kubernetes Operator는 MongoDB Ops Manager 와 MongoDB Kubernetes 클러스터 의 모든 네임스페이스에 있는 리소스를 감시합니다.
중요
Kubernetes cluster당 cluster 전체 범위로 Kubernetes 연산자 인스턴스를 하나만 배포할 수 있습니다.
Kubernetes Operator의 cluster 전체 범위를 설정하려면 선호하는 설치 방법에 대한 지침을 따르십시오.
Kubernetes 연산자용 MongoDB 컨트롤러 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 연산자가 리소스를 배포하고 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를 배포 하기 전에 다음 항목을 구성합니다.
Kubernetes 연산자용 MongoDB 컨트롤러 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는 모든 감시 대상 네임스페이스에서 시크릿을 동기화합니다. 자세한
registry.imagePullSecrets학습 은 Helm 설치 설정의 설정을 참조하세요.mongodb-kubernetes.yaml파일 에서<namespace>을 Kubernetes Operator를 설치하려는 네임스페이스 로 바꿉니다. oc 또는 OpenShift Container Platform UI 사용하여 결과 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>값을 네임스페이스를 식별하는 레이블로 바꿉니다.
Kubernetes Operator를 배포 하기 전에 다음 항목을 구성합니다.
모든 네임스페이스를 감시하도록 Kubernetes Operator를 구성합니다.
helm install mongodb-kubernetes-operator mongodb/mongodb-kubernetes \ --set operator.watchNamespace="*" \ Kubernetes Operator를 배포 할 네임스페이스 에만 시크릿을 생성합니다. MongoDB 리소스를 여러 네임스페이스 또는 클러스터 전체 범위에 배포 경우, Kubernetes Operator는 모든 감시 대상 네임스페이스에서 시크릿을 동기화합니다. 자세한
registry.imagePullSecrets학습 은 Helm 설치 설정의 설정을 참조하세요.mongodb-kubernetes.yaml파일 에서<namespace>을 Kubernetes Operator를 설치하려는 네임스페이스 로 바꿉니다. oc 또는 OpenShift Container Platform UI 사용하여 결과 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 컨트롤러의 범위를 설정한 후 다음을 수행할 수 있습니다.