복제 세트 배포
참고
이 페이지의 어느 곳에서나 Ops Manager라고 표시된 곳에서는 Cloud Manager로 대체할 수 있습니다.
중요
Kubernetes Operator를 사용하여 Cloud Manager 및 Ops Manager 버전 6.0.x 이상과 함께 MongoDB 리소스를 배포할 수 있습니다.
Atlas Operator 를 사용하여 MongoDB 리소스를 Atlas에 배포할 수 있습니다.
경고
Kubernetes Operator는 중재자 노드를 지원하지 않습니다.
복제본 세트는 동일한 데이터 세트를 유지하는 MongoDB 배포서버 그룹입니다. 복제본 세트는 중복성과 고가용성을 제공하며 모든 프로덕션 배포의 기반이 됩니다.
복제본 세트에 대한 자세한 내용은 MongoDB 매뉴얼의 복제 소개를 참조하세요.
이 절차에 따라 Ops Manager가 관리하는 복제본 세트를 배포하세요. 배포 후에는 Ops Manager를 사용하여 노드 추가, 제거, 재구성 등의 작업을 포함하여 복제본 세트를 관리합니다.
고려 사항
Kubernetes 연산자를 통해 복제본 세트를 배포할 때 TLS 인증서를 사용하여 연결을 암호화할지 여부를 선택해야 합니다.
TLS-Encrypted 연결에 대한 절차는 다음과 같습니다.
복제본 세트의 MongoDB 호스트 간에 TLS-encrypted 연결을 설정합니다.
클라이언트 애플리케이션과 MongoDB deployment 간에 TLS로 암호화된연결을 설정합니다.
TLS 암호화를 위해 유효한 인증서가 필요합니다.
Non-Encrypted Connections에 대한 절차는 다음과 같습니다.
복제본 세트의 MongoDB 호스트 간의 연결을 암호화하지 않습니다.
클라이언트 애플리케이션과 MongoDB deployment 간의 연결을 암호화하지 않습니다.
TLS-encrypted 연결을 사용하는 배포보다 설정 요구 사항이 적습니다.
참고
Kubernetes cluster에서 MongoDB의 독립형 인스턴스를 보호할 수 없습니다.
샤딩된 클러스터 에 대한 TLS 암호화 를 설정하다 하려면 샤드 클러스터배포를 참조하세요.
복제본 세트 연결을 TLS로 암호화할지 여부에 따라 적절한 탭을 선택합니다.
전제 조건
객체 를 사용하여 복제본 세트 를 배포 하려면 다음을 수행해야 합니다.
MongoDB Enterprise Kubernetes Operator를 보유하거나 설치합니다.
Kubernetes Operator ConfigMap을 생성하거나 작성합니다.
Kubernetes Operator에 대한 자격 증명을 생성하거나 다른 시크릿 저장 도구를 구성합니다.
참고
단일 클러스터 Kubernetes 배포에 시크릿이 저장되지 않도록 하려면 모든 시크릿 을 마이그레이션할 수 있습니다. 비밀 저장 도구 에 저장합니다. 여러 Kubernetes 클러스터에 대한 배포는 HashiCorp Vault 와 같은 비밀 저장소 도구에 비밀을 저장하는 것을 지원하지 않습니다. .
다음 구성 요소 각각에 대해 하나의 TLS 인증서를 생성합니다.
복제본 세트입니다. 복제본 세트의 구성원을 인증서에 호스팅하는 각 Kubernetes Pod에 대해 SAN을 추가했는지 확인하세요.
TLS 인증서에서 각 포드의 SAN은 다음 형식을 사용해야 합니다.
<pod-name>.<metadata.name>-svc.<namespace>.svc.cluster.local 중요
Let's Encrypt 와 같은 ACME기반 서비스 제공자 를 사용하는 경우 TLS 인증서를 발급하기 위해 제공자 는 사용자가 Pod의 기본값 FQDN (
*.svc.cluster.local
)을 인증서의 SAN에 추가하지 못하도록 할 수 있습니다.ACME 기반 인증서를 사용하려면 복제본 세트 리소스 에 대한 인증서를 구성해야 합니다. 학습 보려면 절차의 ACME 기반 TLS 인증서에 대한 단계를 참조하세요 .
프로젝트의 MongoDB Agent입니다. MongoDB Agent 인증서의 경우 다음 요구 사항을 충족하는지 확인하세요.
TLS 인증서의 일반 이름이 비어 있지 않습니다.
각 TLS 인증서의 결합된 조직 및 조직 구성 단위는 복제본 세트 멤버에 대한 TLS 인증서의 조직 및 조직 구성 단위와 다릅니다.
CA 인증서 파일 이 있어야 하며 이름이
ca-pem
이어야 합니다.TLS 인증서에 서명할 때 사용한 키가 있어야 합니다.
중요
Kubernetes Operator는 다음을 사용합니다.kubernetes.io/tls 시크릿을 사용하여 MongoDB Ops Manager 및 리소스에 대한 TLS 인증서 및 비공개 키를 저장 MongoDB 합니다. Kubernetes Operator 버전 1 부터 시작됩니다.17.0, Kubernetes Operator는 Opaque 시크릿 으로 저장된 연결된 PEM 파일을 지원 하지 않습니다.
객체 를 사용하여 복제본 세트를 배포하려면 다음을 수행합니다. ,다음을 수행해야 합니다.
MongoDB Enterprise Kubernetes Operator를 보유하거나 설치합니다.
Kubernetes Operator ConfigMap을 생성하거나 작성합니다.
Kubernetes Operator에 대한 자격 증명을 생성하거나 다른 시크릿 저장 도구를 구성합니다.
참고
단일 클러스터 Kubernetes 배포에 시크릿이 저장되지 않도록 하려면 모든 시크릿 을 마이그레이션할 수 있습니다. 비밀 저장 도구 에 저장합니다. 여러 Kubernetes 클러스터에 대한 배포는 HashiCorp Vault 와 같은 비밀 저장소 도구에 비밀을 저장하는 것을 지원하지 않습니다. .
복제 세트 배포
네임스페이스 kubectl
를 기본값 으로 구성합니다.
아직 실행하지 않았다면 다음 명령을 실행하여 생성한 네임스페이스에서 kubectl
명령을 모두 실행합니다.
참고
다중 Kubernetes 클러스터 MongoDB deployment에서 MongoDB Ops Manager 리소스를 배포하는 경우:
context
을 중앙 클러스터의 이름(예:kubectl config set context "$MDB_CENTRAL_CLUSTER_FULL_NAME"
)으로 설정합니다.--namespace
를 다중 Kubernetes 클러스터 MongoDB 배포에 사용한 것과 동일한 범위 (예:kubectl config --namespace "mongodb"
로 설정합니다.
kubectl config set-context $(kubectl config current-context) --namespace=<metadata.namespace>
복제본 세트의 TLS 인증서에 대한 시크릿을 생성합니다.
이 kubectl
명령을 실행하여 복제본 세트의 인증서를 저장하는 새 암호를 만듭니다.
kubectl create secret tls <prefix>-<metadata.name>-cert \ --cert=<replica-set-tls-cert> \ --key=<replica-set-tls-key>
참고
시크릿 앞에 <prefix>-<metadata.name>
을(를) 붙여야 합니다.
예를 예시 my-deployment
mdb
배포서버 서버를 호출하고 접두사를 로 설정하다 하는 경우 클라이언트 TLS 통신에 대한 TLS 시크릿의 이름을 로 지정해야 mdb-my-deployment-cert
합니다. 또한 내부 클러스터 인증 (활성화된 경우)을 위한 TLS 시크릿의 이름을 mdb-my-deployment-clusterfile
로 지정해야 합니다.
HashiCorp Vault 를 사용하는 경우 대신 볼트 시크릿을 생성 할 수 있습니다.
시크릿 스토리지 옵션에 대한 자세한 내용은 시크릿 스토리지 구성을 참조하세요.
에이전트의 TLS 인증서에 대한 시크릿을 생성합니다.
이 kubectl
명령을 실행하여 에이전트의 TLS 인증서를 저장하는 새 시크릿을 만듭니다.
kubectl create secret tls <prefix>-<metadata.name>-agent-certs \ --cert=<agent-tls-cert> \ --key=<agent-tls-key>
HashiCorp Vault 를 사용하는 경우 대신 볼트 시크릿을 생성 할 수 있습니다.
ConfigMap을 생성하여 CA를 배포서버 서버와 연결합니다.
이 kubectl
명령을 실행하여 CA를 복제본 세트에 연결하고 CA 인증서 파일을 지정합니다.
중요
Kubernetes Operator를 사용하려면 MongoDB
리소스의 인증서 이름이 ConfigMap에서 ca-pem
이어야 합니다.
kubectl create configmap custom-ca --from-file=ca-pem=<your-custom-ca-file>
샘플 복제본 세트 리소스 를 복사합니다.
원하는 복제본 세트 구성과 일치하도록 이 YAML파일의 설정을 변경합니다.
1 2 apiVersion: mongodb.com/v1 3 kind: MongoDB 4 metadata: 5 name: <my-replica-set> 6 spec: 7 members: 3 8 version: "4.2.2-ent" 9 opsManager: 10 configMapRef: 11 # Must match metadata.name in ConfigMap file 12 name: <configMap.metadata.name> 13 credentials: <mycredentials> 14 type: ReplicaSet 15 persistent: true 16 ...
16 security: 17 tls: 18 ca: <custom-ca> 19 certsSecretPrefix: <prefix> 20 ...
원하는 값으로 설정을 변경합니다.
키 | 유형 | 설명 | 예시 |
---|---|---|---|
문자열 | 이 Kubernetes 복제본 세트 객체 에 대한 레이블 . 리소스 이름은 44자 이내여야 합니다. 학습 내용은 및 | myproject | |
integer | 3 | ||
문자열 | 이 복제본 세트 가 실행되어야 하는 MongoDB의 버전입니다. 형식은 커뮤니티 에디션의 경우 중요: 호환되는 MongoDB Server 버전 을 선택해야 합니다. 호환되는 버전은 MongoDB database 리소스 가 사용하는 기본 이미지에 따라 다릅니다. MongoDB 버전 관리에 대해 자세히 알아보려면 MongoDB 매뉴얼의 MongoDB 버전 관리를 참조하세요. | 6.0.0-ent | |
문자열 | ConfigMap 의 이름 MongoDB Ops Manager 연결 구성을 사용합니다. 이 값은 생성하려는 리소스와 동일한 네임스페이스에 존재해야 합니다. 중요: Kubernetes Operator는 ConfigMap에 대한 모든 변경 사항을 추적하고 | <myconfigmap> | |
문자열 | Operator가 MongoDB Ops Manager와 통신할 수 있도록 MongoDB Ops Manager API 인증 자격 증명으로 생성 한 시크릿의 이름입니다.Kubernetes 자격 증명을 보유하고 있는 Ops Manager 쿠버네티스 시크릿 객체는 생성하려는 리소스와 동일한 네임스페이스에 존재해야 합니다. 중요: Kubernetes Operator는 시크릿에 대한 모든 변경 사항을 추적하고 | <mycredentials> | |
문자열 | 생성하고자 하는 MongoDB 리소스 유형입니다. | ReplicaSet | |
문자열 | 선택 사항. 이 이 값이 영구 볼륨 클레임 을 변경하려면 배포 요구 사항을 충족하도록 다음 컬렉션을 구성합니다.
경고: 컨테이너에 영구 볼륨 에 쓰기 (write) 수 있는 권한을 부여합니다. . Kubernetes Operator는 영구 볼륨 을 Disk Usage Disk IOPS 사용하지 않는 Processes 경우 , 및 Atlas Deployment 차트는 Metrics 이 배포에 대한 데이터를 검토 할 때 페이지의 탭 또는 페이지에 표시될 수 없습니다. | true |
사용자 지정 인증 기관(CA)을 사용하여 복제본 세트 리소스 에대한 TLS 설정을 구성합니다.
배포서버에서 TLS를 활성화하려면, Kubernetes 객체에서 다음 설정을 구성합니다.
키 | 유형 | 필요성 | 설명 | 예시 |
---|---|---|---|---|
spec.security | 문자열 | 필수 사항 | <custom-ca> | |
spec.security | 문자열 | 필수 사항 | MongoDB deployment의 TLS 인증서가 포함된 시크릿 이름의 예를 예시 | devDb |
선택 사항:복제본 세트 리소스 에 대한 ACME 기반 TLS 인증서를 구성합니다.
Let's Encrypt 와 같은 ACME기반 서비스 제공자 를 사용하는 경우 TLS 인증서를 발급하기 위해 제공자 가 Pod의 기본값 FQDN (*.svc.cluster.local
)을 인증서의 SAN에 추가하지 못하도록 할 수 있습니다.
Pod의 FQDN을 포함하지 않는 인증서를 구성하려면 다음을 수행합니다.
외부 도메인에 대한 인증서를 발급합니다. 자세한 내용은 암호화 시작하기 문서 를 참조하세요. 또는 제공자용 설명서를 참조하세요.
인증서에 복제본 세트에 배포하려는 모든 호스트 이름이 포함되어 있는지 확인합니다. 또는
*.<externalDomain>
에 대한 와일드카드 인증서를 발급할 수 있습니다.복제본 세트 배포서버에 외부 도메인만 포함된 인증서를 사용하려면 복제본 세트에서 사용하는 기본 호스트 이름을 변경해야 합니다.
Kubernetes 클러스터 를 생성하는 동안 호스트 이름을 구성하려면 기본값 domain 을
cluster.local
변경합니다. Kubernetes 클러스터 를 만들거나 다시 만들 때 에서 외부 도메인으로 . 그런 다음spec.clusterDomain
설정을 사용하여 MongoDB 리소스 에서 이 도메인을 설정하다 합니다.그렇지 않으면 Kubernetes 객체에 구성된 다음 설정을 사용하여 MongoDB 배포서버를 만듭니다.
키 | 유형 | 필요성 | 설명 | |||||||
---|---|---|---|---|---|---|---|---|---|---|
spec.externalAccess | 문자열 | 필수 사항 | 복제본 세트 배포를 외부에 노출하는 데 사용되는 외부 도메인입니다. 기본적으로 각 복제본 세트 멤버는 Kubernetes Pod의 FQDN(
예를 들면 다음과 같습니다.
이 설정을 사용하여 복제본 세트를 배포한 후 Kubernetes Operator는 외부 도메인이 있는 호스트 이름을 사용하여 MongoDB Ops Manager 자동화 구성 의 복제본 세트에 연결하기 위한 다른 호스트 이름을 지정하려면 경고: 이 필드 지정하면 MongoDB Ops Manager 가 | |||||||
spec.externalAccess | 컬렉션 | 옵션 | ServiceSpec에 대한 구성입니다.
Kubernetes 사양에 대한 자세한 내용은 Kubernetes 설명서의 ServiceSpec을 참조하세요. | |||||||
spec.externalAccess | 컬렉션 | 옵션 | 배포의 모든 클러스터에 클라우드 제공자별 구성 설정을 추가할 수 있는 키-값 쌍입니다. 자세히 알아보려면 주석 을 참조하세요. 및 Kubernetes 클라우드 제공자에 대한 설명서를 참조하세요. 자리 표시자 값을 지정하여 주석을 사용자 지정할 수 있습니다. 자세한 내용은 |
복제본 세트 배포서버 에 대해 허용된 추가설정을 추가합니다.
다음과 같은 선택적 설정 중 하나를 객체 에 추가할 수도 있습니다. 복제본 세트 배포를 위한 사양 파일입니다.
경고
spec.clusterDomain
Kubernetes 클러스터에 기본 도메인 이 있는 경우 cluster.local
를 설정해야 합니다. 기본값 이외. 기본값을 사용하지 않거나 spec.clusterDomain
옵션을 설정하지 않으면 Kubernetes Operator가 예상대로 작동하지 않을 수 있습니다.
이 복제본 세트 구성 파일 을 .yaml
확장자로 저장합니다.
복제본 세트 배포서버 를 시작합니다.
모든 디렉토리에서 다음 Kubernetes 명령을 호출하여 복제본 세트를 만듭니다.
kubectl apply -f <replica-set-conf>.yaml
복제본 세트 배포서버 의 상태를추적합니다.
MongoDB
리소스의 상태를 확인하려면 다음 명령어를 사용하세요.
kubectl get mdb <resource-name> -o yaml -w
-w
(watch) 플래그 설정이 적용된 경우, 구성이 변경되면 상태 단계가 Running
상태를 달성할 때까지 출력이 즉시 새로 고침 됩니다. 리소스 배포 상태에 대해 자세히 알아보려면 Kubernetes Operator 문제 해결을 참조하세요.
TLS로 데이터베이스 리소스를 암호화한 후 다음을 보호할 수 있습니다.
복제본 세트에 대한 TLS 인증서 갱신
다음 절차를 사용하여 TLS 인증서를 정기적으로 갱신하십시오.
네임스페이스 kubectl
를 기본값 으로 구성합니다.
아직 실행하지 않았다면 다음 명령을 실행하여 생성한 네임스페이스에서 kubectl
명령을 모두 실행합니다.
참고
다중 Kubernetes 클러스터 MongoDB deployment에서 MongoDB Ops Manager 리소스를 배포하는 경우:
context
을 중앙 클러스터의 이름(예:kubectl config set context "$MDB_CENTRAL_CLUSTER_FULL_NAME"
)으로 설정합니다.--namespace
를 다중 Kubernetes 클러스터 MongoDB 배포에 사용한 것과 동일한 범위 (예:kubectl config --namespace "mongodb"
로 설정합니다.
kubectl config set-context $(kubectl config current-context) --namespace=<metadata.namespace>
TLS 인증서의 시크릿을 갱신합니다.
이 kubectl
명령을 실행하여 복제본 집합의 인증서를 저장하는 기존 암호를 갱신합니다.
kubectl create secret tls <prefix>-<metadata.name>-cert \ --cert=<replica-set-tls-cert> \ --key=<replica-set-tls-key> \ --dry-run=client \ -o yaml | kubectl apply -f -
네임스페이스 kubectl
를 기본값 으로 구성합니다.
아직 실행하지 않았다면 다음 명령을 실행하여 생성한 네임스페이스에서 kubectl
명령을 모두 실행합니다.
참고
다중 Kubernetes 클러스터 MongoDB deployment에서 MongoDB Ops Manager 리소스를 배포하는 경우:
context
을 중앙 클러스터의 이름(예:kubectl config set context "$MDB_CENTRAL_CLUSTER_FULL_NAME"
)으로 설정합니다.--namespace
를 다중 Kubernetes 클러스터 MongoDB 배포에 사용한 것과 동일한 범위 (예:kubectl config --namespace "mongodb"
로 설정합니다.
kubectl config set-context $(kubectl config current-context) --namespace=<metadata.namespace>
샘플 복제본 세트 리소스 를 복사합니다.
원하는 복제본 세트 구성과 일치하도록 이 YAML파일의 설정을 변경합니다.
1 2 apiVersion: mongodb.com/v1 3 kind: MongoDB 4 metadata: 5 name: <my-replica-set> 6 spec: 7 members: 3 8 version: "4.2.2-ent" 9 opsManager: 10 configMapRef: 11 # Must match metadata.name in ConfigMap file 12 name: <configMap.metadata.name> 13 credentials: <mycredentials> 14 type: ReplicaSet 15 persistent: true 16 ...
원하는 값으로 설정을 변경합니다.
키 | 유형 | 설명 | 예시 |
---|---|---|---|
문자열 | 이 Kubernetes 복제본 세트 객체 에 대한 레이블 . 리소스 이름은 44자 이내여야 합니다. 학습 내용은 및 | myproject | |
integer | 3 | ||
문자열 | 이 복제본 세트 가 실행되어야 하는 MongoDB의 버전입니다. 형식은 커뮤니티 에디션의 경우 중요: 호환되는 MongoDB Server 버전 을 선택해야 합니다. 호환되는 버전은 MongoDB database 리소스 가 사용하는 기본 이미지에 따라 다릅니다. MongoDB 버전 관리에 대해 자세히 알아보려면 MongoDB 매뉴얼의 MongoDB 버전 관리를 참조하세요. | 6.0.0-ent | |
문자열 | ConfigMap 의 이름 MongoDB Ops Manager 연결 구성을 사용합니다. 이 값은 생성하려는 리소스와 동일한 네임스페이스에 존재해야 합니다. 중요: Kubernetes Operator는 ConfigMap에 대한 모든 변경 사항을 추적하고 | <myconfigmap> | |
문자열 | Operator가 MongoDB Ops Manager와 통신할 수 있도록 MongoDB Ops Manager API 인증 자격 증명으로 생성 한 시크릿의 이름입니다.Kubernetes 자격 증명을 보유하고 있는 Ops Manager 쿠버네티스 시크릿 객체는 생성하려는 리소스와 동일한 네임스페이스에 존재해야 합니다. 중요: Kubernetes Operator는 시크릿에 대한 모든 변경 사항을 추적하고 | <mycredentials> | |
문자열 | 생성하고자 하는 MongoDB 리소스 유형입니다. | ReplicaSet | |
문자열 | 선택 사항. 이 이 값이 영구 볼륨 클레임 을 변경하려면 배포 요구 사항을 충족하도록 다음 컬렉션을 구성합니다.
경고: 컨테이너에 영구 볼륨 에 쓰기 (write) 수 있는 권한을 부여합니다. . Kubernetes Operator는 영구 볼륨 을 Disk Usage Disk IOPS 사용하지 않는 Processes 경우 , 및 Atlas Deployment 차트는 Metrics 이 배포에 대한 데이터를 검토 할 때 페이지의 탭 또는 페이지에 표시될 수 없습니다. | true |
복제본 세트 배포서버 에 대해 허용된 추가설정을 추가합니다.
다음과 같은 선택적 설정 중 하나를 객체 에 추가할 수도 있습니다. 복제본 세트 배포를 위한 사양 파일입니다.
경고
spec.clusterDomain
Kubernetes 클러스터에 기본 도메인 이 있는 경우 cluster.local
를 설정해야 합니다. 기본값 이외. 기본값을 사용하지 않거나 spec.clusterDomain
옵션을 설정하지 않으면 Kubernetes Operator가 예상대로 작동하지 않을 수 있습니다.
이 복제본 세트 구성 파일 을 .yaml
확장자로 저장합니다.
복제본 세트 배포서버 를 시작합니다.
모든 디렉토리에서 다음 Kubernetes 명령을 호출하여 복제본 세트를 만듭니다.
kubectl apply -f <replica-set-conf>.yaml
복제본 세트 배포서버 의 상태를추적합니다.
MongoDB
리소스의 상태를 확인하려면 다음 명령어를 사용하세요.
kubectl get mdb <resource-name> -o yaml -w
-w
(watch) 플래그 설정이 적용된 경우, 구성이 변경되면 상태 단계가 Running
상태를 달성할 때까지 출력이 즉시 새로 고침 됩니다. 리소스 배포 상태에 대해 자세히 알아보려면 Kubernetes Operator 문제 해결을 참조하세요.