관리 메뉴

피터의 개발이야기

[kubernetes] MongoDB 환경 구축 본문

Kubernetes/Infra작업

[kubernetes] MongoDB 환경 구축

기록하는 백앤드개발자 2022. 8. 24. 01:44
반응형

ㅁ 개요

  개발 회의 도중에 kubernetes 환경에서 구성된 mongoDB의 볼륨을 변경하는 작업이 안건으로 나왔다.

빠르게 kubernetes > mongoDB의 환경을 구성해 보았다. 

 

 

ㅁ 참조 페이지

 ㅇ 2개정도 페이지를 참조하여 시도하였지만 실패하였다.

 ㅇ namespace로 분리를 하여 실패 시 namespace를 지우면 깔끔하게 초기화를 할 수 있다.

[ec2-user@ip-172-31-43-214 ~]$ kubectl delete namespaces mongodb
namespace "mongodb" deleted
 

How To Deploy MongoDB On Kubernetes - Beginners Guide

This article explains the step by step guide to deploy MongoDB on Kubernetes cluster and validate basic operations using mongo client pod.

devopscube.com

 위 페이지 기준으로 성공하였다.

 

 

ㅁ git 소스 다운로드

git clone https://github.com/scriptcamp/kubernetes-mongodb.git

위 가이드에 사용된 모든 Kubernetes Mngdb YAML 매니페스트는 Github에서 호스팅되어 있다.

각 매니페스트를 생성하는 과정을 빠르게 실행하기 위해서 다음 명령어를 실행하면 된다.

 

 

ㅁ kubectl apply

[ec2-user@ip-172-31-43-214 kubernetes-mongodb]$ kubectl apply -f . persistentvolume/mongo-data-pv created Error from server (NotFound): error when creating "mongodb-client.yaml": namespaces "mongodb" not found Error from server (NotFound): error when creating "mongodb-deployment.yaml": namespaces "mongodb" not found Error from server (NotFound): error when creating "mongodb-nodeport-svc.yaml": namespaces "mongodb" not found Error from server (NotFound): error when creating "mongodb-pvc.yaml": namespaces "mongodb" not found Error from server (NotFound): error when creating "mongodb-secrets.yaml": namespaces "mongodb" not found

 ㅇ 오류가 발생하였다. namespace를 먼저 생성해 두어야 한다.

 

[ec2-user@ip-172-31-43-214 kubernetes-mongodb]$ kubectl create namespace mongodb
namespace/mongodb created [ec2-user@ip-172-31-43-214 kubernetes-mongodb]$ kubectl apply -f . deployment.apps/mongo-client created
deployment.apps/mongo created
service/mongo-nodeport-svc created
persistentvolume/mongo-data-pv unchanged
persistentvolumeclaim/mongo-data created
secret/mongo-creds created

 ㅇ kubectl create namespace mongodb 명령어로 namespace를 생성한 후에 정상적으로 설치가 되었다.

 

 

ㅁ 내부 mongoDB 접속

[ec2-user@ip-172-31-43-214 kubernetes-mongodb]$ kubectl exec -n mongodb mongo-client-6f6b5c779b-4d9gr -it bash
kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead.
root@mongo-client-6f6b5c779b-4d9gr:/# ls
bin   data  docker-entrypoint-initdb.d	home	    lib    lib64   media  opt	root  sbin  sys  usr
boot  dev   etc				js-yaml.js  lib32  libx32  mnt	  proc	run   srv   tmp  var
root@mongo-client-6f6b5c779b-4d9gr:/# mongo --host mongo-nodeport-svc --port 27017 -u adminuser -p password123
MongoDB shell version v5.0.11
connecting to: mongodb://mongo-nodeport-svc:27017/?compressors=disabled&gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("ec9ab949-6b74-4f29-8b2c-642f0b25ecd1") }
MongoDB server version: 5.0.11
================
Warning: the "mongo" shell has been superseded by "mongosh",
which delivers improved usability and compatibility.The "mongo" shell has been deprecated and will be removed in
an upcoming release.
For installation instructions, see
https://docs.mongodb.com/mongodb-shell/install/
================
Welcome to the MongoDB shell.
For interactive help, type "help".
For more comprehensive documentation, see
	https://docs.mongodb.com/
Questions? Try the MongoDB Developer Community Forums
	https://community.mongodb.com
---
The server generated these startup warnings when booting:
        2022-08-23T15:56:11.969+00:00: Using the XFS filesystem is strongly recommended with the WiredTiger storage engine. See http://dochub.mongodb.org/core/prodnotes-filesystem
---
---
        Enable MongoDB's free cloud-based monitoring service, which will then receive and display
        metrics about your deployment (disk utilization, CPU, operation statistics, etc).

        The monitoring data will be available on a MongoDB website with a unique URL accessible to you
        and anyone you share the URL with. MongoDB may use this information to make product
        improvements and to suggest MongoDB products and deployment options to you.

        To enable free monitoring, run the following command: db.enableFreeMonitoring()
        To permanently disable this reminder, run the following command: db.disableFreeMonitoring()
---
> show dbs
admin   0.000GB
config  0.000GB
local   0.000GB
> use db1
switched to db db1
> show collections
> db.blogs.insert({name:"devopscube"})
WriteResult({ "nInserted" : 1 })
> db.blogs.find()
{ "_id" : ObjectId("6304fba8f096e3d3f11e606e"), "name" : "devopscube" }
> exit
bye
root@mongo-client-6f6b5c779b-4d9gr:/# ls
bin   data  docker-entrypoint-initdb.d	home	    lib    lib64   media  opt	root  sbin  sys  usr
boot  dev   etc				js-yaml.js  lib32  libx32  mnt	  proc	run   srv   tmp  var
root@mongo-client-6f6b5c779b-4d9gr:/# exit
exit

 

 

 

ㅁ 외부접속으로 변경

[ec2-user@ip-172-31-43-214 kubernetes-mongodb]$ kubectl get svc -n mongodb
NAME                 TYPE       CLUSTER-IP     EXTERNAL-IP   PORT(S)           AGE
mongo-nodeport-svc   NodePort   10.100.5.218   <none>        27017:32000/TCP   16s

 ㅇ 현재 서비스가 NodePort 상태이기 때문에 NodePort로 각 노드의 IP에 서비스를 노출한다.

 ㅇ AWS 환경에 구축을 하였기에 type을 LoadBalancer로 변경하면, AWS의 로드 밸런서를 사용하여 서비스를 외부에 노출시킬 수 있다.

[ec2-user@ip-172-31-43-214 kubernetes-mongodb]$ kubectl edit svc -n mongodb mongo-nodeport-svc
service/mongo-nodeport-svc edited

 ㅇ 변경작업이 완료되었다.

 

 

$ kubectl get svc -n mongodb 

 ㅇ 다시 서비스를 조회하면 새롭게 생성된 External-ip를 확인할 수 있다.

 

 

ㅁ 몽고디비 툴로 접속

 ㅇ 관련 주소와 설정정보를 입력하여 위에서 내부망으로 접속하여 생성된 데이터를 확인 할 수 있다.

 

 

 

ㅁ 테스트 환경 정리

[ec2-user@ip-172-31-43-214 kubernetes-mongodb]$ eksctl scale nodegroup --name=work-nodes --cluster=k8s-demo --nodes=0 --nodes-min=0
2022-08-23 16:45:55 [ℹ]  scaling nodegroup "work-nodes" in cluster k8s-demo
2022-08-23 16:45:55 [ℹ]  waiting for scaling of nodegroup "work-nodes" to complete
2022-08-23 16:46:26 [ℹ]  nodegroup successfully scaled

 ㅇ EKS는 중지 할 수 없지만 node는 정지시킬 수 있다.

 ㅇ 비용절감을 위해 정지하고 테스트를 일단 마무리 해야겠다.

 ㅇ 현재시간 오전 1:49이다.

반응형
Comments