ghost deployment season 4

Page content

ghost blog를 구성해서 사용한 게 벌써 2014년 이다. 당시 0.x 버전 이었던 초반에는 얼마 못 가고 사라지지 않을까 걱정했는데 한참을 1.0버전을 발표하지 않더니 벌써 2.x 버전이다.

그동안 내가 ghost 블로그를 운용하는 방식도 몇 번의 변화를 가졌다.

시즌 1 - brew & tar-ball

처음에는 매뉴얼 대로 직접 Node.js와 ghost 소스를 이용해서 직접 OS X에 설치해서 운용했다.

시즌 2 - Docker

그러다 Node.js 버전이 꼬이는 것도 그렇고, docker를 쓰면 ghost 버전이 새로 나왔을 때 편할 듯 해서 docker를 쓰는 방식으로 변경했다. 이 시점에 docker의 stateless 속성을 이용하고, 데이터의 백업도 고려해서 ghost content는 Dropbox에 두고, docker 실행할 때 volume으로 마운트 하는 방식을 사용했다. 그 당시 ghost보다 먼저 운용하고 있던 wordpress도 함께 docker로 실행 환경을 바꿨다. wordpess는 ghost와 달리 MySql을 필요로 해서 docker-compose를 이용해서 두 개의 container를 연동해서 실행했다.

시즌 3 - Ansible로 remote deploy

이 당시에 ghost 블로그가 실행되는 mac mini 2011이 아닌 MacBookPro 2017에서 주로 작업을 하고 있던 터라 MacBookPro에서 mac mini에 로그인해서 작업하는 것도 귀찮아 원격(?)으로 ghost 업데이트를 하기 위해 ansible을 이용해서 ghost를 deploy 할 수 있게 했다.

시즌 4 - Deploy with kubernetes

docker, ansible로 실행 환경을 구성해 놓은 덕에 ghost와 wordpress를 기존에 Mac OS X의 docker for Mac을 사용하던 mini2 에서 Ubuntu를 설치한 mini1으로 별 다른 문제 없이 쉽게 옮길 수 있었다.

Docker for Mac 보다 훨씬 안정적인 docker 덕에 아무런 문제 없이 쓰고 있었는데 괜히 kubernetes 환경으로 꾸며보고 싶었다. 개인 블로그라 특별한 장점이 있을까 싶긴 하지만, kubernetes 공부도 할 겸해서 바꿔보기로 했다. 눈으로만 익히고 입개발만 하기 보다는 직접 해보는 게 남는 게 많을 거라 내가 가진 환경에서 kubernetes를 운용할 수 있는 방법부터 찾아 봤다.

내 환경

집에 있는 머신 들은 다음과 같다.

  • Mac mini1 2009 - Ubuntu 18.04 LTS. 현재 ghost, wordpress 블로그 운용 중
  • Mac mini2 2011 - OS X
  • HP mini PC - Windows 10
  • MacBook Pro 2017 - OS X

kubernetes의 기본 환경 구성이 Master와 Node라 대개 2개의 머신을 기본으로 요구한다. 한 대의 머신으로도 kubernetes를 구성할 수 있는 MiniKube등이 있지만 VM을 기반으로 하는 거라 벌써 연식이 10년이 넘은 mini1에서 돌리기에는 부담이 되보였다. 그래서 Docker for Mac이 설치되어 있는 mini2를 master로 하고, mini1을 node로 사용하는 방법을 생각하고 시도해봤다. 하지만 아직 Docker for Mac은 node를 추가하는 건 지원하지 않는다고. 그럼 worker node를 mini2에서 돌려야 한다는 건데 굳이 다시 mini2으로 container 실행 환경을 돌리고 싶지는 않았다.

그래서 mini2만으로 kubernetes를 구성할 수 있는 방법을 찾아 보다 microk8s를 적용해 보기로 했다. Canonical에서 공개한 kubernetes 실행 환경인데 local machine에서 실행할 수 있도록 경량화 한 것이 특정이라고 한다.

It’s not elastic, but it is on rails. Use it for offline development, prototyping, testing, or use it on a VM as a small, cheap, reliable k8s for CI/CD. Makes a great k8s for appliances - develop your IoT apps for k8s and deploy them to MicroK8s on your boxes.

기본적인 설치는 snap 을 이용하는데 https://microk8s.io/ 페이지에 있는 명령을 이용하면 간단하게 kubernetes 환경 구성이 가능하다.

Ghost를 kubernetes에 설치하는 것이 내가 처음은 아닐 듯 해서 검색해 보니 How to run Ghost in Kubernetes 이런 글이 나왔다. 2018년 12월 글이라 크게 달라진 점은 없을 듯 해서 kubernetes.io의 글과 이 글을 이용해서 하나 하나 따라갔다. 결론적으로 내가 구성한 환경 역시 이 분이 작성하신 것과 큰 차이가 없지만 한가지 차이점 때문에 몇 시간을 헤매야 했다. 이글은 Digital Ocean 환경에서 제공하는 kubernetes를 이용하여 ghost를 구성했는데 내가 구성한 환경은 microk8s였다. 가장 큰 차이점 중 하나가 microk8s는 외부에 서비스를 expose할 때 사용할 수 있는 방식 중 LoadBalancer를 원하지 않는다는 점이다.

자세한 설치기는 to be continued…