들어가며
9월, 적잖은 노력 끝에 2개의 MSA 프로젝트를 성공적으로 Kubernetes 환경에 배포하게 되었다. 이제 우리 회사도 탄력적인 클라우드 인프라를 사용할 수 있는 환경이 조성되었다는 뿌듯함과 함께 2가지 미해결 사항이 마음을 무겁게 하고 있다.
첫 번째, CI/CD 환경 구축
프로젝트가 아직 연구단계이기 때문에 도메인 요구사항이 계속 발굴되고, 자잘한 버그들이 많은 상황이다. 그래서 하루 평균 10~20번 정도 빌드와 배포를 반복하고 있다. 프론트엔드의 경우 단일 프로젝트라 한 번의 빌드로 끝나지만, Micro serice들 상호 간에 패치를 진행하면 빌드 횟수는 n배로 늘어나는 상황이다. 사업이 어느 정도 일단락되는 시점에 CI/CD에 대한 탈출구를 찾아야한다.
두 번째, Distributed tracing 전략
서비스들이 Kubernetes 환경에서 Portforward, Ingress-ngnix, Service, Deployment 형태로 배포됨에 따라 로깅과 모니터링이 너무 힘들다. CKA를 준비하며 Kubenetes Object들에 대한 이해를 하긴 했지만, 여전히 Pod를 찔러가며 로깅과 모니터링을 수행하고 있다. 이들의 고삐를 잡아줄 Distrbuted tracing 전략이 필요하다.
이런 시간을 보내다 우연히 우리 "Facebook의 Kafka 한국 사용자 모임"의 관리자이신 고승범 님께서 DEVOCEAN 전문가 식사권!!! 을 양도해 주셔서 Kubernetes와 MSA 전문가이신 김정기 님과 점심식사를 할 수 있는 기회를 얻을 수 있었고, 이를 통해 2가지 미해결 사항에 대한 구체적인 계획을 세우는데 큰 도움을 받게 되었다.
김정기님 프로필
https://devocean.sk.com/experts/view.do?ID=airoasis&page=
전문가님과의 만남
판교 SKP 사옥에 도착해서 연락을 드렸다. 첫 미팅이 늘 그렇듯 긴장하고 있었는데, 정기님과 DEVOCEAN 관리자 분들께서 너무 멀리서 왔다며 환대해 주셨다. 무겁지 않은 마음으로 맛있는 점심 식사를 함께하며 자유롭게 궁금했던 점을 여쭤볼 수 있었다. 이야기를 나누었던 내용은 다음과 같다.
TIP 1 - Public cloud - AWS 추천
단순한 REST API 서비스를 구축할 때 비용절감이 많이 느껴진다고 한다. 또한 Public cloud에서는 보안 Zone을 만들고 AWS WAF 등과 같은 서비스들을 이용하여 외부로부터 유입되는 비정상 트래픽을 차단시킨다. 이를 온프레미스 환경에서 구축하려면 수고가 많이 든다고 한다.
만약 회사에서 AWS를 사용한다면 MSP를 통하는 것이 좋다고 했다. 왜냐하면 어느 정도 사용량을 만족할 경우 MSP를 통하면 더 저렴하게 AWS를 이용할 수 있기 때문이다. 또한 AWS 환경에 맞도록(가격을 절감할 수 있도록) 서비스 구성을 추천해 주기도 하고, 외부로 유출될 수 있는 보안 취약점에 대해서도 조언을 받을 수 있다고 한다.
TIP 2 - Istio 추천
정기님께서도 필자처럼 처음에는 Ingress-nginx를 기반으로 Kubernetes 인프라 환경을 구축했다고 한다. 그러다 Istio Envoy의 Circuit breaker Pattern을 이용하기 위해 도입했는데, 이는 Polyglot 한 Microservice 구성에서 Framework에 의존적이지 않게 Circuit breaker를 사용할 수 있기 때문이었다. Framework에 의존적이지 않게 Circuit breaker를 사용할 수 있는 이유는 Istio를 사용하면 모든 트래픽은 istio-proxy (Envoy sidecar)를 통해 들어오고 나가기 때문에, Istio가 트래픽을 통해 알아서 처리할 수 있기 때문이다. 이 외에도 Istio를 사용하면 다양한 장점이 있다고 한다. (Istio 사용 시 장점은 좀 더 공부하고 정리하도록 한다..)
TIP 3 - Datadog 추천
Distributed tracing을 하기 위해 정기님께서 거친 과정은 다음과 같다고 한다.
최초
Istio의 모든 기능을 사용
- Monitoring은 Prometheus + Grafana 및 Kiali 사용
- Distributed tracing은 Jaeger를 사용한 Istio의 distributes tracing 사용
- 로깅은 EFK Stack 활용 및 ElastAlert를 활용한 Slack 알림 (중간에 Grafana의 Loki도 사용)
- APM은 ElasticAPM 활용
현재
Datadog를 사용하면서 Kiali, Jaeger, Prometheus, Grafana, EFK Stack, ElastAlert 모두 제거
- Datadog Agent 만 각 node에 DaemeonSet으로 올려놓고 설정하여 사용
- (Monitoring, Logging, Distributed Tracing, Alerting 모두 가능)
- 또한 각 서비스의 언어에 따라 Datadog APM 사용
최종적으로 Datadog를 이용해 Loging, APM monitoring을 모두 간편하게 처리할 수 있으며, Istio Observing tool인 Kiali의 역할 역시 Datadog이 수행할 수 있다고 한다. Datadog이 쿠버네티스의 모든 정보를 끌어와 Slack으로 다양한 장애 상황(예: Pod가 반복적으로 재실행되는 경우 등..)에 대한 알림을 주고, 이를 확인하고 업무를 하신다고 했다.
만약 처음 Distributed tracing을 구축하는 상황이라면 예산이 없을 경우 Grafana Loki, 예산이 있다면 Datadog를 무조건 추천하셨다. (미팅을 마치고 확인해보니 제한된 기능들이 많지만, 5개 Host 까지는 무료라서 한번 적용해보려고 한다.)
TIP 4 - Github Action 추천
정기님께서는 Public cloud(AWS/GCP)의 CI/CD 서비스를 모두 사용해 보셨다가 현재는 Github action을 사용하고 있고, 추천해 주셨다. Github action의 경우 Build time 2000분까지 무료로 이용 가능하며, 수많은 개발자들이 생태계를 만들어 가고 있어 Action들이 Marketplace에 배포되어 있다고 한다.
마치며
이번 글에서는 Kubernetes와 관련하여 정기님께 전해 들은 소중한 경험에 대해 정리해 보았다. 매번 이러한 조언을 구할 때마다 전문가 분들의 노고에 비해 너무 쉽게 지식을 얻는다는 무거운 마음이 있었는데, 정기님께서는 다음과 같이 말씀해 주셨다.
"개발자들은 오픈 소스 생태계에 익숙하기 때문에 공유하고 물어보는 것이 자연스러운 일이지 실례되는 것은 아니다.", "모르면 물어보는것이 맞는 것이다."
또 다른 궁금증이 있으면 언제든 연락하라고 해주셨다.(뭉클) 이러한 말씀을 통해 시니어 엔지니어의 진심 어린 배려와, 커다란 생태계에서 함께 하고 있다는 소속감을 느낄 수 있었다.
마지막으로, SK 그룹의 DEVOCEAN 커뮤니티는 가장 유익하다. 기업의 입장에서 한편으로는 전문가들의 노하우를 외부로 공유하기 쉽지 않을 것 같은데, 진정한 공유 문화와 오픈소스 정신을 구체적으로 실현한 느낌이다.
필자의 활용 경험으로는 1년 전에는 MSA Eventstorming 관련 세미나 참석을 초석으로 3개의 MSA 프로젝트를 수행할 수 있었고, 이번 만남을 통해 Kubernetes 환경 운영에 대한 많은 조언을 얻을 수 있었다.
깨알 팁,
30대에 접어들며 개발자의 삶을 살면서 혼인/자녀 계획 관련 고민이 많은데 금쪽같은 조언을 듣고 깔끔하게 정리되었다 :)
또한 이것도 깨알 팁인데, DEVOCEAN에 가입하고 출석, 블로깅을 통해 포인트를 모으면 전문가와 식사권을 받거나 장비를 획득할 수 있다! (장비가 어마 무시하다........ ★^★)
열심히 출석해서 장비.. 보단 또 다른 전문가 님들을 만나보고 싶다 ♠
'클라우드 컴퓨팅 & NoSQL > Kubernetes' 카테고리의 다른 글
[Istio] Istio Service mesh 튜토리얼 후기 (3) | 2022.12.31 |
---|---|
[Kubernetes]Nginx 이미지를 이용한 간단한 쿠버네티스 프로젝트 (0) | 2022.07.13 |
쿠버네티스(Kubernetes) 공식 튜토리얼 #7 (0) | 2021.04.04 |
쿠버네티스(Kubernetes) 공식 튜토리얼 #6 (0) | 2021.04.04 |
쿠버네티스(Kubernetes) 공식 튜토리얼 #5 (0) | 2021.04.03 |