문서 메뉴
문서 홈
/
MongoDB Enterprise Kubernetes 연산자
/ /

MongoDB Enterprise Kubernetes Operator 배포 범위 설정

이 페이지의 내용

  • Kubernetes 연산자 배포 범위
  • 다음 단계

Kubernetes Operator를 설치하기 전에 Kubernetes Operator 배포의 범위를 설정할 수 있습니다. 범위는 Ops Manager 및 MongoDB 리소스를 배포하기 위해 선택한 네임스페이스에 따라 달라집니다.

다음 범위 중 하나를 설정할 수 있습니다.

  • 연산자가 리소스와 동일한 단일 네임스페이스를 사용합니다. (기본값)

  • 연산자가 네임스페이스의 하위 집합을 사용함

  • 클러스터 전체 범위를 사용하는 연산자

Kubernetes Operator가 동일한 네임스페이스 를 사용하도록 범위를 설정할 수 있습니다. 를 리소스로 사용합니다. 이 경우 Kubernetes Operator는 MongoDB 동일한 네임스페이스 에 있는 MongoDB Ops Manager와 리소스를 감시합니다. .

Kubernetes Operator를설치 하면 기본 네임스페이스를 사용합니다.

Kubernetes 연산자가 하나 이상의 네임스페이스 를 사용하도록 범위를 설정할 수 있습니다. Kubernetes Operator 리소스에서 사용하는 네임스페이스와 다릅니다. 이 경우 Kubernetes Operator는 네임스페이스 의 MongoDB 하위 집합에서 MongoDB Ops Manager와 리소스를 감시합니다. 지정합니다.

이 범위로 Kubernetes 연산자 인스턴스를 설치하려면 operator.watchNamespace 와 함께 helm 를 사용합니다. 매개변수입니다.

네임스페이스의 하위 집합을 감시하는 것은 단일 Kubernetes 연산자 인스턴스가 다른 클러스터 리소스 유형을 감시하는 배포에서 유용합니다. 예를 들어, 네임스페이스의 한 하위 집합에서 MongoDB 리소스를 감시하고 네임스페이스의 다른 하위 집합에서 MongoDBMultiCluster 리소스를 감시하도록 Kubernetes 연산자를 구성할 수 있습니다. 리소스 조정 중에 경합 상태를 방지하려면 Kubernetes 연산자가 감시하려는 각 사용자 지정 리소스 유형에 대해 범위를 네임스페이스의 고유한 하위 집합으로 설정해야 합니다.

helm 관련 설치 지침 을 따르되 operator.watchNamespace 에 하나 이상의 네임스페이스를 지정합니다. Kubernetes 연산자가 관찰할 수 있는 매개변수입니다.

# 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 연산자가 배포된 네임스페이스가 아닌 하나 이상의 네임스페이스에 있는 리소스를 감시하기 위해 Kubernetes 연산자를 설치하는 경우:

  1. 다음 리소스를 만듭니다.

    • ClusterRole 여러 리소스에 액세스할 수 있습니다. 전체 리소스 정의는 operator-roles.yaml 을 참조하세요. 예. 이는 클러스터 범위 리소스입니다.

    • ClusterRoleBinding 만들기 ClusterRole 연결 ServiceAccount와 함께 사용합니다. 이 clusterRoleBinding 은(는) Kubernetes Operator가 설치한 네임스페이스에서 사용 중인 ServiceAccount로 생성한 clusterRole 을(를) 바인딩합니다.

  2. ClusterRole 포함 및 ClusterRoleBinding 설치 중에 적용하는 기본 구성 파일에 있습니다.

다음 예제에서는 ClusterRole 및 ClusterRoleBinding 클러스터에서 함께 작동합니다.

mongodb 네임스페이스에 ServiceAccount를 만든 다음 이 네임스페이스에 Kubernetes 연산자를 설치한다고 가정해 보겠습니다. Kubernetes 연산자는 이 서비스 계정을 사용합니다.

네임스페이스 ns1ns2 을 감시하도록 Kubernetes 연산자 범위를 설정하려면 다음을 수행합니다.

  1. 클러스터 관리자 권한을 얻습니다.

  2. 이러한 권한을 사용하여 클러스터 전체에 걸쳐 네임스페이스가 없는 ClusterRole 을 생성합니다. .

  3. ClusterRoleBinding 만들기 mongodb, ns1ns2 의 세 네임스페이스에 있습니다. 이 ClusterRoleBinding ClusterRolemongodb 바인딩합니다. 네임스페이스의 ServiceAccount에 추가합니다. clusterRoleBinding 를 사용하면 mongodb 네임스페이스에 배포된 Kubernetes Operator가 대상 네임스페이스의 clusterRole , 즉 mongodb, ns1ns2 에 설명된 리소스에 액세스할 수 있습니다.

operator.watchNamespace도 참조하세요.

Kubernetes Operator의 범위를 Kubernetes 클러스터로 설정할 수 있습니다. 이 경우 Kubernetes Operator는 MongoDB 모든 네임스페이스 에서 MongoDB Ops Manager 및 리소스를 Kubernetes 감시합니다. 클러스터에서.

중요

Kubernetes cluster당 cluster 전체 범위로 Kubernetes 연산자 인스턴스를 하나만 배포할 수 있습니다.

Kubernetes Operator의 cluster 전체 범위를 설정하려면 선호하는 설치 방법에 대한 지침을 따르십시오.

  1. mongodb-enterprise.yaml 샘플 YAML 파일을 MongoDB Enterprise Kubernetes Operator GitHub 리포지토리에서 가져옵니다.

  2. spec.template.spec.containers.name.env.name:WATCH_NAMESPACE mongodb-enterprise.yaml "*"에서" 을(를) 설정합니다. .* YAML 파일에서 별표( ) 주위에 큰따옴표( )를 포함해야 합니다.

    WATCH_NAMESPACE: "*"
  3. 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
  4. 방금 수정한 ClusterRole 에 다음 코드를 추가합니다.

    - apiGroups:
    - ""
    resources:
    - namespaces
    verbs:
    - list
    - watch
  5. 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
  6. mongodb-enterprise.yaml 파일에서 <namespace> 값을 Kubernetes Operator가 리소스를 배포하고 YAML 파일을 적용할 네임스페이스로 변경합니다.

    1---
    2kind: ServiceAccount
    3apiVersion: v1
    4metadata:
    5 name: mongodb-enterprise-appdb
    6 namespace: <namespace>
    7---
    8kind: ServiceAccount
    9apiVersion: v1
    10metadata:
    11 name: mongodb-enterprise-database-pods
    12 namespace: <namespace>
    13---
    14kind: ServiceAccount
    15apiVersion: v1
    16metadata:
    17 name: mongodb-enterprise-ops-manager
    18 namespace: <namespace>
    19---
    20kind: Role
    21apiVersion: rbac.authorization.k8s.io/v1
    22metadata:
    23 name: mongodb-enterprise-appdb
    24 namespace: <namespace>
    25rules:
    26 - apiGroups:
    27 - ""
    28 resources:
    29 - secrets
    30 verbs:
    31 - get
    32 - apiGroups:
    33 - ""
    34 resources:
    35 - pods
    36 verbs:
    37 - patch
    38---
    39kind: RoleBinding
    40apiVersion: rbac.authorization.k8s.io/v1
    41metadata:
    42 name: mongodb-enterprise-appdb
    43 namespace: <namespace>
    44roleRef:
    45 apiGroup: rbac.authorization.k8s.io
    46 kind: Role
    47 name: mongodb-enterprise-appdb
    48subjects:
    49 - kind: ServiceAccount
    50 name: mongodb-enterprise-appdb
    51 namespace: <namespace>
    52...
  7. 로컬 Kubernetes 서비스 계정 만들기 :

    네임스페이스에 대해 다음 로컬 Kubernetes 서비스 계정 중 일부 또는 전부를 생성합니다. :

    • 네임스페이스에 MongoDB 인스턴스를 배포하려면 mongodb-enterprise-database-pods 을(를) 사용합니다.

    • 네임스페이스에 Ops Manager를 배포하려면 mongodb-enterprise-appdbmongodb-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를 배포하기 전에 다음 항목을 구성합니다.

  1. 모든 네임스페이스를 감시하도록 Kubernetes Operator를 구성합니다.

    helm install enterprise-operator mongodb/enterprise-operator \
    --set operator.watchNamespace="*"
  2. 로컬 Kubernetes 서비스 계정 만들기 :

    네임스페이스에 대해 다음 로컬 Kubernetes 서비스 계정 중 일부 또는 전부를 생성합니다. :

    • 네임스페이스에 MongoDB 인스턴스를 배포하려면 mongodb-enterprise-database-pods 을(를) 사용합니다.

    • 네임스페이스에 Ops Manager를 배포하려면 mongodb-enterprise-appdbmongodb-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를 배포하기 전에 다음 항목을 구성합니다.

  1. mongodb-enterprise-openshift.yaml MongoDB Enterprise Kubernetes Operator GitHub 리포지토리 의 샘플 YAML 파일입니다.

  2. spec.template.spec.containers.name.env.name:WATCH_NAMESPACE mongodb-enterprise-openshift.yaml "*"에서" 을(를) 설정합니다. .* YAML 파일에서 별표( ) 주위에 큰따옴표( )를 포함해야 합니다.

    WATCH_NAMESPACE: "*"
  3. 이러한 계정에 해당하는 역할을 만듭니다.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
  4. 방금 수정한 ClusterRole 에 다음 코드를 추가합니다.

    - apiGroups:
    - ""
    resources:
    - namespaces
    verbs:
    - list
    - watch
  5. 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
  6. Kubernetes Operator를 배포할 네임스페이스에만 시크릿을 생성합니다. 여러 네임스페이스 또는 클러스터 전체 범위 에 MongoDB 리소스를 배포하는 경우 Kubernetes Operator는 모든 감시 대상 네임스페이스에서 시크릿을 동기화합니다. 자세한 내용은 Helm 설치 설정registry.imagePullSecrets 설정을 참조하세요.

    mongodb-enterprise.yaml 파일에서 을 <namespace> Kubernetes Operator를 설치하려는 네임스페이스로 바꿉니다.oc 사용 또는 OpenShift Container Platform UI를 사용하여 결과 YAML 파일을 적용합니다.

    1---
    2kind: ServiceAccount
    3apiVersion: v1
    4metadata:
    5 name: mongodb-enterprise-appdb
    6 namespace: <namespace>
    7---
    8kind: ServiceAccount
    9apiVersion: v1
    10metadata:
    11 name: mongodb-enterprise-database-pods
    12 namespace: <namespace>
    13---
    14kind: ServiceAccount
    15apiVersion: v1
    16metadata:
    17 name: mongodb-enterprise-ops-manager
    18 namespace: <namespace>
    19---
    20kind: Role
    21apiVersion: rbac.authorization.k8s.io/v1
    22metadata:
    23 name: mongodb-enterprise-appdb
    24 namespace: <namespace>
    25rules:
    26 - apiGroups:
    27 - ""
    28 resources:
    29 - secrets
    30 verbs:
    31 - get
    32 - apiGroups:
    33 - ""
    34 resources:
    35 - pods
    36 verbs:
    37 - patch
    38---
    39kind: RoleBinding
    40apiVersion: rbac.authorization.k8s.io/v1
    41metadata:
    42 name: mongodb-enterprise-appdb
    43 namespace: <namespace>
    44roleRef:
    45 apiGroup: rbac.authorization.k8s.io
    46 kind: Role
    47 name: mongodb-enterprise-appdb
    48subjects:
    49 - kind: ServiceAccount
    50 name: mongodb-enterprise-appdb
    51 namespace: <namespace>
    52...
  7. 로컬 Kubernetes 서비스 계정 만들기 :

    네임스페이스에 대해 다음 로컬 Kubernetes 서비스 계정 중 일부 또는 전부를 생성합니다. :

    • 네임스페이스에 MongoDB 인스턴스를 배포하려면 mongodb-enterprise-database-pods 을(를) 사용합니다.

    • 네임스페이스에 Ops Manager를 배포하려면 mongodb-enterprise-appdbmongodb-enterprise-ops-manager 을 사용합니다.

    해당 예제를 복사하여 붙여넣고 <namespace> 값을 네임스페이스를 식별하는 레이블로 바꿉니다.

Kubernetes Operator를 배포하기 전에 다음 항목을 구성합니다.

  1. 모든 네임스페이스를 감시하도록 Kubernetes Operator를 구성합니다.

    helm install enterprise-operator mongodb/enterprise-operator \
    --set operator.watchNamespace="*" \
  2. Kubernetes Operator를 배포할 네임스페이스에만 시크릿을 생성합니다. 여러 네임스페이스 또는 클러스터 전체 범위 에 MongoDB 리소스를 배포하는 경우 Kubernetes Operator는 모든 감시 대상 네임스페이스에서 시크릿을 동기화합니다. 자세한 내용은 Helm 설치 설정registry.imagePullSecrets 설정을 참조하세요.

    mongodb-enterprise.yaml 파일에서 을 <namespace> Kubernetes Operator를 설치하려는 네임스페이스로 바꿉니다.oc 사용 또는 OpenShift Container Platform UI를 사용하여 결과 YAML 파일을 적용합니다.

    1---
    2kind: ServiceAccount
    3apiVersion: v1
    4metadata:
    5 name: mongodb-enterprise-appdb
    6 namespace: <namespace>
    7---
    8kind: ServiceAccount
    9apiVersion: v1
    10metadata:
    11 name: mongodb-enterprise-database-pods
    12 namespace: <namespace>
    13---
    14kind: ServiceAccount
    15apiVersion: v1
    16metadata:
    17 name: mongodb-enterprise-ops-manager
    18 namespace: <namespace>
    19---
    20kind: Role
    21apiVersion: rbac.authorization.k8s.io/v1
    22metadata:
    23 name: mongodb-enterprise-appdb
    24 namespace: <namespace>
    25rules:
    26 - apiGroups:
    27 - ""
    28 resources:
    29 - secrets
    30 verbs:
    31 - get
    32 - apiGroups:
    33 - ""
    34 resources:
    35 - pods
    36 verbs:
    37 - patch
    38---
    39kind: RoleBinding
    40apiVersion: rbac.authorization.k8s.io/v1
    41metadata:
    42 name: mongodb-enterprise-appdb
    43 namespace: <namespace>
    44roleRef:
    45 apiGroup: rbac.authorization.k8s.io
    46 kind: Role
    47 name: mongodb-enterprise-appdb
    48subjects:
    49 - kind: ServiceAccount
    50 name: mongodb-enterprise-appdb
    51 namespace: <namespace>
    52...
  3. 로컬 Kubernetes 서비스 계정 만들기 :

    네임스페이스에 대해 다음 로컬 Kubernetes 서비스 계정 중 일부 또는 전부를 생성합니다. :

    • 네임스페이스에 MongoDB 인스턴스를 배포하려면 mongodb-enterprise-database-pods 을(를) 사용합니다.

    • 네임스페이스에 Ops Manager를 배포하려면 mongodb-enterprise-appdbmongodb-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의 범위를 설정한 후에는 다음을 수행할 수 있습니다.