kube-apiserver에 대해 정리한 글을 읽다가 인상깊은 문장을 봤는데
‘표면적으로는 누구나 사용하기 쉽게 잘 만들어진, 우리에게 친근한 REST API서버라는 것’
이라는 구문이 었습니다.
생각해보니 이름부터 api server 인데 이걸 사용해서 편리한 기능을 만들 수 있지않을까? 라는 생각이들었고
안그래도 평소에 운영중인 쿠버네티스에 대하여 모니터링 및 특정 이벤트 발생 시 어떤 방식으로든
알림을 띄워주는 것에 대해 필요성을 느끼고 있었습니다.
사실 모니터링은 Kube Proxy DashBoard 및 Lens를 사용하여 하고 있지만, 특정 이벤트가 발생했을 때 무료로
알림 기능을 제공하는 툴에 대해서는 찾지 못하고 있었고, api-server를 네이버 API와 같이 사용할 수 있다면
알림 기능을 만들어보는 것도 나쁘지 않다고 생각해서 기능 구현을 시작했습니다.
먼저, 대부분 클러스터에 요청을 보낼때는 kubectl이라는 툴을 사용하지만,
알림 기능을 사용하기 위해서는 따로 서버를 생성 해야했고, 이렇게 직접 REST API 형식으로 호출하기
위해서는 여러가지 방법이있는데 저는 쿠버네티스에서 제공하는 Kubenetes SDK를 사용했습니다.
처음에는 익숙한 자바를 사용하여 개발하고자 하였으나, Python에서 제공하는 방법이 개발하기 쉬워 파이썬으로
작업했습니다. (Kubenetes SDK에서는 매우 많은 언어(c, java ,python etc..)를 지원합니다.)
[작업 순서]
1. pip를 통해서 kubernetes 를 설치합니다.
pip install kubernetes
2. README.md에 작성된 내용을 토대로 필수 내용을 작성했습니다. 리드미의 가이드가 매우 간단하여 작성이 비교적 편리했지만 한 부분에서 막힘이 있었는데 바로 config.load_kube_config() 이었습니다.
느낌상으로 쿠버네티스 config파일의 위치를 넣어줘야 할 것 같은데 예제에서는 주소를 넣고있지 않았기 때문에 혼동되는 부분이었습니다. 확인해보니 주소를 넣는 것이 맞는 것이었습니다.
3. 저는 주소를 config.load_kube_config(”C:\Users\kubenetes_config.yml”) 이런 식으로 작성하였는데
SyntaxError: (unicode error) 'unicodeescape'
codec can't decode bytes in position 2-3: truncated \UXXXXXXXX escape
위와 같은 에러가 발생했는데, 확인해보니 폴더의 주소를 바로 복사하게 되면 구분자가 ‘\’ 로 들어가게되는데 파이썬에서는 아래와 같이 ‘/’로 넣어주어야 한다고 합니다.
config.load_kube_config(”C:\Userskubenetes_config.yml”)
이렇게 변경해주어 해당 부분은 해결했습니다. config 파일의 경우 쿠버네티스에서 미리 다운받으셔야 합니다.
4. 저는 각 pod의 상태를 파악하여 특정이벤트 시 알림을 발생시키기 위해 SDK에서 제공해주는 list_pod_for_all_namespaces 메서드를 사용하여 pod의 데이터를 불러온 뒤 후 처리 해주었습니다.
(제공 메서드의 종류는 공식문서에서 확인 할 수 있습니다. https://github.com/kubernetes-client)
5. 저는 데이터를 리턴 받아 pod의 상태가 Running이 아닌 상태, 즉 정상적인 상태가 아니라면 Slack으로 알림을 보내도록 코드를 추가했습니다.
Slack으로 알림을 보내기 위해서는 웹훅 URL이 필요합니다. 먼저 슬랙에 채널을 개설한 뒤, 좌측 상단 메뉴에서 내역> 앱 탭에서 수신 웹후크 혹은 incoming web hooks를 검색하여 slcak에 추가를 하면 웹훅 URL이 생성되는데 이 URL을 사용하여 json 형태로 필요한 메시지를 전달하면 해당 채널로 알림메시지가 발송됩니다.
현재 저는 Pod가 Pending 인 상태에 알림메시지를 보내는 간단한 기능만 구현해두었습니다.
Kube-apiServer를 사용하면 여러가지 재미있는 기능을 만들 수 있을 것네요. 추후에 기능 추가해서 공유하도록 하겠습니다.
코드는 아래 깃 허브에 올려놨으니 필요하신 분들은 마음껏 사용하시면 될 것 같습니다.
GitHub - hanamuk/ObserveKubernetes
GitHub - hanamuk/ObserveKubernetes
Contribute to hanamuk/ObserveKubernetes development by creating an account on GitHub.
github.com
코드 보안 이슈로 인해 private전환 했습니다 ㅠ
필요하신분은 댓글 달아주시면 메일로 전달드리겠습니다
참고 글
- https://coffeewhale.com/apiserver
- https://kubernetes.io/ko/docs/reference/using-api/
- https://github.com/kubernetes-client
- https://wotres.tistory.com/entry/python-에서-SyntaxError-unicode-error-unicodeescape-codec-cant-decode-bytes-in-position-2-3-truncated-UXXXXXXXX-escape-에러-해결법