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개로 줄이기
'삽질의 현장 > - Docker&Kubernetes' 카테고리의 다른 글
[GCP Study Jam] Kubernetes Helm 소개 (0) | 2019.01.27 |
---|---|
[GCP Study Jam] Kubernetes Engine으로 배포 관리 (0) | 2019.01.20 |
[GCP Study Jam] Kubernetes를 통한 클라우드 조정 (0) | 2019.01.20 |
[GCP Study Jam] Kubernetes 노드 소개 (0) | 2019.01.13 |
[GCP Study Jam] GCP를 활용한 Docker 사용해보기 (0) | 2019.01.13 |