[Robusta] 직관적인 쿠버네티스 클러스터 알람 받기
그동안 쿠버네티스 워크로드에 대한 알림은 argocd / datadog 일부 만 있었다.
그러다가 파드 내에서 OOMKill이 일어나 리스타트 되는 경우가 많다는 것을 알게 되었는데, argocd에서는 이 경우를 감지하지 못하고, datadog 알림은 가독성이 썩 좋진 못했다.
어떤 이유로 restart되었는지 알지 못하고, 어떤 클러스터의 어떤 파드인지도 한 눈에 들어오지 않는다.
뭐 사실 이것도 어떻게든 잘 깎으면 개선할 수 있었겠지만, 또 거기에 리소스를 쏟을 시간은 없었다. (사실 하기 싫은거 맞음)
그러다가 Robusta 라는 것을 알게 되었다. (어디 오픈톡방에서 누가 키워드를 남겼는데 이후로 찾아보았다.)
레퍼런스는 많이 없었는데, 제니퍼소프트 블로그 글을 보고 일단 한번 설치해 봐야겠다는 생각을 했다.
제일 탐난 것은 가독성 좋은 k8s event 알림이었는데, 이게 무료로 가능한데다가 이미 깔려있는 프로메테우스를 활용할 수 있었다.
# 설치
헬름으로 클러스터에 설치하기 전에, robusta cli를 통해 계정 정보, 토큰 정보 등을 생성해야 한다.
# robusta cli 설치
pip3 install -U robusta-cli --no-cache
프로메테우스를 설치하지 않는 옵션으로 value파일을 만들어보겠다.
robusta gen-config --no-enable-prometheus-stack
Robusta reports its findings to external destinations (we call them "sinks").
We'll define some of them now.
Configure Slack integration? This is HIGHLY recommended. [Y/n]:
If your browser does not automatically launch, open the below url:
https://api.robusta.dev/integrations/slack?id=e6c38a62-e438-4614-a7ac-4f4e69fb6368
You've just connected Robusta to the Slack of: honglab-test
Which slack channel should I send notifications to? # robusta-test
Configure MsTeams integration? [y/N]: n
Configure Robusta UI sink? This is HIGHLY recommended. [Y/n]: Y
Enter your Google/Gmail/Azure/Outlook address. This will be used to login: honglab97@gmail.com
Choose your account name (e.g your organization name): honglab-test
Successfully registered.
Please read and approve our End User License Agreement: https://api.robusta.dev/eula.html
Do you accept our End User License Agreement? [y/N]: y
Last question! Would you like to help us improve Robusta by sending exception reports? [y/N]: y
Saved configuration to ./generated_values.yaml - save this file for future use!
Finish installing with Helm (see the Robusta docs). Then login to Robusta UI at https://platform.robusta.dev
처음 슬랙 연동할 땐 자동으로 아래와 같은 페이지가 웹 브라우저로 뜬다. 원하는 workspace에 허용해주고, 원하는 채널 이름까지 작성해주면 연동이 매우 쉽게 완료된다.
이메일이랑 account 이름까지 설정하고 나면 아래와 같은 `generated_values.yaml` 파일이 생성된다.
이 파일에 `clusterName`만 추가하면 설치준비는 끝난다. (robusta UI에서 구분되는 클러스터 이름이다.)
이제 진짜 헬름으로 설치해 보자.
# helm repo 추가
helm repo add robusta https://robusta-charts.storage.googleapis.com && helm repo update
# helm install
helm upgrade -i robusta . -f generated_values.yaml
설치는 끝! forwarder & runner 두 개의 파드가 생성된다. (깰-끔)
# 슬랙 알림 확인
일단 처음에 원했던건 직관적인 슬랙 알림이었으므로, 깨진 파드를 실행시켜 보겠다.
kubectl apply -f https://gist.githubusercontent.com/robusta-lab/283609047306dc1f05cf59806ade30b6/raw
로그까지 보내주고...너무 마음에 든다. 움킬의 경우 아래처럼 알림이 온다.
아주 기가막힌다.
# UI 확인
위 사이트에서 generated_values 만들 때 등록한 이메일로 로그인하면 된다.
처음 셋업 시 5분정도 시간이 소요된다.
파드들을 확인할 수 있는 깔끔한 UI이다.
타임라인 탭에서는 쿠버 이벤트들을 직관적으로 확인할 수 있다.
노드 탭에서는 노드 사용량도 깔끔하게 확인된다.
그리고 아주 맘에 들었던 것..!
Efficiency 탭에서는 파드의 권장 리소스를 제안해준다. (개미쳤다)
실제 파드의 사용량을 분석해 제안해주는데 와 이것까지 공짜라고? 라는 생각이 절로 들었다.
근데 ... 다시 보니 모든 파드들을 다 분석해주진 못하는데,
CronJob, DaemonSet, Deployment, Job, StatefulSet 으로 구성된 파드들만 인식되는 것 같다.
뭐? 그럼 끝 아니야? 라고 생각할 수 있지만, 현재 우리 회사는 블루그린 배포방식이 디폴트이기 때문에 대부분의 워크로드들이 Deployment가 아닌 Rollout으로 구성되어 있다. 다시 확인해 보니 Apps 화면에서도 Rollout의 파드들은 인식을 못하고 있었다. ㅠㅠ
정말정말 아쉽지만, 어차피 처음의 목표는 직관적인 슬랙 알림이었고, 해당 알림은 롤아웃이어도 상관없이 오니까 다행이라고 생각했다.
...라고만 생각할 뻔 했지만!! 알고롤아웃도 0.11버전부터 지원되고 있었다. +.+
https://github.com/robusta-dev/robusta/issues/1253
`argoRollouts: true` 만 추가해주면 되었다. (본인도 글 쓰면서 알게됨. 후다닥 회사 Robusta에도 적용시킬 예정)
Plan & Usage 탭에서는 프로 플랜으로 업그레이드 시의 비용을 확인할 수 있다.
현재는 가입한지 얼마 안되어 무료로 프로 플랜을 사용하고 있는데,
무료 플랜 > 프로 플랜이 되면 유저 추가 & 이벤트 히스토리 3개월 보관 (무료는 12시간) 이 된다.
그리고 비용은 파드 갯수당으로 처리되는데, 크게 부담되는 비용이 아니다. (난 현재 회사에서 쓰는 클러스터 모두 연동해두고 1900개정도 파드가 인식되었는데, 총 월별 1100달러로 추산된다.)
이게 사실 비싼 비용이 아니기 때문에 흠.. 업그레이드...할까? 싶긴 했지만? 이벤트 히스토리를 오랫동안 볼 필요가 있나? 잘 모르겠더라.
슬랙 알림으로 로그, 그래프까지 보이기 때문에 개발자들은 콘솔을 들어올 필요가 없긴 하므로 데브옵스팀에서 그냥 공용계정으로만 로그인하면 될 것 같다. 나중에 필요할 것 같다 싶으면 그 때 업그레이드 하면 될 것 같다.
추가 1) 파드 리스타트나 노드 cordon 등도 콘솔에서 작업이 가능하다.
추가 2) 여러 클러스터들에 설치할 때, `clusterName`만 바꿔가며 설치하면 된다.
추가 3) 슬랙 알림 채널은 `slack_sink.slack_channel` 을 변경해주면 된다.
추가 4) 프로메테우스 알랏매니저와의 연동은 그냥 가이드에서 시키는대로 하면 된다.
추가 5) 헬름 차트가 아티팩트허브에 등록된게 아니라 차트버전을 찾기 쉽지 않았는데, 깃헙 릴리즈에 있는 버전 그대로 사용하면 된다.
끝!