Docs Menu
Docs Home
/
MongoDB Enterprise Kubernetes 연산자
/ /

영구 볼륨을 위한 스토리지 늘리기

이 페이지의 내용

  • 전제 조건
  • 간편한 스토리지 확장
  • 수동으로 스토리지 확장

표준 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, patchupdate 권한이 필요합니다. Kubernetes Operator RBAC 리소스를 사용자 정의한 경우, Kubernetes Operator가 Kubernetes 클러스터 의 저장 리소스 크기를 조정할 수 있도록 권한을 조정해야 할 수 있습니다.

이 프로세스 를 수행하면 Kubernetes 클러스터 의 MongoDB 사용자 지정 리소스 가 순차적으로 롤링 재시작 됩니다.

1

기존 데이터베이스 리소스 를 사용하거나 영구 저장 가 있는 새 데이터베이스를 만듭니다. 영구 볼륨이 Running 상태 에 들어갈 때까지 기다립니다.

예시

영구 저장이 있는 데이터베이스 리소스에는 다음이 포함됩니다.

1apiVersion: mongodb.com/v1
2kind: MongoDB
3metadata:
4 name: <my-replica-set>
5spec:
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"
2
  1. Kubernetes 클러스터에서 mongo 을(를) 시작합니다.

    $kubectl exec -it <my-replica-set>-0 \
    /var/lib/mongodb-mms-automation/mongodb-linux-x86_64-4.4.0/bin/mongo
  2. 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")
    }
3

중요

기존 저장 리소스의 디스크 크기는 늘릴 수만 있고 줄일 수는 없습니다. 저장 크기를 줄이면 조정 단계에서 오류가 발생합니다.

  1. 디스크 크기를 업데이트합니다. 원하는 텍스트 편집기를 열고 다음 예시와 유사하게 변경합니다.

    예시

    복제본 세트 의 디스크 크기를 2 GB 로 업데이트 하려면 데이터베이스 리소스 사양에서 storage 값을 변경합니다.

    1apiVersion: mongodb.com/v1
    2kind: MongoDB
    3metadata:
    4 name: <my-replica-set>
    5spec:
    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"
  2. MongoDB 사용자 지정 리소스 를 새 볼륨 크기로 업데이트합니다.

    kubectl apply -f my-updated-replica-set-vol.yaml
  3. 이 StatefulSet가 Running 상태를 달성할 때까지 기다립니다.

4

영구 볼륨 을 재사용하는 경우 단계 에서 삽입한 데이터는 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: ""
5

영구 볼륨 을 재사용하는 경우 단계 에서 삽입한 데이터는 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
1

기존 데이터베이스 리소스를 사용하거나 영구 저장으로 새 데이터베이스 리소스를 만듭니다. 영구 볼륨이 Running 상태가 될 때까지 기다립니다.

예시

영구 저장이 있는 데이터베이스 리소스에는 다음이 포함됩니다.

1apiVersion: mongodb.com/v1
2kind: MongoDB
3metadata:
4 name: <my-replica-set>
5spec:
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"
2
  1. Kubernetes 클러스터에서 mongo 을(를) 시작합니다.

    $kubectl exec -it <my-replica-set>-0 \
    /var/lib/mongodb-mms-automation/mongodb-linux-x86_64-4.4.0/bin/mongo
  2. 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")
    }
3

전체 복제본 세트에 대해 다음 명령을 실행합니다.

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
4

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
5

참고

이 단계에서는 StatefulSet 만. pod는 변경되지 않고 계속 실행됩니다.

StatefulSet 삭제 리소스.

kubectl delete sts --cascade=false <my-replica-set>
6
  1. 디스크 크기를 업데이트합니다. 원하는 텍스트 편집기를 열고 다음 예시와 유사하게 변경합니다.

    예시

    복제본 세트 의 디스크 크기를 2 GB 로 업데이트 하려면 데이터베이스 리소스 사양에서 storage 값을 변경합니다.

    1apiVersion: mongodb.com/v1
    2kind: MongoDB
    3metadata:
    4 name: <my-replica-set>
    5spec:
    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"
  2. StatefulSet 다시 만들기 리소스를 새 볼륨 크기로 변경합니다.

    kubectl apply -f my-replica-set-vol.yaml
  3. MongoDB 사용자 지정 리소스 가 Running 상태 가 될 때까지 기다립니다.

7

다음 명령을 실행합니다.

kubectl rollout restart sts <my-replica-set>

새 pod는 크기가 조정된 볼륨을 마운트합니다.

8

영구 볼륨 이 단계 에서 삽입한 데이터는 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

돌아가기

배포 확장