영구 볼륨을 위한 스토리지 늘리기
이 페이지의 내용
표준 Operator 배포서버 를 구성하는 MongoDB Ops Manager, 데이터베이스, AppDB 및 백업 디먼MongoDB Kubernetes 사용자 지정 리소스는 각각 Kubernetes statefulSets
로 배포됩니다. Kubernetes Operator는 기본 Kubernetes storageClass
가 Kubernetes persistentVolume
확장 을 지원할 때 해당 Kubernetes persistentVolumeClaims
의 용량 을 늘려 이러한 특정 리소스와 관련된 저장 증가를 지원합니다.
특정 리소스 유형에 따라 두 가지 방법 중 하나로 저장 를 늘릴 수 있습니다. 저장 를 수동으로 늘리거나 Kubernetes Operator의 간편한 저장 확장 기능 을 활용할 수 있습니다. 다음 표는 지정된 사용자 지정 리소스 유형에 대해 이 두 가지 절차 중 어떤 것이 지원되는지 보여줍니다.
사용자 지정 리소스 유형 | 수동 스토리지 확장 | 간편한 스토리지 확장 |
---|---|---|
AppDB | ||
백업 데몬 | ||
MongoDB 데이터베이스 | ||
MongoDB 멀티 클러스터 | ||
Ops Manager |
전제 조건
스토리지 클래스는 크기 조정을 지원해야 함
영구 볼륨이 사용하는 StorageClass 및 볼륨 플러그인 제공자 가 크기 조정을 지원하는지 확인합니다.
kubectl patch storageclass/<my-storageclass> --type='json' \ -p='[{"op": "add", "path": "/allowVolumeExpansion", "value": true }]'
크기 조정을 지원하는 storageClass
이(가) 없는 경우 Kubernetes 관리자에게 도움을 요청하세요.
간편한 스토리지 확장
참고
쉬운 확장 메커니즘에는 Kubernetes Operator에 포함된 기본값 RBAC가 필요합니다. 구체적으로 persistantVolumeClaims
에 대한 get
, list
, watch
, patch
및 update
권한이 필요합니다. Kubernetes Operator RBAC 리소스를 사용자 정의한 경우, Kubernetes Operator가 Kubernetes 클러스터 의 저장 리소스 크기를 조정할 수 있도록 권한을 조정해야 할 수 있습니다.
이 프로세스 를 수행하면 Kubernetes 클러스터 의 MongoDB 사용자 지정 리소스 가 순차적으로 롤링 재시작 됩니다.
영구 사용자 지정 리소스 생성 또는 식별 .
기존 데이터베이스 리소스 를 사용하거나 영구 저장 가 있는 새 데이터베이스를 만듭니다. 영구 볼륨이 Running
상태 에 들어갈 때까지 기다립니다.
예시
영구 저장이 있는 데이터베이스 리소스에는 다음이 포함됩니다.
1 apiVersion: mongodb.com/v1 2 kind: MongoDB 3 metadata: 4 name: <my-replica-set> 5 spec: 6 members: 3 7 version: "4.4.0" 8 project: my-project 9 credentials: my-credentials 10 type: ReplicaSet 11 podSpec: 12 persistence: 13 single: 14 storage: "1Gi"
리소스 가 제공하는 데이터베이스 에 데이터를 삽입합니다.
Kubernetes 클러스터에서
mongo
을(를) 시작합니다.kubectl exec -it <my-replica-set>-0 \ /var/lib/mongodb-mms-automation/mongodb-linux-x86_64-4.4.0/bin/mongo test
데이터베이스에 데이터를 삽입합니다.<my-replica-set>:PRIMARY> use test switched to db test <my-replica-set>:PRIMARY> db.tmp.insertOne({"foo":"bar"}) { "acknowledged" : true, "insertedId" : ObjectId("61128cb4a783c3c57ae5142d") }
데이터베이스 리소스를 새 스토리지 값으로 업데이트합니다.
중요
기존 저장 리소스의 디스크 크기는 늘릴 수만 있고 줄일 수는 없습니다. 저장 크기를 줄이면 조정 단계에서 오류가 발생합니다.
디스크 크기를 업데이트합니다. 원하는 텍스트 편집기를 열고 다음 예시와 유사하게 변경합니다.
예시
복제본 세트 의 디스크 크기를 2 GB 로 업데이트 하려면 데이터베이스 리소스 사양에서
storage
값을 변경합니다.1 apiVersion: mongodb.com/v1 2 kind: MongoDB 3 metadata: 4 name: <my-replica-set> 5 spec: 6 members: 3 7 version: "4.4.0" 8 project: my-project 9 credentials: my-credentials 10 type: ReplicaSet 11 podSpec: 12 persistence: 13 single: 14 storage: "2Gi" MongoDB 사용자 지정 리소스 를 새 볼륨 크기로 업데이트합니다.
kubectl apply -f my-updated-replica-set-vol.yaml 이 StatefulSet가
Running
상태를 달성할 때까지 기다립니다.
영구 볼륨 클레임의 크기가 조정되었는지 확인합니다.
영구 볼륨 을 재사용하는 경우 단계 에서 삽입한 데이터는 Persistent 2 Volumes 에 저장된 데이터베이스에서 찾을 수 있습니다. :
kubectl describe mongodb/<my-replica-set> -n mongodb
다음 출력은 PVC 크기 조정 요청 이 처리 중임을 나타냅니다.
status: clusterStatusList: {} lastTransition: "2024-08-21T11:03:52+02:00" message: StatefulSet not ready observedGeneration: 2 phase: Pending pvc: - phase: PVC Resize - STS has been orphaned statefulsetName: multi-replica-set-pvc-resize-0 resourcesNotReady: - kind: StatefulSet message: 'Not all the Pods are ready (wanted: 2, updated: 1, ready: 1, current:2)' name: multi-replica-set-pvc-resize-0 version: ""
업데이트된 영구 볼륨 클레임 에 데이터가 있는지 확인합니다.
영구 볼륨 을 재사용하는 경우 단계 에서 삽입한 데이터는 Persistent 2 Volumes 에 저장된 데이터베이스에서 찾을 수 있습니다. :
kubectl exec -it <my-replica-set>-1 \ /var/lib/mongodb-mms-automation/mongodb-linux-x86_64-4.4.0/bin/mongo
<my-replica-set>:PRIMARY> use test switched to db test <my-replica-set>:PRIMARY> db.tmp.count() 1
수동으로 스토리지 확장
영구 사용자 지정 리소스 생성 또는 식별 .
기존 데이터베이스 리소스를 사용하거나 영구 저장으로 새 데이터베이스 리소스를 만듭니다. 영구 볼륨이 Running
상태가 될 때까지 기다립니다.
예시
영구 저장이 있는 데이터베이스 리소스에는 다음이 포함됩니다.
1 apiVersion: mongodb.com/v1 2 kind: MongoDB 3 metadata: 4 name: <my-replica-set> 5 spec: 6 members: 3 7 version: "4.4.0" 8 project: my-project 9 credentials: my-credentials 10 type: ReplicaSet 11 podSpec: 12 persistence: 13 single: 14 storage: "1Gi"
리소스가 제공하는 데이터베이스에 데이터를 삽입합니다.
Kubernetes 클러스터에서
mongo
을(를) 시작합니다.kubectl exec -it <my-replica-set>-0 \ /var/lib/mongodb-mms-automation/mongodb-linux-x86_64-4.4.0/bin/mongo test
데이터베이스에 데이터를 삽입합니다.<my-replica-set>:PRIMARY> use test switched to db test <my-replica-set>:PRIMARY> db.tmp.insertOne({"foo":"bar"}) { "acknowledged" : true, "insertedId" : ObjectId("61128cb4a783c3c57ae5142d") }
각 지속성 볼륨을 패치합니다.
전체 복제본 세트에 대해 다음 명령을 실행합니다.
kubectl patch pvc/"data-<my-replica-set>-0" -p='{"spec": {"resources": {"requests": {"storage": "2Gi"}}}}' kubectl patch pvc/"data-<my-replica-set>-1" -p='{"spec": {"resources": {"requests": {"storage": "2Gi"}}}}' kubectl patch pvc/"data-<my-replica-set>-2" -p='{"spec": {"resources": {"requests": {"storage": "2Gi"}}}}'
각 영구 볼륨 클레임 이 발생할 때까지 기다립니다. 다음과 같은 조건에 도달합니다.
- lastProbeTime: null lastTransitionTime: "2019-08-01T12:11:39Z" message: Waiting for user to (re-)start a pod to finish file system resize of volume on node. status: "True" type: FileSystemResizePending
연산자를 중지합니다.
Kubernetes Operator 배포서버 정의를 업데이트하고 변경 사항을 Kubernetes 클러스터 에 적용 하여 Kubernetes Operator를 복제본 0
개로 확장하다 합니다. Kubernetes Operator를 0
복제본으로 축소하면 Kubernetes Operator가 수동으로 업데이트된 리소스 의 상태 를 리소스의 원래 정의에 맞게 복원 하려고 하는 경합 상태를 방지할 수 있습니다.
# Source: enterprise-operator/templates/operator.yaml apiVersion: apps/v1 kind: Deployment metadata: name: mongodb-enterprise-operator namespace: mongodb spec: replicas: 0
StatefulSet를 제거합니다.
참고
이 단계에서는 StatefulSet 만. pod는 변경되지 않고 계속 실행됩니다.
StatefulSet 삭제 리소스.
kubectl delete sts --cascade=false <my-replica-set>
데이터베이스 리소스를 새 스토리지 값으로 업데이트합니다.
디스크 크기를 업데이트합니다. 원하는 텍스트 편집기를 열고 다음 예시와 유사하게 변경합니다.
예시
복제본 세트 의 디스크 크기를 2 GB 로 업데이트 하려면 데이터베이스 리소스 사양에서
storage
값을 변경합니다.1 apiVersion: mongodb.com/v1 2 kind: MongoDB 3 metadata: 4 name: <my-replica-set> 5 spec: 6 members: 3 7 version: "4.4.0" 8 project: my-project 9 credentials: my-credentials 10 type: ReplicaSet 11 podSpec: 12 persistence: 13 single: 14 storage: "2Gi" StatefulSet 다시 만들기 리소스를 새 볼륨 크기로 변경합니다.
kubectl apply -f my-replica-set-vol.yaml MongoDB 사용자 지정 리소스 가
Running
상태 가 될 때까지 기다립니다.
업데이트된 영구 볼륨 클레임 에 데이터가 있는지 확인합니다.
영구 볼륨 이 단계 에서 삽입한 데이터는 Persistent 2 Volumes 에 저장된 데이터베이스에서 찾을 수 있습니다.:
kubectl exec -it <my-replica-set>-1 \ /var/lib/mongodb-mms-automation/mongodb-linux-x86_64-4.4.0/bin/mongo
<my-replica-set>:PRIMARY> use test switched to db test <my-replica-set>:PRIMARY> db.tmp.count() 1