전에 CD(Continuous Delivery) 도구인 Spinnaker를 테스트해 보려고 Docker for Mac에서 kubernetes를 사용해 봤는데 본격적으로 사용해 보려고 하니 클라우드에서 테스트를 해보고 싶었다. 이전에는 Spinnaker가 목적이 아니라 Chaos Monkey가 목적이라서 로컬에서 테스트했지만, Spinnaker 자체를 보려고 하니 실제 프로덕션에서는 어떻게 동작하는 지도 관심이 갔다.
처음에는 데모/평가용 설치를 해보려고 했지만 Google Cloud Launcher로 실행해 보려고 했지만, GCP를 잘 몰라서 그런지 제대로 실행 안 되는 문제를 도저히 해결할 수 없어서 실제 프로덕션 환경과 똑같이 설치하는 쪽으로 넘어갔다.
Spinnaker 관리 도구 Halyard 설치하기
Spinnaker를 프로덕션 환경에서 설치하려면 Spinnaker를 관리하는 Halyard라는 도구를 설치해야 한다. 문서에 따르면 로컬에 설치하거나 Docker를 이용해서 사용할 수 있는 것 같은데 Docker를 이용하면 생각지 못한 문제를 겪을 것 같아서 나는 로컬에 직접 Halyard를 설치했다. 참고로 Halyard는 Linux와 macOS에만 설치 가능한 것으로 보인다.
먼저 Hylyard 설치 스크립트를 다운 받는다.
다운받은 스크립트를 실행한다. 참고로 Hylyard를 설치하려면 Java 8 이상이 필요하고 설치되어 있지 않다면 Java >=8 not yet installed - please install java >=8.
오류가 발생한다.
제대로 설치되었는지 다음 명령어로 확인해 볼 수 있다.
만약 버전이 unknown 으로 나오면 java 버전과 호환성 문제로 다른 버전으로 설치를 시도해 봐야 한다.
https://github.com/spinnaker/halyard/tags
#Java 1.8.0_202 기준으로 halyard 1.33.0 까지 가능한 것 확인
sudo update-halyard --version 1.33.0
삭제는
hal deploy clean
#Now you can safely uninstall Halyard
sudo ~/.hal/uninstall.sh
GKE에 Spinnaker 설치하기
Halyard가 Spinnaker의 생명주기를 관리해 주기 때문에 다양한 환경에 설치할 수 있다.(Spinnaker가 Kubernetes에 맞춰진 도구는 아니다.) 문서를 보면 EKS, GKE 뿐만 아니라 DC/OS, Google App Engine, AWS 등 다양한 환경에 설치할 수 있고 나 같은 경우는 Kubernetes와 사용해 보려는 것이 목적이었기 때문에 Kubernetes Provider V2 (Manifest Based)
를 선택했다. 어차피 Kubernetes와 연동해서 사용하면 Kubernetes가 어디에 설치되어 있는가는 큰 상관이 없으므로 AWS EKS나 Google GKE인가에 상관없이 "Kubernetes (legacy provider)"와 "Kubernetes Provider V2 (Manifest Based)"로만 나뉘게 된다.
Spinnaker를 Kubernests와 함께 사용할 만한지 확인해 보려는 게 목적이었으므로 GKE에 Kubernetes 클러스터를 생성하고 Spinnaker 설치에 들어갔다.
설치한 GKE 클러스터를 kubectl
이 컨텍스트로 사용하도록 gcloud
로 인증정보를 가져온다.
kubectl
로 확인해도 같은 컨텍스트를 보고 있는 걸 알 수 있다.
이후 설치 과정을 따라가다 보니 spinnaker
라는 네임스페이스를 사용하는 것 같아서 네임스페이스를 새로 생성했다. 이는 실제로 운영하면서 다시 확인해 봐야 한다. 네임스페이스를 만들려고 ns.json
파일을 다음과 같이 만든다.
정의한 네임스페이스를 Kubernetes에 생성한다.
Kubernetes 프로바이더를 활성화한다.
k8s-account
라는 이름으로 어카운트를 설정한다.
아티팩트를 활성화한다.
이제 환경을 선택하라고 나오는데 환경으로는 "Distributed installation", "Local installations", "Local git installations"가 있다. 나같은 경우는 Kubernetes에 설치할 것이므로 "Distributed installation"를 선택했다. 환경설정을 위해 ACCOUNT
환경변수를 설정하고 아래 명령어를 실행한다.
다음은 Spinnaker의 설정 등을 관리할 스토리지를 설정해 주어야 한다. AWS S3, Redis, Google Cloud Storage(GCS) 등을 선택할 수 있는데 어차피 GKE로 설정하고 있으므로 GCS를 선택했다.
GCS 스토리지를 설정한다.
스토리지 소스를 GCS로 지정한다.
이제 설정이 끝났으니 정말 Spinnaker를 배포할 차례이다. 다음 명령어로 배포할 Spinnaker 버전을 확인할 수 있다.
테스트에서 최신 버전을 사용하지 않을 이유가 없으므로 1.8.5
를 선택하고 버전을 설정한다.
설정이 끝났으므로 Spinnaker를 배포한다.
설치 중에 인증과 관련해서 안내 메시지가 나오지만 여기서는 일단 설치해서 테스트해보는 것이 목적이므로 그냥 넘어간다. 프로덕션에서 실제 배포 도구로 사용하려면 세세한 설정을 손봐야 할 것 같다.
설치가 끝났으므로 설치한 Spinnaker에 접속해 보자. 그냥은 접속되지 않으므로 다음 명령어로 Kubernetes에 설치한 Spinnaker에 접속할 수 있다. 이 명령어가 로컬에서 Kubernetes 클러스터로 터널링을 해주는 거로 보인다.
9000
포트는 Spinnaker의 관리 UI인 Deck이고 8084
포트는 API 게이트웨이인 gate이다.
http://localhost:9000/로 접속하면 다음과 같이 Spinnaker 화면을 볼 수 있다.
'IT > Spinnaker' 카테고리의 다른 글
Spinnaker blue green 배포 (0) | 2020.05.12 |
---|---|
Spinnaker를 로컬에 Kubernetes로 설치하기 (0) | 2020.05.07 |