중요
이 섹션은 단일 Kubernetes 클러스터 배포에만 적용됩니다. 다중 Kubernetes cluster MongoDB deployment의 경우 개요 를 참조하세요.
MongoDB Controllers for Kubernetes Operator는 Kubernetes API와 도구를 사용하여 Kubernetes 클러스터 내에서 실행되는 MongoDB 클러스터를 관리합니다. Kubernetes Operator는 Ops Manager와 함께 작동합니다. 이 튜토리얼에서는 Kubernetes Operator를 사용하여 Kubernetes에 Ops Manager를 배포한 다음 첫 번째 MongoDB 복제본 세트를 배포하고 연결하는 방법을 설명합니다. Kind를 사용하여 클러스터를 빠르게 설정할 수 있습니다. 자세한 내용은 Kind를 참조하세요.
이 튜토리얼을 사용하여 Kubernetes Operator를 평가해 보세요. Kind는 로컬 머신에서 단일 노드를 실행하기 때문에 여기서 생성하는 배포서버는 노드 손실을 견딜 수 없으며 프로덕션 트래픽에 적합하지 않습니다. 완료한 후, 다음 단계를 참조하여 프로덕션 배포서버로 이동하는 방법을 학습합니다.
전제 조건
이 튜토리얼에는 다음이 필요합니다.
실행 중인 Kubernetes 클러스터.
로컬 마신에 설치된 Helm.
지원되는 hardware 아키텍처에서실행되는 Kubernetes 노드.
로컬 머신에 설치된 MongoDB Shell .
Docker Desktop에서 Kind를 사용하는 경우, Docker Desktop 리소스 설정에서 최소한 8 GB의 메모리와 4 CPU를 할당해야 합니다. Ops Manager는 애플리케이션에 최소 5 GB의 메모리가 필요하며, 애플리케이션 데이터베이스 및 Kubernetes 연산자를 위해 추가 리소스가 필요합니다.
절차
Kubernetes 용 MongoDB Helm Charts 리포지토리 Helm에 추가합니다.
helm repo add mongodb https://mongodb.github.io/helm-chartsKubernetes Operator용 MongoDB 컨트롤러 설치
Helm을 사용하여 Kubernetes Operator를 설치하려면, 리포지토리의 지침을 참조하세요.
예시
다음 명령은 선택적 --create-namespace 옵션을 사용하여 mongodb 네임스페이스 에 Kubernetes Operator용 MongoDB 컨트롤러를 설치합니다. 기본값 으로 Kubernetes Operator는 default 네임스페이스 사용합니다.
helm install kubernetes-operator mongodb/mongodb-kubernetes --namespace mongodb --create-namespaceMongoDB 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/v1kind: MongoDBOpsManagermetadata: name: ops-manager namespace: mongodbspec: 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: v1kind: ConfigMapmetadata: name: my-project namespace: mongodbdata: 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.
자세한 내용은 파라미터 설명을 참조하십시오.
비밀을 만들고 저장합니다.
MongoDB Ops Manager UI에서 Secret을 생성한 경우, 생성된 secret.yaml 파일을 복사하여 저장하세요. 그렇지 않으면 MongoDB Ops Manager 조직의 API 키가 포함된 secret 을 생성하세요.
예시:
apiVersion: v1kind: Secretmetadata: name: organization-secret namespace: mongodbstringData: publicKey: <public_key> privateKey: <private_key>Programmatic API 키를 만들려면, Kubernetes 연산자용 자격 증명 만들기를 참조하세요.
MongoDB 복제본 세트 리소스 배포.
다음 YAML 파일을 복사하고 저장합니다.
apiVersion: mongodb.com/v1kind: MongoDBmetadata: name: demo-mongodb-cluster-1 namespace: mongodbspec: 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: v1kind: Secretmetadata: name: mms-user-1-password # corresponds to user.spec.passwordSecretKeyRef.nametype: OpaquestringData: password: <my-plain-text-password> # corresponds to user.spec.passwordSecretKeyRef.keyBase64로 인코딩된 비밀번호의 경우 다음 YAML 파일을 만들어 저장합니다:
apiVersion: v1kind: Secretmetadata: name: mms-user-1-password # corresponds to user.spec.passwordSecretKeyRef.nametype: Opaquedata: password: <base-64-encoded-password> # corresponds to user.spec.passwordSecretKeyRef.key자리 표시자를 선택한 비밀번호로 바꾸십시오. 자세한 내용은 SCRAM 인증을 사용하여 데이터베이스 사용자 관리를 참조하십시오.
데이터베이스 사용자를 생성합니다.
다음 MongoDB 사용자 리소스 사양 파일을 복사하여 저장합니다.
apiVersion: mongodb.com/v1kind: MongoDBUsermetadata: name: mms-scram-user-1spec: 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를 클릭합니다.
터미널에서 연결 명령을 실행하여 배포에 연결합니다.
다음 단계
생성한 배포서버는 단일 Kind 노드에서 실행되며 기본값 리소스 설정을 사용합니다. 이 평가 배포에서 생산 배포로 이동하려면:
주요 배포서버 계획을 통해 아키텍처를 선택하고, 버전 호환성을 확인하고, Kubernetes 연산자 배포서버 범위를 설정합니다.
노드가 두 개 이상이고 볼륨 확장을 지원하는
storageClass가 있는 생산 Kubernetes 클러스터에 Kubernetes 연산자를 설치합니다.배포서버 보안을 TLS, 인증 및 미사용 데이터 암호화를 이용하여 확보합니다.
클러스터 전체의 손실에서 벗어나야 하는 경우 여러 Kubernetes 클러스터에 배포 합니다.