Homin.dev, k8s 클러스터 월 비용+수익 전격 공개!
By Homin Lee
도메인을 와장창 구매하고, GKE에 k8s 클러스터를 꾸리고 개인사이트를 만들기 시작한 지 한 달이 지나가고 있습니다.
단기간에 정말 많이 배웠고 재미있게 운영하고 있습니다. 그동안 한 일들과 현재 상태를 공유합니다.
현재의 구성
현재의 구성은 다음과 같습니다.
6개 정도의 Go로 만든 앱들을 포함에 20여 개의 포드가 돌아가고 있고, 어쩔 수 없는 경우 다른걸 컨테이너로 말아서 띄웠습니다.
작고 많이 띄웠으니까 이러면 MSA인가요? Go라서 가능하겠지만 e2 머신임에도 쾌적하고 운용되고 있습니다.
그동안 한 일
초반에 비해 세 가지 정도의 큰 변화가 있었습니다. (물론 큰 티는 안 납니다 ㅋ):
ingress-proxy에서 대문 웹 페이지 분리
이 사이트를 꾸리게 된 계기는 여러 서비스의 개인 페이지에 제가 쉽게 접근하기 위함이었습니다.
예: homin.dev/yt -> 내 유튜브 채널, homin.dev/fb -> 내 페이스북 페이지
ingress-proxy에서 http-redirection으로 할 수 있는데, 그 포드는 kubeip를 통해 고정아이피를 받아야 되기 때문에, 1 replica 만 가능하더라고요. 그리고 머신도 e2-micro로 제일 후진?걸 쓰고 있어서 거기서 대문페이지를 서버사이드에서 렌더링하고 있자니 느낌상 좀 굼뜬 기분이라 분리했습니다.
ingress node는 이제 외부 서비스로 이동하기 위한 http redirection, work 노드 내의 내 서비스들로 이동하기 위한 http reverse proxy 만을 제공합니다.
인증서 관리 부분도, 전 포스팅에서 꼭 수동으로 해야 한다고 했지만, 자동화를 시도 중이며 이는 밑에서 다시 언급하겠습니다.
gh-pages의 사이트들 이전
보시는 분들이 후원을 쉽게 할 수 있다면 손쉽게 클러스터 운영비를 벌 수 있을 거라고 생각했지만 현실은 지인들(이미 감사했지만 또 감사드립니다. 형님들 ㅎㅎ)을 제외하곤 아무도 거기를 통한 후원을 하지 않으시더군요. 부끄러우신가 봐요. :)
그래서 구글 Adsense 광고를 붙였습니다.
첫 심사 시도에는 제 사이트에는 대문페이지 말고 아무것도 없다며 (그게 의도인데!) 반려당하더라구요; 그래서 과거를 복구해 풍부해진 블로그와 outdated 된 내용이지만 뭔가가 들어있는 개인 위키 복구분을 가지고 다시 심사를 요청해 성공했습니다.
심사 후 10일 정도 동안, $6 정도를 벌었습니다. 감사합니다.
대문 페이지 꾸미기 자력 해결
제 사이트는 모든걸 직접 하는 데 의미를 두고자 시작했기 때문에 대문 페이지의 웹 화면도 Go 언어의 template 패키지를 사용한 서버 사이드 렌더링입니다. html을 한 땀 한 땀 꾀었다는 이야기죠. 그러고 보니 CSS는 정말 어떻게 해야 하는지 몰라서, 숨고 서비스에 의뢰했었습니다. (숨고 좋아요!)
견적이 왔는데, 전 10만 원 정도의 몇 시간 짜리 일로 생각, 60만 원에 일주일 이상의 일정을 부르더라고요. 아.. 이건 좀.
지인 총동원해도 답이 없던 차에, 참고하려고 블로그의 HTML을 보다가 Tachyons을 알게 되었습니다. 간단히 설명하면 태그의 class에 미리 정한 특성들을 나열해 코드로 웹을 디자인하는 프로젝트입니다.
뚝딱! 반나절 만에 현재의 모습이 완성되었습니다.
CSS는 결국 1도 손대지 않았습니다.
스팟 노드의 특성
스팟 노드는 말 그대로 아무 때나 터집니다. 어떨 땐 일주일가량 유지되기도 하고, 몇 시간 주기로 터지기도 합니다. 저는 두 개의 워크 노드 풀, ingress와 work(잘못 지은 이름)이 있는데, 둘이 동시에 각각 터집니다. 통시에 터지진 않더라고요.
다행히 마스터 노드가 터진 워크-노드들을 복구해 자동으로 복구해 주는 것 같습니다만, 남아있는 찌꺼기는 아래의, 상태가 Fail인 모든 포드 삭제하는, 명령어 등을 실행해 수동으로 정리하고 있습니다.
k delete pods --field-selector status.phase=Failed -A
또한, 지난 포스팅에서 인증서를 노드에 저장해서 포드 재시작해도 괜찮다고 했는데… 네… 노드 터지면 날아갑니다. 인증서가 날아가면 노드와 서비스들이 모두 살아있어도 FQDN으로 접근이 안되니까 장애 상황 이더군요.
인증서 만을 위해 최소 단위가 10G인 persistace disk에 추가 지출은 하기 싫고…
우선은 ingress-proxy에 Telegram bot으로 앱을 시작과 종료 시에 메시지를 남기게 해서; 몇 차례 수동으로 인증서를 재생성했습니다.
다행히 yes
명령어 등을 조합해 사용자 입력 없이 인증서를 새로 만드는 스크립트를 작성했는데,
지금까지 미묘하게 동작이 안 되는 부분이 있어서 튜닝 중입니다.
우리는 답을 찾을 것이다. 늘 그랬듯이. - 인터스텔라
GKE 월 비용 대 공개!
각설하고 비용 공개합니다. 만원이 안 될 거라는 예상은 빗나갔습니다.
일 평균 비용
보통은 일당 400원꼴로 비용이 나가더라고요.
9월 15일에 추가 지출이 있었던 것은 블로그의 asset을 여기저기 옮겨보다가, 실수로, 버킷을 모두 다운로드받았을 때의 비용입니다.
들어올 때는 맘대로 지만 나갈 때는 돈이란다.
보시면, 미국에서 한국으로의 트래픽에도 비용이 나가고 있는데, 저는 거의 100%의 인입이 한국에서 일어나고 있어서 좀 아깝다는 생각이 들더라고요.
아이오와 리전이 싸길래 무지성으로 골랐는데, 한국 리전이 조금 비싸도 네트워크 비용이 빠지니 새로 프로젝트를 시작하시는 분들은 잘 고려해 보시길 바랍니다.
또한, work node에 서비스를 잔뜩 담을 생각으로 20G 디스크를 신청했는데 아직 1G도 못 썼습니다.
4G 정도는 노드의 OS에서 기본으로 먹고 들어가므로 10G 디스크는 가용 6G, 20G는 가용 16기가 뭐 이렇습니다. 비용 계산기에서는 10G에 월 500원 더 나간다던데, SKU상으로는 상관없이 사용량(500M)에 대한 비용만 나가고 있는 것도 같고… 아직 잘 모르겠습니다.
그럼, 400원 x 30일 = 12,000원이면 되는가?
실제 청구 예상 비용
와장창!! 월 금액 27,000원 예상!
9월 21일에 네트워킹 비용으로 13,000원이 추가로 청구되었습니다. 하루만 그래서 DDOS 공격이라도 당했나? 했는데 확인해보니, MQTT서버가 안되기 시작해 이것저것 살펴보다가 Firewall Insights라는 인공지능 방화벽 로그 분석기를 켰던 비용이었습니다.
그걸 사용하고도 MQTT서버로 접근이 안 되는 이유는 못 찾았습니다. 아예 방화벽에 hit가 안 되는 것 같습니다…
그래서 현재의 방명록은 영수증 프린터로 안 나오고 그냥 Telegram 메시지로 받고 있습니다. 아쉬워라…
뭔가 자동이라고 하고, 좋아 보이는 건 돈 나간다는 이야기구나!라는 좋은 경험을 쌓았습니다. ㅎㅎ
마무리
GCP의 계정 첫 마스터 노드 무료 정책에 의해 95,000원이 세이브되는 것은 최고입니다.
k8s 클러스터 연습한다고 로컬에 k8s를 띄우시는 분들을 종종 보는데, k8s를 “설치"하시는 게 즐거우신 거라면 할 말은 없지만, 월 15,000원 정도의 비용이면 실전 k8s 클러스터를 “사용"해 볼 수 있으니 이 방법이 좋다고 생각합니다.
Diagrams Sandbox를 사용해 다이어그램을 그리며 설명한 영상 남깁니다. 긴 글 봐주셔서 감사합니다.
끝!