데브옵스가 사이드 프로젝트를 하는 방법

· DevOps, Kubernetes, GitOps

인프라 v2 구성하기

쿠버네티스쪽으로 조금 더 공부할만한게 없을까 어슬렁거리다 망고봇을 배포했던 서버가 눈에 들어왔다. 도커 컴포즈로 돌아가고 있는 서버를 쿠버네티스로 바꾸고, CI/CD와 메트릭 수집을 하면 재밌겠다는 생각이 들어 바로 작업을 시작했다.

처음에는 minikube를 사용하려 했는데, 외부 네트워크와 연결하는 작업이 까다로워 kubeadm으로 설치했다. 마음 같아서는 EKS를 쓰고 싶었지만 비용 이슈로 인해 최대한 작은 인스턴스에 온프레미스 쿠버네티스를 올리기로 했다. 향후 노드 2개를 사용하는 구성으로 바꾸긴 했지만, 시작할 때만 해도 비용을 고려해 싱글 노드 구성으로 시작했다. 이 과정에서 무료 크레딧을 모두 사용해 비싸져버린 GCP를 탈출해(…) Vultr로 서버를 옮겼다.

인프라를 구성하는 일은 회사에서 데브옵스 엔지니어로 근무하면서 이미 대부분 해보았던 일이였는데, 오랜만에 다시 하는 작업이라 기억이 나지 않는 부분이 더러 있었다. 기억이 안나는 부분들은 구글링하면서 인프라를 구성했다. 다 해본 작업만 있는 것은 아니였고, cert-manager는 처음 도입해보았다. 인증서를 letsencrypt로 만들어 주고 나면 항상 갱신 때문에 귀찮았는데 자동화해줄 수 있다는 점이 마음에 들어 설치했다. 결과적으로 ingress에 명시만 해주면 알아서 인증서 생성까지 대신해주는 걸 보고 도입하길 잘했다는 생각이 들었다.

Grafana, Argo 같은 내부 인프라 요소들은 내부망에 숨기고 싶었는데, 처음 설치할 당시만 해도 VPN을 구성해놓지 않은 상황이여서 실행에 옮길 수 없었다. 그리고 VPN망 내에서 SSL을 지원하는 것에 대한 이슈도 어떻게든 해결은 가능하지만 까다로운 문제로 남아있었다. (CA를 직접 브라우저에 추가해주면 되는 작업이긴 하다. 사실 VPN이 종단간 암호화를 해주니 개인 프로젝트 수준에서 SSL을 꼭 써야하는 것은 아니였지만, 브라우저의 HTTPS 부분에 빨간 불 들어오는게 보기 싫기도 했고, 베스트 프렉티스도 아니다 보니…) 위와 같은 보안 부분은 나중에 해결하기로 잠시 미뤄두었고, 일단은 외부에 노출되더라도 CI/CD와 메트릭 관련 컴포넌트들을 구성하는데 집중하기로 했다. Grafana, Argo 등을 Github SSO로 로그인하는 형태로 인증을 구성했다.

함께 쓰기가 가능한 확장 가능한 인프라 구조 만들기

쿠버네티스 환경을 구성하는데는 적지 않은 컴퓨팅 리소스가 소요된다. 쿠버네티스 마스터 노드의 컴포넌트들 자체의 리소스도 있지만, 부수적으로 사용하게 되는 CNI부터 시작해 ArgoCD, Prometheus, Grafana 같은 도구들도 컴퓨팅 리소스를 소모한다.

이런 도구들을 단 하나의 프로덕트만을 위해 동작하는 것은 리소스가 너무 아까웠다. 그래서 다른 사이드 프로젝트를 하고 있는 친구들을 찾아 여러 프로덕트를 한 클러스터 내에서 운영하면 비용 절감에 도움이 될 것이라고 생각했다. 개발자 친구의 입장에서는 CI/CD와 모니터링이 간편해 편리함을 누릴 수 있고, 데브옵스인 나의 입장에서는 인프라를 구성하고 운영하는 경험을 쌓을 수 있기 때문에 서로 윈윈하는 전략이였다.

현재 망고봇이 돌아가고 있는 쿠버네티스 클러스터에는 다른 개발자 친구의 사이드 프로젝트도 함께 돌아가고 있다. ArgoCD, Grafana는 RBAC을 기반으로 Github Organization 별로 Role을 분리했다. 현재 친구는 kubernetes 접근 권한이 필요가 없어 따로 권한을 발급해주지는 않았는데 필요해질 경우 CSR과 Role을 이용해서 네임스페이스 별로 권한을 발급해줄 계획이다.

이렇게 단일 클러스터 내에서 내 프로덕트와 친구의 프로덕트 모두 안전하게 운영하면서 비용을 절감할 수 있었다!

역시 인프라 재밌다

인프라를 구성하는 일은 정말 재밌다. 재미를 느끼는 몇몇 포인트들이 있다.

  1. 자동화가 성공적으로 동작하기 시작하는 것을 목격하는 순간
  2. 자동화의 기반이 되는 구성 요소들이 한 눈에 들어오는 순간 (내가 모든 핵심 구성 요소들을 이해했다고 느낄 때)
  3. 메트릭 수집이 성공적으로 시작되어 모니터링 도구에 그래프가 예쁘게 그려지는 보는 순간
  4. 로그 수집이 성공적으로 시작되어 모니터링 도구에 로그들이 예쁘게 쌓이는 걸 보는 순간

이번에 쿠버네티스 클러스터를 구성하면서 네 가지의 모든 요소를 골고루 느낄 수 있어 정말 행복했다.