회고모음

4년차 데브옵스 엔지니어의 쿠버네티스 여정과 배움의 기록

악분 2024. 9. 4. 03:24
반응형

안녕하세요. 저는 쿠버네티스로 커리어를 시작했고 어느덧 4년차 엔지니어가 되었습니다. 4년차가 되면서 어떻게 제가 쿠버네티스 등을 공부했는지 정리해봤습니다.


운이 좋게 쿠버네티스로 커리어를 시작했지만 현재는 쿠버네티스 뿐만 아니라 클라우드, 네트워크 등 다양한 분야를 얇게 만지고 있습니다. 아마 대부분의 쿠버네티스를 다루는 사람들은 쿠버네티스 코어 코드를 개발하는 분야(예: EKS, AKS, GCP, NKS 등)가 아닌 쿠버네티스를 다루는 사람일 것이라고 생각합니다. 저 또한 쿠버네티스를 다루는 사람 중 한명입니다.


쿠버네티스를 다룬다는 것은 개발자가 만든 애플리케이션을 쿠버네티스에 잘 실행되도록 설정하는 것입니다. 여기서 애플리케이션이 쿠버네티스에 잘 실행되게 한다는 것은 정말 많은 것을 포함합니다.

1년차일 때 애플리케이션이 잘 실행되게 하도록 쿠버네티스 yaml을 수도 없이 만졌습니다. pod, service, ingress 등 셀 수 없이 생성하고 수정하고 삭제했습니다. yaml을 많이 만지다보니 자연스럽게 helm chart와 kustomize를 1년차 때 접하게 되었습니다. 그 당시 helm 2버전이 마지막 버전이었는데 지금보다 자료가 많이 없어서 공부하기 힘들었던 기억이 있습니다. 

쿠버네티스 yaml 이외에도 개발자가 만든 애플리케이션을 도커 이미지로 만들기 위해 docker build & push & pull 명령어를 정말 많이 쳤습니다. 1년차때 고시원에 살았었는데 퇴근 후 늦은 밤에 고시원 옥상에 올라가 야경을 바라보면서 실습 했던 추억이 떠오르네요. 

2년차일 때 애플리케이션이 잘 실행되게 하도록 회사내 비지니스 업무에 익숙해지려고 노력했습니다. 그리고 의사소통을 하기 위한 간단한 백엔드 개발공부를 했습니다. 2년차일 때 다녔단 회사는 파견을 다니는 회사여서 사수와 함께 파견을 다녔었습니다. 그러다가 사수가 이직을 하고 어쩔 수 없이 혼자 파견을 갔었습니다. 저는 말을 잘 못하는 성격이어서 파견지에서 혼자 남겨질 때 너무 힘들었습니다. 지금 생각하면 어떻게 버텼는지 기억이 잘 안납니다. 버티기 위해서는 기술적인 내용보다 비지니스 업무에 익숙해지는게 더 중요하다고 판단했었습니다. 그래서 최대한 많은 회의에 참석했었고 다른 회사 직원에게 많은 질문을 했었습니다. 운이 좋게도 다른 회사 직원 중에 10년차인 아키텍터가 사수역할을 해주었고 매일매일 재밌게 일을 했었습니다. 지금도 이때 만났던 아키텍터분과 연락을 하고 있습니다.

2년차 때 그나마 쿠버네티스 공부를 했다면 모니터링 시스템 구성입니다. 프로메테우스, loki, 엘라스틱서치 등 오픈소스 모니터링 아키텍처를 공부하고 구축해보고 차이점을 공부했습니다. 이 때 느낀 것은 구축은 정말 쉽지만 어떤 것을 모니터링할 지 정의하는게 어렵다고 느꼈고 특히 스토리지가 정말 성능에 많은 역할을 하는지 알았습니다. 

쿠버네티스 공부 이외에도 개발공부를 했습니다. 비지니스 업무를 하기 위해 개발자와 PM과 의사소통이 많았기 때문에 저는 백엔드와 프론트 개발자와 의사소통을 하기 위해 최소한 개발공부를 했습니다. 김영한님 스프링 강의를 구매해서 게시판을 만들어보고 ReactJS로 간단히 todo리스트를 만들었습니다. 확실히 개발공부를 시작하고 나서 개발자와 의사소통이 많이 좋아졌습니다.

3년차일 때 애플리케이션이 잘 실행되게 하도록 쿠버네티스 네트워크를 공부했습니다. 운이 좋게 가시다님이 진행하는 쿠버네티스 네트워크 스터디에 참여하게 되었습니다. 이 스터디가 쿠버네티스를 1년차보다 더 깊게 공부하게 된 계기입니다. 1년차 때는 단순히 yaml만 작성했는데 3년차 때는 스터디를 통해 원리를 조금씩 공부할 수 있었습니다. 스터디가 종료되고 운이 좋게도 페이스북 쿠버네티스 커뮤니티에서 발표를 했습니다. 발표자료는 저의 github에 공개되어 있습니다. 
- github: https://github.com/choisungwook/facebook-meetup/blob/main/presentation.pdf

업무에서는 2년차와 마찬가지로 파견을 많이 갔었는데 트러블슈팅을 엄청 많이 했습니다. 특히 쿠버네티스 버전이 낮은 파견지에는 버그가 많이 났었는데 에러를 만날때마다 식은땀이 흘렀습니다. 1,2,3년차 파견지는 전부 온프레미스 환경의 폐쇄망이었고 상주를 안했기 때문에 구성환경 파악이 너무 힘들었습니다. 온갖 추측을 다하면서 트러블슈팅을 했었는데 지금 와서 생각해보니 엄청 많은 도움이 된 것 같습니다.

3년차가 끝날 때쯤 운이 좋게 이직을 했습니다. 이전에는 온프레미스 쿠버네티스만 만졌었는데 이직한 곳에서는 AWS 클라우드의 managed 쿠버네티스인 EKS를 다루게 되었습니다. 쿠버네티스 자체는 어렵지 않았지만 어려운 기술은 바로 AWS 네트워크와 보안입니다. EKS를 하면서 깨달은 것은 쿠버네티스 주변환경인 네트워크, 스토리지, 보안이 정말 중요한 요소인 것을 알았고 왜 CSI, CRI, CNI 인터페이스가 있는지 몸소 느끼게 되었습니다. 

4년차 때는 마이그레이션 프로젝트, 운영업무를 주로 하고 있습니다. AWS 클라우드를 많이 작업을 하니 자연스럽게 IaC를 하게 되고 테라폼도 만지게 되었습니다. 또한 운영업무를 하다보니 안정성있게 운영하는게 얼마나 중요한지 느끼게되었습니다. 그 느낌을 살려 블로그에 pod 안정성에 대해 정리했었습니다.
- 블로그 링크: https://malwareanalysis.tistory.com/743

마이그레이션 프로젝트를 하면서 온프레미스와 AWS클라우드를 같이 사용하는 환경을 접했습니다. 네트워크가 얼마나 어려운지 매일매일 느끼고 있습니다. public이 아닌 private통신을 해야하는 조건이 많은데, 온프레미스에서 EKS pod를 호출하는게 얼마나 어려운지 느끼게 되었습니다. 이미 구축되어 있는 네트워크 환경을 이해하고 통신만 하게 하면 되는 상황이었는데, 이 상황마저도 너무 어려웠습니다. 

네트워크 공부를 하면서 열심히 일을 하다보니 운이 좋게 2024년 AWS summit에서 IPv6에 대해 발표를 하게 되었습니다. 사실 이 발표는 저의 실패이야기를 했었는데 나중에 꼭 IPv6를 적용해봐야겠습니다.

또 다른 색다른 점은 쿠버네티스가 아닌 환경을 많이 만지게 되었습니다. 3년차까지는 95%이상 쿠버네티스 작업이었는데 이직한 곳은 쿠버네티스가 아닌 서버를 다룰 일이 종종 있습니다. 쿠버네티스에서 쉽게 했던 작업이 서버에서 쉽게 안되는 상황을 많이 만났습니다. 그리고 오픈소스보다 상용솔루션을 많이 만지게 되었습니다. 오픈소스에서는 직접 디버깅하는 습관이 있었는데 상용솔루션은 디버깅을 하는 것보다 솔루션회사에 직접 문의하는게 더 빨리 문제 해결하는 것이라고 느꼈습니다.

끝으로, 지금 일을 하면서 DB, 개발실력, 의사소통이 많이 부족하다고 느끼고 있습니다. 이 부분을 어떻게 개선해야할지 요즘에 많은 고민 중에 있습니다. 특히 의사소통은 참 힘든 것 같습니다. 😭

반응형