컨테이너 이미지
Kubernetes 연산자를 설치하면 Quay.io 컨테이너 레지스트리에서 이미지를 가져옵니다. Kubernetes Operator 이미지는 Red Hat UBI 8 운영 체제를 기반으로 합니다. MongoDB 는 최신 운영 체제 및 지원 라이브러리 업데이트를 위해 매일 Kubernetes Operator 이미지를 재구축합니다.
공식 이미지는 다음과 같은 이점을 제공합니다.
최신 업스트림 취약점 수정을 위해 매일 재구성됩니다.
MongoDB는 이를 테스트, 유지 관리, 지원합니다.
각 이미지에 대해 사용 가능한 모든 버전을 보려면 다음 링크를 참조하세요.
이미지 이름 | 설명 |
---|---|
MongoDB Agent 이미지. | |
정적 컨테이너 및 애플리케이션 데이터베이스에 사용되는 Enterprise MongoDB 이미지입니다. | |
initContainer 이미지는 애플리케이션 데이터베이스 시작 스크립트와 준비성 프로브를 포함합니다. | |
비정적 컨테이너에 사용되는 MongoDB database 환경 이미지입니다. 정적 및 비정적 컨테이너에 대해 알아보려면 정적 컨테이너(공개 미리 보기)를 참조하세요. | |
initContainer MongoDB Agent 시작 스크립트 및 준비성 프로브가 포함된 이미지입니다. | |
Ops Manager 이미지. | |
initContainer Ops Manager 시작 스크립트 및 준비성 프로브가 포함된 이미지입니다. |
정적 컨테이너(공개 미리 보기)
정적 컨테이너는 비정적 컨테이너보다 간단하고 안전합니다. 정적 컨테이너는 런타임에 변경되지 않으므로 컨테이너 를 생성하는 데 사용된 이미지가 변경되지 않습니다. 또한 다음을 수행합니다.
을(를) 실행 하는 동안 정적 컨테이너는 네트워크 연결을 통해 바이너리를 다운로드 하거나 스크립트 또는 기타 유틸리티를 실행 하지 않습니다. 정적 컨테이너는 런타임 구성 파일만 다운로드 합니다.
을(를) 실행 하는 동안 정적 컨테이너는 저장 볼륨 마운트를 제외하고는 어떤 파일 도 수정하지 않습니다.
컨테이너 이미지에 보안 스캔을 실행 하여 실제로 무엇이 라이브 컨테이너 로 실행 되는지 확인할 수 있으며, 실행되는 컨테이너 는 이미지에 정의된 바이너리 이외의 바이너리를 실행 하지 않습니다.
정적 컨테이너는 MongoDB MongoDB Ops Manager 또는 다른 HTTPS 서버 에서 바이너리를 호스팅하다 할 필요가 없으며, 이는 에어 갭 환경이 있는 경우 특히 유용합니다.
정적 컨테이너에 대해 광범위한
CMD
스크립트를 실행할 수 없습니다.initContainer
을(를) 사용하여 정적 컨테이너 간에 파일을 복사할 수 없습니다.
참고
정적 컨테이너로 배포된 경우 Kubernetes Operator 배포서버 는 mongodb-agent
컨테이너 와 mongodb-enterprise-server
컨테이너 라는 두 개의 컨테이너로 구성됩니다. MongoDB database 사용자 지정 리소스 는 정적 컨테이너 배포서버 에서 mongod
프로세스 를 실행하는 mongodb-agent
컨테이너 에서 리소스 제한 정의를 상속합니다. MongoDB database 리소스 에 대한 리소스 제한을 수정하려면 mongodb-agent
컨테이너 에 원하는 리소스 제한을 지정해야 합니다.
MongoDB Enterprise Kubernetes Operator 1.25부터는 MongoDB Cloud Manager MongoDB Ops Manager 런타임에 , 또는 인터넷에서 바이너리를 다운로드하는 기존의 비정적 컨테이너 대신 정적 컨테이너의 Public Preview를 사용할 수 있습니다. 이 페이지의 절차를 사용하여 모든 또는 개별 MongoDB 배포에 대해 정적 컨테이너를 활성화 하거나 비활성화할 수 있습니다.
정적 컨테이너는 mongodb-enterprise-server 기본값 Quay.io 리포지토리 를 사용하지만 Kubernetes 노드 에 대해 구성한 경우 자체 레지스트리를 사용할 수 있습니다. .
아키텍처
정적 컨테이너와 비정적 컨테이너의 아키텍처는 크게 다르며, 컨테이너 간에 마이그레이션하는 데 여러 단계가 필요합니다. 자세한 내용은 정적 컨테이너 로 마이그레이션 및 비정적 컨테이너로 마이그레이션을 참조하세요.
비정적 컨테이너 아키텍처
기본 비정적 컨테이너 아키텍처는 빈 셸 컨테이너를 MongoDB Agent 부트스트랩한다고 가정하고, 를 다운로드하여 시작한 다음,mongod
mongosh
Cloud Manager 또는 MongoDB Ops Manager에서 및 에 대한 바이너리를 다운로드합니다.
정적 컨테이너 아키텍처
정적 컨테이너 아키텍처는 Kubernetes 의공유 네임스페이스 기능 을 사용합니다. MongoDB Agent 를 별도의 프로세스 로 실행 mongod
하여 전체 라이프사이클을 제어하고 네트워크를 통해 파일을 다운로드하지 않도록 합니다.
로컬 또는 원격 모드와의 호환성
정적 컨테이너를 사용하는 경우 쿼리 MongoDB Ops Manager 가능 백업을 사용하지 않는 한 로컬 모드 또는 원격 모드 에서 실행 를 구성할 필요가 없습니다. 정적 컨테이너 아키텍처에서 에이전트 및 mongod
의 바이너리에는 자체 컨테이너 이미지가 있으며 이는 MongoDB Ops Manager 에서 다운로드되지 않습니다.
쿼리 가능 백업은 예외로, 비정적 컨테이너 아키텍처에서는 기본값 백업 디먼 이 백업된 모든 버전에 대해 MongoDB Server 바이너리를 다운로드하고 실행하기 때문입니다. 이 기본값 MongoDB 동작은 백업 디먼 을 실행 하는 데 사용되는 컨테이너의 완전한 정적 특성을 손상시킵니다. 쿼리 가능 백업을 사용하는 경우에도 로컬 또는 원격 모드 를 사용하여 관련 MongoDB Server 바이너리를 호스팅하다 해야 합니다. 학습 내용은 로컬 모드를 사용 MongoDB Ops Manager MongoDB Ops Manager 리소스 구성을 참조하세요.
이전에 원격 또는 로컬 모드 를 사용한 적이 있고 쿼리 가능 백업을 사용하지 않으려는 경우 다음을 mongodb-enterprise-server
수행하여 이미지 가 노드 에서 다운로드할 수 있습니다. Pods에서 사용합니다.
Kubernetes 노드에 대한 내부 컨테이너 레지스트리를 구성합니다.
노드 Quay.io 에서 이미지를 다운로드 합니다. 로컬 컨테이너 레지스트리를 사용하지 않는 한
mongodb-enterprise-server
이미지를 다운로드하여 추가합니다.
제한 사항
정적 컨테이너를 활성화하는 경우:
백업 데몬 서비스 가 MongoDB MongoDB Ops Manager에서 바이너리 다운로드를 시도하지 않도록 쿼리 가능 백업을 비활성화 해야 하며, 이는 정적 컨테이너의 불변의 특성을 훼손합니다.
MongoDB Ops Manager 를 사용하는 경우 버전 6.0.24만, 7.0.5 이상과 호환됩니다. Kubernetes Operator는 MongoDB Agent 사용자가 MongoDB Ops Manager 특정 배포서버 서버를 관리 하기 위해 선택한 버전에 따라 올바른 버전의 컨테이너 를 자동으로 사용합니다.
MongoDB Cloud Manager 를 사용하면 Kubernetes Operator가 MongoDB Cloud Manager 에서
agentVersion
엔드포인트를 호출할 수 없기 때문에 MongoDB Agent 버전이 최신 버전의 MongoDB Cloud Manager 와 호환되지 않을 수 있습니다. MongoDB Cloud Manager 를 사용하여 MongoDB Agent 를 최신 상태로 유지하려면 다음 작업 중 하나를 수행하면 됩니다.StatefulSet 을 재정의하여 MongoDB 리소스 사양 에서 호환되는 MongoDB Agent 버전을 지정합니다. MongoDB Agent 용 컨테이너 이미지입니다. 예를 예시 다음과 같습니다.
podSpec: podTemplate: spec: containers: - name: mongodb-agent-ubi Image: 12.0.29.7785-1_1.24.0 Kubernetes Operator를 최신 버전으로 업그레이드 하면 MongoDB Agent가 자동으로 업데이트됩니다.
Atlas MongoDB 버전 업그레이드 마지막 순서에서 첫 번째 순서로 모든 파드를 순차적으로 재시작하며, 파드 수에 따라 더 많은 투표 가 발생할 수 있습니다. 이는 롤링 재시작을 trigger 하는 모든 업데이트에 해당됩니다.
MongoDB Agent의 상태 에서는 업그레이드가 발생했는지 여부를 확인할 수 MongoDB database 없습니다. 업그레이드 후 Kubernetes가 Pods를 회전하면 MongoDB Agent가 상태 파일을 교체하므로 상태에서 버전 변경이 발생했는지 알 수 없고 현재 상태만 알 수 있습니다.
자주 묻는 질문
정적 컨테이너는 로컬 또는 원격 모드 지원 하나요?
아니요, 정적 컨테이너를 사용하는 MongoDB Ops Manager 경우 쿼리 가능 백업을 사용하지 않는 한 로컬 모드 또는 원격 모드 에서 실행 를 구성할 필요가 없습니다. 학습 내용은 로컬 및 원격 모드를 참조하세요.
정적 컨테이너의 변경 사항은 무엇인가요?
정적 컨테이너는 런타임에 MongoDB 바이너리를 다운로드 하지 않습니다. 대신 mongodb-enterprise-server 의 이미지를 사용합니다. Quay.io 리포지토리. 변경 사항에 학습 보려면 6 단계를 참조하세요.
배포서버 가 정적에서 실행 어떻게 확인할 수 있나요?
배포서버 에서 정적 컨테이너 를 사용하고 있는지 확인하는 방법에는 여러 가지가 있습니다. 학습 보려면 7 단계를 참조하세요.
정적 컨테이너로 마이그레이션
비정적 컨테이너에서 정적 컨테이너로 마이그레이션하려면 아래 단계에 따라 MongoDB Agent 환경 변수를 설정하고 정적 컨테이너를 활성화하세요. 설치 또는 업그레이드 중에 정적 컨테이너를 활성화할 수도 있습니다.
제한 사항을 검토합니다.
쿼리 가능 백업을 비활성화합니다.
쿼리 가능 백업 을 사용하려면 MongoDB Ops Manager 로컬 모드 또는 원격 모드 를 사용하도록 리소스 를 구성해야 사용 중인 모든 버전의 바이너리를 에서 가져올 수 MongoDB Ops Manager 있습니다.
초기화 컨테이너에 대한 StatefulSet 재정의를 제거합니다(있는 경우).
정적 컨테이너 아키텍처와 함께 사용되는 init 컨테이너는 없습니다. init 컨테이너 에 대한 재정의가 있는 경우 비정적 컨테이너에서 정적 컨테이너로의 마이그레이션 이 실패합니다.
MongoDB MongoDB 리소스 사양 또는 MongoDB Ops MongoDB Ops Manager Manager 리소스 사양에서 초기화 컨테이너에 대한 StatefulSet 재정의를 제거합니다. 예를 예시 initContainers
에 대해 다음 설정 중 하나가 구성되지 않았는지 확인합니다.
Ops Manager:
spec.statefulSet.spec
애플리케이션 데이터베이스:
spec.applicationDatabase.podSpec
Database: StatefulSet 설정
멀티 클러스터: spec.statefulSet.spec
MongoDB Agent 이미지에 대한 환경 변수를 설정합니다.
Kubernetes Operator 구성 파일 에서 MDB_AGENT_IMAGE_REPOSITORY 환경 변수를 정의하여 Kubernetes Operator가 정적 컨테이너용 MongoDB Agent 이미지를 다운로드하는 리포지토리 를 지정합니다.
Kubernetes Operator Helm 차트 에서 레지스트리를 정의합니다. 에이전트 및 에이전트 .name 을 사용하여 Kubernetes Operator가 정적 컨테이너용 MongoDB Agent 이미지를 다운로드하는 리포지토리 를 지정합니다.
파일 을 저장하고 적용 합니다.
변경 사항을 저장한 후 구성을 다시 적용합니다.
OpenShift 없이 Kubernetes 를 사용하는 경우 다음을 실행.
kubectl apply -f mongodb-enterprise.yaml
OpenShift 와 함께 Kubernetes 를 사용하는 경우:
oc apply -f mongodb-enterprise-openshift.yaml
helm upgrade enterprise-operator mongodb/enterprise-operator \ --set registry.pullPolicy='IfNotPresent'
이렇게 하면 배포에 있는 모든 파드의 롤링 재시작이 시작됩니다.
정적 컨테이너를 활성화합니다.
아래에서 적절한 탭 을 선택하여 기존 배포를 포함한 모든 MongoDB 배포에 대한 정적 컨테이너를 한 번에 활성화 하거나 한 번에 하나의 배포서버 를 활성화할 수 있습니다.
Kubernetes 연산자 구성 파일 에서 MDB_DEFAULT_ARCHITECTURE 또는 연산자 .mdbDefaultarchitecture 를 설정하다 합니다. static
로 설정합니다.
특정 배포서버 에 대한 MongoDB 리소스 사양 에서 metadata.annotations.mongodb.com/v1.architecture
주석을 static
로 설정하다 합니다.
파일 을 저장하고 적용 합니다.
변경 사항을 저장한 후 구성을 다시 적용합니다.
OpenShift 없이 Kubernetes 를 사용하는 경우 다음을 실행.
kubectl apply -f <my-config-file>.yaml
OpenShift 와 함께 Kubernetes 를 사용하는 경우:
oc apply -f <my-config-file>.yaml
helm upgrade enterprise-operator mongodb/enterprise-operator \ --set <setting_1> --set <setting_2> --set operator.mdbDefaultArchitecture="static"
Kubernetes Operator가 StatefulSet 를 업데이트합니다. 이전에 MongoDB Agent 와 MongoDB database 를 모두 managed 했던 단일 컨테이너 에서 MongoDB MongoDB Agent 용 컨테이너와 MongoDB MongoDB database 용 컨테이너라는 두 개의 별도 컨테이너가 있는 새로운 구성으로 전환 MongoDB deployment . 이 업데이트 는 롤링 재시작 을 시작합니다.
정적 컨테이너 마이그레이션 하면 다음 변경 사항이 적용.
Kubernetes 노드 구성된 컨테이너 레지스트리를 사용하여 다운로드를 수행합니다.
모니터링 에이전트 와 자동화 에이전트 버전이 일치합니다.
에이전트 대신 Kubernetes Operator가 MongoDB 업그레이드를 처리합니다.
Kubernetes Operator는 기존 이미지를 대체하므로 롤링 재시작 이 발생합니다.
비정적 컨테이너로 마이그레이션
정적 컨테이너에서 비정적 컨테이너로 마이그레이션하려면 아래 단계에 따라 정적 컨테이너를 비활성화하세요. 설치 또는 업그레이드 중에 정적 컨테이너를 비활성화할 수도 있습니다.
정적 컨테이너를 비활성화합니다.
기존 배포를 포함한 모든 MongoDB 배포에 대한 정적 컨테이너를 한 번에 비활성화하거나 한 번에 하나의 배포를 비활성화하려면 아래에서 적절한 탭을 선택합니다.
Kubernetes 연산자 구성 파일 에서 MDB_DEFAULT_ARCHITECTURE 또는 연산자 .mdbDefaultarchitecture 를 설정하다 합니다. non-static
로 설정합니다.
특정 배포서버 에 대한 MongoDB 리소스 사양 에서 metadata.annotations.mongodb.com/v1.architecture
주석을 non-static
로 설정하다 합니다.
파일 을 저장하고 적용 합니다.
변경 사항을 저장한 후 구성을 다시 적용합니다.
OpenShift 없이 Kubernetes 를 사용하는 경우 다음을 실행.
kubectl apply -f <my-config-file>.yaml
OpenShift 와 함께 Kubernetes 를 사용하는 경우:
oc apply -f <my-config-file>.yaml
helm upgrade enterprise-operator mongodb/enterprise-operator \ --set <setting_1> --set <setting_2> --set operator.mdbDefaultArchitecture="non-static"
Kubernetes Operator는 StatefulSet 를 대체합니다. MongoDB 배포의 이미지를 생성하고 배포에 있는 모든 파드의 롤링 재시작을 시작합니다.