삽질의 현장/- Docker&Kubernetes

[GCP Study Jam] Kubernetes에 MongoDB 설정

shovelman 2019. 1. 27. 00:40

GCP를 활용한 Kubernetes 학습을 진행하며 정리하는 글입니다 (Google Cloud Study Jam 참여 중).


Kubernetes에 MongoDB 설정

Headless Service와 StatefulSet 배포

MongoDB 복제본 세트를 설정하려면 StorgeClass, HeadlessService, StatefulSet 세가지가 필요합니다.

(참고) 구성 파일 예제

git clone <https://github.com/thesandlord/mongo-k8s-sidecar.git>
cd ./mongo-k8s-sidecar/example/StatefulSet/

Headless Service

cat mongo-statefulset.yaml

## mongo-statefulset.yaml 구성내용
apiVersion: v1
kind: Service
metadata:
name: mongo
labels:
   name: mongo
spec:
ports:
- port: 27017
   targetPort: 27017
clusterIP: None
selector:
   role: mongo

clusterIP가 'None'으로 설정되어 있기 때문에 Headless Service인 것을 확인할 수 있습니다. StatefulSet와 함께 사용하면 Pod에 직접 접근할 수 있는 고유한 DNS 주소를 제공받을 수 있다고 합니다. 애플리케이션에서 모든 MongoDB 노드에 개별적으로 연결해야 하므로 MongoDB 복제본 세트를 만드는데 이상적이라고 합니다.

StatefulSet

cat mongo-statefulset.yaml

apiVersion: apps/v1beta1
kind: StatefulSet
metadata:
name: mongo
spec:
serviceName: "mongo"
replicas: 3
template:
   metadata:
     labels:
       role: mongo
       environment: test
   spec:
     terminationGracePeriodSeconds: 10
     containers:
       - name: mongo
         image: mongo
         command:
           - mongod
           - "--replSet"
           - rs0
           - "--smallfiles"
           - "--noprealloc"
         ports:
           - containerPort: 27017
         volumeMounts:
           - name: mongo-persistent-storage
             mountPath: /data/db
       - name: mongo-sidecar
         image: cvallance/mongo-k8s-sidecar
         env:
           - name: MONGO_SIDECAR_POD_LABELS
             value: "role=mongo,environment=test"
volumeClaimTemplates:
- metadata:
     name: mongo-persistent-storage
     annotations:
       volume.beta.kubernetes.io/storage-class: "fast"
   spec:
     accessModes: [ "ReadWriteOnce" ]
     resources:
       requests:
         storage: 100Gi

Headless Service와 StatefulSet 배포

kubectl apply -f mongo-statefulset.yaml

MongoDB 복제본 세트에 연결

Kubernetes StatefulSet은 각 포드를 순차적으로 배포합니다. MongoDB 복제본 세트 멤버가 완전히 부팅되고 백업 디스크를 만들 때 까지 대기해야 합니다. 개수 확인은 아래의 명령어로 확인합니다.

kubectl get statefulset

MongoDB 복제본 세트 시작 및 보기

복제본 세트 멤버에 연결하기 위해서는 아래의 명령어를 실행합니다.

kubectl get statefulset

정상적으로 연결이 되면 복제본 세트 시작 및 구성 확인이 가능합니다.

rs.initiate()
rs.conf()

MongoDB 복제본 세트 확장

MongoDB 복제본의 개수를 늘리거나 줄일 수 있습니다.

kubectl scale --replicas=5 statefulset mongo // 5개로 늘리기
kubectl scale --replicas=3 statefulset mongo // 3개로 줄이기