Spinnaker (1)
Spinnaker는 Netflix에서 개발한 멀티 클라우드 CD(Continuous Delivery)를 위한 플랫폼입니다.
Spinnaker는 AWS, GCE, Azure, Kubernetes(이하 k8s) 등 다양한 멀티 클라우드 환경에 서비스를 배포할 수 있는 CD 환경을 제공합니다.
또한 Jenkins, Docker Registry, Git 등의 다양한 트리거를 통해 비교적 쉬운 UI로 파이프라인을 구성할 수 있게 해줍니다.
배포 중 문제가 생기면 쉽게 이전 버전으로 Rollback이 가능하고 자체적으로 Red/Black(=Blue/Green)이나 Canary 배포 전략을 제공하고 있습니다.
얼마 전, Git-Jenkins-Spinnaker-k8s로 이어지는 CICD 환경을 구성해야 하는 미션이 있어서 온프라미스 환경에 Spinnaker를 설치하였습니다.
설치 도중 겪은 문제나 (알고나면 쉽지만) 컨셉적으로 약간 이해하기 어려웠던 부분에 대해서 도움이 되고자 공유합니다.
Concept
먼저, Spinnaker가 무엇인지 찾아보면 제일 먼저 볼 수 있는 것이 아래 컨셉 이미지입니다. 분명히 익숙한 단어들인데 처음엔 아무리 설명을 읽어봐도 Spinnaker에서 어떤 의미로 쓰인다는 것인지 와 닿지가 않았습니다.
출처 : https://www.spinnaker.io/concepts/
힌트는 Provider별로 매핑되는 용어가 다르다는 것입니다.
위에서도 언급했듯이 Spinnaker는 서비스를 멀티클라우드 환경에 배포할 수 있고, Spinnaker에서는 각 환경을 Provider라고 부릅니다.
즉, AWS, K8s, Azure 등 서비스가 배포되는 환경이 Provider입니다.
레퍼런스 문서를 보면 이 Provider별로 각 용어를 매핑시켜 놓았는데요.
예를들어, K8s Provider의 경우 각 용어는 아래와 같은 K8s 리소스들과 매핑됩니다.
- Server Group = Replica Set Resource
- Cluster = Deployment Resource
- Load Balance = Service Resource
- Firewall = Ingress Resource
Spinnaker UI의 각 메뉴에서 해당되는 K8s Resource를 배포하고 모니터링할 수 있습니다.
출처 : https://www.spinnaker.io/guides/tutorials/codelabs/kubernetes-source-to-prod/
예를들어, Load Balancer 메뉴에서 Create Load Balancer를 하면 버전에 따라 yaml 형식의 manifest를 직접 입력하거나 UI가 제공하는 템플릿을 이용하여 K8s 환경에 Service Resource를 생성할 수 있습니다.
그 외 Provider별로 매핑시켜놓은 가이드는 https://www.spinnaker.io/reference/providers/ 를 참고하시기 바랍니다.
Spinnaker Architecture
Spinnaker는 MSA 구조를 가지고 있기 때문에 구동 시 굉장히 많은 서비스들이 실행됩니다.
출처 : https://www.spinnaker.io/reference/architecture/
- Deck : Web UI (Port: 9000)
- Gate : API Gateway. UI를 비롯한 모든 API Call은 이 Gate를 통해 호출됩니다.
여러 서비스들을 호출하기 위한 단일 Endpoint 입니다. (Port: 8084)
- Orca : 오케스트레이션 엔진으로 모든 ad-hoc과 파이프라인을 핸들링합니다.
- Front50 : 어플케이션, 파이프라인과 같은 메타데이터를 스토리지에 저장합니다.
- Rosco : Packer 기반으로 GCE 이미지, AWS AMI, Azure VM 이미지를 생성하는 Bakery 역할을 담당합니다.
- Igor : 파이프라인을 구성 시 CI Job을 트리거로 사용할 수 있습니다.
예를들어, Jenkins, Travis CI와 같은 CI Job을 Polling 해서 파이프라인을 실행시킵니다.
- Echo : 파이프라인 단계에서 Slack, email, SMS 등에 노티를 줍니다.
- Flat : 권한
- Keyenta : Automated Canary Analysis 서비스로 Canary 배포를 가능하게 해줍니다.
- *Halyard : Spinnaker 관련 설정들을 적용해서 실제로 위의 서비스들을 구동시키는 역할을 합니다.
Halyard CLI를 통해 Spinnaker 설정 정보를 변경할 수 있고 변경 후에는 위의 서비스들을 재구동시켜 Spinnaker에 적용합니다.
Spinnaker를 설치하는 다음 포스팅에서 실제 사용하는 방법을 자세히 보도록 하겠습니다.
지금 모든 서비스들에 대해서 다 이해할 필요는 없습니다. 이런 기능들이 있구나 정도로만 이해하고, 실제로 Spinnker를 구동시켜 보고 UI에 있는 기능들을 사용해보면 자연스럽게 매핑이 될 것입니다.
각 서비스들에 대해서 더 자세히 알고 싶은 분들은 https://www.spinnaker.io/reference/architecture/ 를 참고하시기 바랍니다.
참고
https://www.spinnaker.io/