본문 바로가기

Software Development

장난감 CoreOS 클러스터 근황, 소소한 삽질기 공유

consul - registrator: 도커 컨테이너 서비스 디스커버리

consul은 내부적으로 DNS 서비스를 해 주고, node, service를 기준으로 자동화된 도메인 네임 컨벤션을 가지고 있다.

그 밖에 key-value 스토어 기능도 제공을 해 주는데, 이 부분은 사용하지 않았다.

사내 DNS에 CoreOS클러스터 호스트 모두에 DNS 로드밸런싱을 위해 consul 도메인 포워딩을 해 놓고 사용 중.


registrator는 서비스 디스커버리 도구에 도커 컨테이너를 등록하는 애플리케이션인데

호스트에 컨테이너가 올라가면, 올라간 포트들을 자동으로 추적하여, 자체 네이밍 컨벤션을 가지고

서비스 디스커버리 도구에 등록해 주는 좋은 도구다.


registrator에서 부여하는 이름 말고 자신이 원하는 서비스 이름을 부여하려면,

그냥 컨테이너에 환경변수 몇개만 붙여주면 되서 간단하게 쓸 수 있도록 해 준 부분이 너무 마음에 들었다.


prometheus - grafana: OS 메트릭 정보 수집.

prometheus는 그냥 게이트웨이 같은 역할만 해 주고, 실제 정보 수집은 exporter라는 컴포넌트들이 수행한다.

node-exporter(호스트 메트릭 수집기), consul-exporter(컨설 메트릭 수집) 지금은 이 두개를 사용해서,

각종 정보들을 모아보고 있고, grafana로 대시보드를 만들어 쓰고 있다.


fluentd - logio: 로그 수집, 로그 스트리밍.

logio는 예전부터 잘 쓰고 있던 도구였는데 도커에서 로그 드라이버로 fluentd를 지원해 주고 있기 때문에, 이번에 한번 도전 해 보았음.

역시 맛보기로 아무 설정 없이 그냥 사용 중인데, 가볍게 스트레스 테스트를 해 보았을 때 좋은 성능을 보여주는 것 같다.


logio는 tail -f로 로그파일을 팔로우 하는 것 처럼, inotify 이벤트를 잡아서 socket.io를 이용해서 서버로 스트리밍 하는 기능을 가지고 있는데, 이걸 이용해서 실시간으로 쌓이는 로그를 모니터링 할 수 있다.


logio-harvester라는 녀석이 팔로우를 해서 logio-server로 스트리밍을 하고, logio-server는 클라이언트가 로그를 전달해 주는 그런식이다. TLS도 지원을 해 줘서 하드닝도 해결할 수 있는 듯.


단순히 로그 스트리밍 기능만 있고, 쌓인 로그들 뒤져보는 그런 기능은 별도로 구축해야 한다.


kong: 장난감 위에 올라가는 서비스 apigw.

tyk도 좋았는데, 이젠 라이센스가 붙어서 이젠 쓸 수 없게 되어버려서.. 울며 겨자먹기로 kong에 도전해 보았다.

이거도 UI 붙여서 기능들을 살펴보니 tyk만큼 좋은 것 같다. UI는 kong-dashboard를 붙였었는데, konga로 바꿔서 사용 해 보고 있음.


consul과 kong 조합으로 로드밸런싱에서 해야 할 일들의 상당 부분을 커버할 수 있는 것 같다.



ansible - awx: 서버 프로비저닝, 서비스 오케스트레이션 자동화.

파이썬 프로젝트라.. 신나게 소스를 살펴보니, UI는 장고를 사용하고, 워커 인스턴스로 celery를 사용하고 있다.


제공해 주는 docker-compose 파일들을 보면, 기본 서비스 스택으로(pg - django, rabbitmq - celery)를 사용.

서비스 구성이 만족스럽긴 한데, 아직 튜닝 덜된건지 도커로 올려 보았을 때는 리소스를 꽤나 잡아먹는 모습을 보여줘서,

실제로 서버에 올려서 쓰긴 아직 좀 이른 것 같다는 생각도 들고... 뭐..


정리

저만큼 해 놓으니, 요즘 만드는 애플리케이션 테스트 하면서 모니터링도 빠릿빠릿하게 잘 되고,

테스트 서비스 배포도 빨라서 만족하며 사용중...


더 해보고픈 작업

* percistency

glusterFS를 붙여볼 까 생각중이긴 한데, 스토리지쪽은 개념이 없어서 어떤게 좋은지는 잘 모르겠다..

온프레미스 전용 rexray같은거 없나..


* network

장난감 서버들이라 서비스 포트들과 서버 포트들을 SDN으로 분리하고자 하는데, 이부분도 개념이 없다..


* 컨테이너 메트릭 수집

prometheus에는 container-exporter라는 메트릭 API가 있는데, 저건 deprecated고 cAdvisor를 사용하라고 한다..



모든 작업들을 앤서블로 관리하고 있는데, 숙련도가 많이 올라가고 나니 너무 편하다.

곧 저 서버들은 내릴 예정이라는데..ㅠ 얼른 남은 숙제들 다 해보고 싶다..