이 페이지는 자체 관리형 복제본 세트 또는 클러스터를 가상 머신에서 Kubernetes 연산자 하의 Kubernetes로 마이그레이션하는 동안 발생할 수 있는 플러그인 가져오기 실패, 드라이실행 및 연결 문제, 인증 불일치, 유효성 검사 오류 등의 문제를 진단하는 데 도움이 됩니다. 마이그레이션 워크플로에 대한 배경 정보는 자체 관리형 배포서버를 Kubernetes로 마이그레이션을 참조하세요.
마이그레이션에서 어디짜 왔습니까?
status.conditions[type=Migrating] 조건의 reason 필드를 먼저 읽습니다.
이유 | 상태 | 의미 |
|---|---|---|
|
| dry-run 어노테이션이 설정되었습니다. |
|
| 원하는 Kubernetes 노드 수가 마지막으로 조정된 수보다 많습니다. |
|
|
|
|
| 외부 노드가 있지만 아무것도 변경되지 않습니다. 이것이 첫 번째 일치 시의 그러한 이유이기도 됩니다. |
|
| 모든 외부 노드가 제거되었습니다. |
우선순위는 Validating > Extending > Pruning > InProgress입니다. Kubernetes 측을 확장하는 프루는 Extending을 보고합니다. 이는 단일 변경을 수행해야 하는 또 다른 이유가 됩니다.
가지치기와 확장은 동시에 수행할 수 없습니다.
마이그레이션 완료를 스크립트로 작성하려면 status.phase을 폴링하는 대신 kubectl wait --for=condition=Migrating=False을 사용하세요.
상태가
Extending로 유지되면 Kubernetes Operator가 추가하는 Kubernetes 노드는 여전히 프로비저닝 중입니다. 목표 상태에 도달할 때까지 기다립니다.이유가
InProgress로 유지되고 외부 노드 수가 변경되지 않은 경우, 리소스에 대한 마지막 편집은 no-op이었습니다. Kubernetes Operator가 조치가 필요한 변경 사항을 감지하지 못했습니다.
플러그인 임포트 실패
kubectl mongodb migrate-to-mck 플러그인은 어떤 리소스를 생성하기 전에 소스 자동화 구성의 유효성을 검사합니다. 다음 각 경우에서는 불완전하거나 오류가 있는 리소스를 생성하지 않고 오류로 종료됩니다:
MongoDB Ops Manager 또는 Cloud Manager 프로젝트에 배포서버가 두 개 이상 있습니다.
이 프로젝트에는 하나 이상의 샤딩된 클러스터가 있습니다.
프로젝트에는 샤딩된 클러스터의 일부가 아닌 복제본 세트가 있습니다.
이 프로젝트에는 복제본 세트나 샤딩된 클러스터가 없습니다. 이 플러그인은 복제본 세트 및 샤딩된 클러스터 배포서버만 마이그레이션할 수 있습니다.
자동화 구성에 프로세스가 없습니다.
샤딩된 클러스터의 샤드는 config 서버와 동일한 복제본 세트를 기반으로 합니다. 이 내장된 config 서버 토폴로지는 마이그레이션에 대해 지원되지 않습니다.
플러그인이 복제본 세트에서 투표 가능하고 우선 순위가 있는 노드를 찾을 수 없어 해당 복제본 세트에 대한 소스 프로세스를 결정할 수 없습니다.
프로세스에
mongod또는mongos이외의processType이(가) 있습니다.
구성 불가능한 경로 및 설정 불일치
플러그인은 Kubernetes 연산자가 예상하는 것과 일치하지 않을 때 다음 자동화 구성 설정을 표시합니다:
auth.keyFileKubernetes 연산자가spec.downloadBase.에서 파생하는 경로와 다릅니다.auth.keyFileWindows설정되어 있습니다.monitoringAgentConfig.logPath또는backupAgentConfig.logPath가 기본값이 아닌 경로로 설정되어 있습니다.프로세스에는 Kubernetes 연산자 기본값과 다른
authSchemaVersion이(가) 있습니다.
인증 오류
auth.autoUser인증이 활성화된 동안 비어 있습니다.auth.autoUser데이터베이스에 대한auth.usersWanted에 일치하는 항목이 없습니다. 일치하는 항목이 없으면 마이그레이션 후 에이전트 인증이 실패합니다.MONGODB-X509에이전트 인증을 사용하려면 자동화 구성에서tls.autoPEMKeyFilePath을(를) 설정해야 합니다.spec.security.authentication.agents.autoPEMKeyFilePath을(를) 참조하세요.simple이외의 LDAPbindMethod은(는) 마이그레이션을 지원하지 않습니다.
노드 이질성
Kubernetes Operator는 단일 소스 프로세스에서 spec.additionalMongodConfig 및 spec.agent.mongod.systemLog을 가져옵니다. 복제본 세트의 구성이 서로 다른 경우, 마이그레이션 전에 모든 노드를 검토하고 차이점을 조정하십시오. 생성된 리소스는 모든 Kubernetes 노드에 하나의 구성을 적용합니다.
대책이 필요한 경고
다음 프로세스별 자동화 구성 설정은 새로운 Kubernetes 노드로 이전되지 않습니다. 마이그레이션하기 전에 계획을 세우십시오.
secondaryDelaySecs숨겨진 멤버
buildIndexes: false
소스 배포서버에 분석 노드 또는 지연 노드가 있는 경우 시작하기 전에 Kubernetes에서 이를 어떻게 나타낼지 계획합니다.
검토할 추가 항목:
이 플러그인은 비활성화된 프로세스를 건너뛰며, 외부 노드로 표시되지 않습니다.
프로세스에 TLS가 구성되어 있지 않은 경우, 마이그레이션하기 전에 기존 가상 머신 배포서버의 MongoDB Ops Manager 또는 Cloud Manager에서
net.tls.mode을(를)disabled(으)로 설정하세요. 생성된MongoDB리소스에는 이 설정을 지정하지 마세요. 그렇지 않으면 Kubernetes 노드의 TLS 설정이 소스 프로세스와 일치하지 않아 마이그레이션으로 인해 계획되지 않은 배포서버 변경이 발생합니다.프로세스의
logRotate또는auditLogRotate설정이 프로젝트 수준 구성과 다른 경우, Kubernetes Operator는 프로젝트 수준 값을 사용합니다.
버전 불일치
mongodb.com/migrate-tool-version 주석은 리소스를 생성한 kubectl mongodb migrate-to-mck 플러그인 버전을 기록합니다. Kubernetes 연산자는 시범 실행 동안을 포함하여 매 재정리 시마다 자체 버전에 대해 이 주석의 유효성을 검사합니다. 버전이 호환되지 않은 경우, 호환되는 플러그인 버전을 사용하여 리소스를 다시 생성합니다.
테스트 실행 문제
시험 실행이 중단된 것 같습니다.
<resourceName>-connectivity-check 작업을 삭제합니다. 다음 조정 시 다시 생성됩니다.
작업이 생성되지 않으면 Kubernetes RBAC 권한에 batch/jobs이(가) 포함되어 있는지 확인합니다. batch/jobs 권한이 누락되면 Kubernetes 연산자가 연결 유효성 검사자 작업을 생성할 수 없습니다.
연결 장애
검증기 작업 종료 코드 | 조건 상태 | 이유 | 의미 |
|---|---|---|---|
작업이 여전히 실행 중입니다. |
|
|
|
|
|
| 모든 외부 노드는 접근할 수 있고 인증됩니다. |
|
|
| 자격 증명, 인증 메커니즘 또는 누락된 |
|
|
| DNS, TLS, 시간 초과 또는 연결할 수 없는 노드. 작업 Pod 로그를 확인하세요. |
|
|
| 미분류 실패. 작업 Pod 로그를 확인하세요. |
작업 시작 전에 발생하는 오류는 OperatorImageUnknown, BuildStatefulSetOptions, AgentCertSecretFailed, AgentCertSubject 이유로 인해 발생합니다.
Kubernetes 연산자는 외부 노드가 남지 않으면 status.conditions에서 NetworkConnectivityVerified 조건을 완전히 제거합니다.
사전 작업 실패
Kubernetes 연산자는 연결 유효성 검사기 작업이 시작되기 전에 다음 중 하나의 이유로 실패할 수 있습니다:
OperatorImageUnknownBuildStatefulSetOptionsAgentCertSecretFailedAgentCertSubject
TLS CA 불일치
Kubernetes 노드의 인증서는 가상 머신 노드의 인증서에 서명한 것과 동일한 인증 기관에서 발급해야 합니다. 그렇지 않으면 가상 머신과 Kubernetes 노드 간의 연결 유효성 검사 및 복제가 실패합니다.
memberConfig 문제
spec.memberConfigspec.members보다 항목이 적습니다. 노드당 항목을 하나 추가합니다.Kubernetes Operator는 샤딩된 클러스터의 최상위
spec.memberConfig필드를 무시합니다.
경고
spec.memberConfig 설정 노드 수를 늘리기 전에
기본값으로 새 Kubernetes 노드는 투표 노드로 참여합니다. CRD 기본값은 votes: 1 및 priority: "1"입니다. 이 기본값을 사용하면 아직 동기화 중인 노드가 초기 동기화를 완료하기 전에 투표에 참여할 수 있습니다.
MongoDB에서는 노드 수를 증가시키기 전에 votes: 0 및 priority: "0"를 사용하여 새 Kubernetes 노드 하나당 하나의 spec.memberConfig 엔트리 쓰기 (write)를 하도록 권장합니다. 이렇게 하면 아직 동기화 중인 노드가 투표에서 이길 수 없습니다. votes은 정수입니다. priority은 string입니다.
명명 문제
리소스 이름 또는 복제본 세트 이름이 너무 길거나 유효한 RFC 1123 이름이 아닙니다. 유효한 Kubernetes 이름을 제공하려면 spec.replicaSetNameOverride 또는 --resource-name-override을(를) 사용하세요.
유효성 검사 의외의 점
유효성 검사는 실제 마이그레이션을 시작한 후뿐만 아니라 dry-run 주석(
mongodb.com/migration-dry-run)이 설정된 동안에도 실행될 수 있습니다.투표 노드 제한 유효성 검사는 제한을 초과하는 변경 사항이 간접적으로 적용되는 경우 승인 시가 아닌 조정 시 나타날 수 있습니다.
하나의 편집에 너무 많은 변경사항을 배치하면 배포서버가 쿼럼을 잃을 수 있습니다. 한 번에 한 가지 유형의 변경만 수행합니다. Kubernetes 노드를 추가하거나, 외부 노드를 제거하거나, 투표 및 우선 순위를 변경합니다.
수집할 진단
위 섹션을 다 검토한 후에도 문제가 계속되면 지원팀에 문의하기 전에 다음 정보를 수집하세요.
status.conditions을(를) 포함한MongoDB리소스 YAML:kubectl get mdb <resource-name> -n <namespace> -o yaml배포서버에 대한
MongoDBUser리소스입니다.Kubernetes 연산자 로그.
연결 유효성 검사기 작업의 포드 로그.
MongoDB Ops Manager 또는 Cloud Manager의 자동화 구성 JSON입니다.
그런 다음 기술 지원팀에 문의하세요.