중요
이 섹션은 단일 Kubernetes 클러스터 배포에만 적용됩니다. 다중 Kubernetes cluster MongoDB deployment의 경우 개요 를 참조하세요.
Kubernetes Operator용 MongoDB 컨트론러는 Kubernetes API 및 도구를 사용하여 Kubernetes 클러스터 내에서 실행 중인 MongoDB 클러스터를 관리합니다. Kubernetes Operator는 Ops Manager와 함께 작동합니다. 이 튜토리얼에서는 Kubernetes에 Ops Manager를 배포하고 Kubernetes Operator를 사용하여 첫 번째 MongoDB 복제본 세트를 배포하고 연결하는 방법을 설명합니다. Kind 를 사용하여 클러스터를 빠르게 설정할 수 있습니다. 자세한 내용은 Kind를 참조하세요.
전제 조건
이 튜토리얼에는 다음이 필요합니다.
실행 중인 Kubernetes 클러스터.
로컬 마신에 설치된 Helm.
지원되는 hardware 아키텍처에서실행되는 Kubernetes 노드.
로컬 머신에 설치된 MongoDB Shell .
Docker Desktop에서 Kind 를 사용하는 경우 Docker Desktop 리소스 설정에서 최소 8 GB의 메모리 와 4 개의 CPU 를 할당합니다. MongoDB Ops Manager에는 애플리케이션을 위해 최소 5 GB의 메모리가 필요하며 애플리케이션 데이터베이스와 Kubernetes 연산자를 위해 추가 리소스가 필요합니다.
절차
Kubernetes 용 MongoDB Helm Charts 리포지토리 를 Helm에 추가합니다.
helm repo add mongodb https://mongodb.github.io/helm-charts
Kubernetes Operator용 MongoDB 컨트롤러 설치
Helm을 사용하여 Kubernetes Operator를 설치하려면, 리포지토리의 지침을 참조하세요.
예시
다음 명령은 선택적 --create-namespace 옵션을 사용하여 mongodb 네임스페이스 에 Kubernetes Operator용 MongoDB 컨트롤러를 설치합니다. 기본값 으로 Kubernetes Operator는 default 네임스페이스 사용합니다.
helm install kubernetes-operator mongodb/mongodb-kubernetes --namespace mongodb --create-namespace
MongoDB Ops Manager 관리자 자격 증명 시크릿을 만듭합니다.
초기 MongoDB Ops Manager 관리자 사용자 자격 증명이 포함된 시크릿 을 만듭니다. Kubernetes 연산자는 MongoDB Ops Manager 리소스를 배포할 때 이 시크릿을 사용하여 첫 번째 관리자 사용자를 구성합니다.
다음 명령을 실행하여 자리 표시자 값을 원하는 자격 증명으로 대체합니다.
kubectl create secret generic ops-manager-admin-secret \ --from-literal=Username="<admin-email>" \ --from-literal=Password="<admin-password>" \ --from-literal=FirstName="<first-name>" \ --from-literal=LastName="<last-name>"
참고
이러한 자격 증명을 안전하게 저장하세요. 배포 후 MongoDB Ops Manager UI에 로그인하려면 이것이 필요합니다.
MongoDB Ops Manager 리소스를 배포합니다.
다음 YAML 파일을 복사하고
ops-manager.yaml(으)로 저장합니다.apiVersion: mongodb.com/v1 kind: MongoDBOpsManager metadata: name: ops-manager namespace: mongodb spec: replicas: 1 version: "8.0.0" adminCredentials: ops-manager-admin-secret externalConnectivity: type: NodePort configuration: mms.ignoreInitialUiSetup: "true" automation.versions.source: "mongodb" mms.fromEmailAddr: admin@example.com mms.replyToEmailAddr: admin@example.com mms.adminEmailAddr: admin@example.com mms.mail.transport: smtp mms.mail.hostname: localhost mms.mail.port: "25" backup: enabled: false applicationDatabase: topology: SingleCluster members: 3 version: "8.0.0" 자세히 알아보려면 MongoDB Ops Manager 리소스 사양을 참조하세요.
다음 명령을 실행합니다:
kubectl apply -f ops-manager.yaml
MongoDB Ops Manager 리소스가 실행 중 상태에 도달할 때까지 기다립니다.
Kubernetes Operator는 먼저 애플리케이션 데이터베이스 복제본 세트를 배포한 다음 Ops Manager 애플리케이션을 시작합니다. 이 과정에는 수분이 걸릴 수 있습니다.
다음 명령을 실행하여 리소스 상태를 추적합니다.
kubectl get om -o yaml -w
출력에 다음 단계가 표시될 때까지 기다립니다.
status: applicationDatabase: phase: Running opsManager: phase: Running
두 구성 요소 모두 Running에 도달하면 MongoDB Ops Manager URL을 조회합니다.
kubectl get om ops-manager -o jsonpath='{.status.opsManager.url}'
이 URL을 적어 두세요. 이 정보는 나중 단계의 ConfigMap에 필요합니다.
Ops Manager의 Kubernetes 연산자를 구성합니다.
MongoDB Ops Manager UI를 사용하여 ConfigMap 및 Secret을 생성하거나 수동으로 만들 수 있습니다.
먼저 Ops Manager 서비스 포트를 로컬 매신으로 포워딩하여 브라우저에서 UI에 액세스할 수 있도록 합니다.
kubectl port-forward svc/ops-manager-svc-ext 8080:8080
그러한 다음 브라우저에서 http://localhost:8080 을 열고 관리자 비밀에서 만든 자격 증명으로 로그인합니다.
MongoDB Ops Manager UI 사용:
Create New API Keys 또는 Use Existing API Keys를 클릭합니다.
양식을 작성합니다. 자세한 내용은 Kubernetes Operator에 대한 자격 증명 생성을 참조하세요.
Generate Key and YAML를 클릭합니다.
또는 다음 단계에서 ConfigMap 및 Secret을 수동으로 만들 수 있습니다.
ConfigMap을 만들고 저장합니다.
Ops Manager UI에서 ConfigMap을 생성한 경우 생성된 config-map.yaml 파일을 복사하여 저장합니다. 그렇지 않은 경우 다음 파일을 생성하여 저장합니다. status.opsManager.url에서 Ops Manager 인스턴스의 URL을 data.baseUrl 로 설정합니다.
예시:
apiVersion: v1 kind: ConfigMap metadata: name: my-project namespace: mongodb data: baseUrl: http://ops-manager-svc.mongodb.svc.cluster.local:8080 projectName: my-project orgId: <your-org-id>
<your-org-id> 을 Ops Manager 조직 ID로 바꾸십시오. Ops Manager UI URL에서 이 값을 찾을 수 있습니다. http://<ops-manager-url>/v2#/org/<orgId>/projects.
자세한 내용은 파라미터 설명을 참조하십시오.
비밀을 만들고 저장합니다.
Ops Manager UI에서 Secret을 생성한 경우 생성된 secret.yaml 파일을 복사하여 저장합니다. 그렇지 않은 경우 시크릿 을 만들어 Ops Manager 조직의 API 키를 포함하세요.
예시:
apiVersion: v1 kind: Secret metadata: name: organization-secret namespace: mongodb stringData: publicKey: <public_key> privateKey: <private_key>
프로그래밍 API 키를 만들려면 Kubernetes Operator의 자격 증명 만들기를 참조하십시오.
MongoDB 복제본 세트 리소스 배포합니다.
다음 YAML 파일을 복사하고 저장합니다.
apiVersion: mongodb.com/v1 kind: MongoDB metadata: name: demo-mongodb-cluster-1 namespace: mongodb spec: members: 3 version: 8.0.0 type: ReplicaSet security: authentication: enabled: true modes: ["SCRAM"] opsManager: configMapRef: name: my-project credentials: organization-secret persistent: true podSpec: podTemplate: spec: containers: - name: mongodb-enterprise-database resources: limits: cpu: 2 memory: 1.5G requests: cpu: 1 memory: 1G persistence: single: storage: 10Gi 다음 명령을 실행합니다:
kubectl apply -f <replica-set-conf>.yaml
데이터베이스 사용자 비밀번호로 비밀번호를 만듭니다.
MongoDB 데이터베이스 사용자에 대한 비밀번호를 선택하고 비밀에 저장합니다. 이 비밀번호는 원하는 값이 될 수 있습니다. 다음 단계에서 데이터베이스 사용자를 만들 때 이 비밀을 참조합니다.
클리어 텍스트(사용 stringData) 또는 Base64인코딩 된 값(사용 data)으로 비밀번호를 저장할 수 있습니다.
일반 텍스트 비밀번호의 경우 다음 YAML 파일을 만들어 저장합니다:
apiVersion: v1 kind: Secret metadata: name: mms-user-1-password # corresponds to user.spec.passwordSecretKeyRef.name type: Opaque stringData: password: <my-plain-text-password> # corresponds to user.spec.passwordSecretKeyRef.key
Base64로 인코딩된 비밀번호의 경우 다음 YAML 파일을 만들어 저장합니다:
apiVersion: v1 kind: Secret metadata: name: mms-user-1-password # corresponds to user.spec.passwordSecretKeyRef.name type: Opaque data: password: <base-64-encoded-password> # corresponds to user.spec.passwordSecretKeyRef.key
자리 표시자를 선택한 비밀번호로 바꾸십시오. 자세한 내용은 SCRAM 인증을 사용하여 데이터베이스 사용자 관리를 참조하십시오.
데이터베이스 사용자를 생성합니다.
다음 MongoDB 사용자 리소스 사양 파일을 복사하여 저장합니다.
apiVersion: mongodb.com/v1 kind: MongoDBUser metadata: name: mms-scram-user-1 spec: passwordSecretKeyRef: name: mms-user-1-password # Match to metadata.name of the User Secret key: password username: "mms-scram-user-1" db: "admin" # mongodbResourceRef: name: "demo-mongodb-cluster-1" # Match to MongoDB resource using authentication roles: - db: "admin" name: "clusterAdmin" - db: "admin" name: "userAdminAnyDatabase" - db: "admin" name: "readWrite" 다음 명령을 실행합니다:
kubectl apply -f <database-user-conf>.yaml
MongoDB 복제본 세트에 연결합니다.
MongoDB Ops Manager 애플리케이션에서 다음 단계를 수행합니다.
왼쪽 탐색에서 Deployment을 클릭합니다.
연결하려는 배포서버의 을 클릭합니다.
Connect to this instance를 클릭합니다.
터미널에서 연결 명령을 실행하여 배포에 연결합니다.