CD - spinnaker
개요
spinnaker은 넷플릭스에서 개발한 오픈소스(2015년 출시) CD(Continuous Delivery) Tool 이다.
kubernetes pod를 배포 및 리소스를 관리 해준다.
spinnaker는 pipeline 형태로 배포 한다.
Git, jenkins, 등 여러가지 CI Tool을 연동을 지원해준다.
spinnaker 공식 홈페이지 : https://spinnaker.io/docs/concepts/
넷플릭스 기술 블로그 - spinnaker : https://netflixtechblog.com/tagged/spinnaker
# 필수 사항
1. Spinnaker를 배포 할 클러스터에서 사용 가능한 최소 4 개의 코어와 16GB RAM을 권장합니다.
2. java 설치 (Halyard requires Java 11 to be installed)
> sudo apt install openjdk-11-jdk
3. kubectl 설치
> kubernetes 환경이 준비되어야 한다. (spinnaker은 pod 형태로 운영한다.)
Spinnaker 설치
1. Halyard 다운로드 & 설치 (링크)
curl -O https://raw.githubusercontent.com/spinnaker/halyard/master/install/debian/InstallHalyard.sh
# Halyard 다운로드
sudo bash ./InstallHalyard.sh
# Halyard 설치 (일반 유저로 설치)
Please supply a non-root user to run Halyard as: test1 # 일반 유저 user 입력
Halyard version will be stable
Halyard will be downloaded from gs://spinnaker-artifacts/halyard
Halyard config will come from bucket gs://halconfig
Halconfig will be stored at /home/test1/.hal/config
Uninstall script is located at /home/test1/.hal/uninstall.sh
Couldn't find a 'java' binary in your $PATH. Halyard requires Java to run.
cd ~
. ~/.bashrc
hal -v # halyard 설치 확인
2. spinnaker “Service Account” 배포 (링크)
Spinnaker가 kubernetes에 POD 배포를 하기 위해서 SA(Service Account) 설정 작업입니다.
CONTEXT=$(kubectl config current-context)
kubectl apply --context $CONTEXT \
-f https://www.spinnaker.io/downloads/kubernetes/service-account.yml
TOKEN=$(kubectl get secret --context $CONTEXT \
$(kubectl get serviceaccount spinnaker-service-account \ --context $CONTEXT \
-n spinnaker \
-o jsonpath='{.secrets[0].name}') \
-n spinnaker \
-o jsonpath='{.data.token}' | base64 --decode)
kubectl config set-credentials ${CONTEXT}-token-user --token $TOKEN
kubectl config set-context $CONTEXT --user ${CONTEXT}-token-user
3. kubernetes 저장소(S3) 등록 (링크)
spinnaker 저장소는 spinnaker pipeline, application, 등 다양한 META 정보가 저장된다.
spinnaker 저장소를 S3으로 지정하고, S3 접근 권한이 있는 AWS secret key, credencial key가 필요하다.
RBAC(Role) 방식도 가능
YOUR_ACCESS_KEY_ID="ACCESS KEY 입력"
REGION=ap-northeast-2
hal config storage s3 edit \
--access-key-id $YOUR_ACCESS_KEY_ID \
--secret-access-key \
--region $REGION
hal config storage edit --type s3
4. kubernetes provider 설정
Spinnaker Pod 배포 할 Kubernetes 설정
hal config provider kubernetes enable
hal config provider kubernetes account add dev-eks --context $CONTEXT
hal config deploy edit --type distributed --account-name dev-eks
5. spinnaker pod 배포
spinnaker 배포할 버전 선택ㅋ
spinnaker 배포
hal version list
hal config version edit --version 1.26.7
hal deploy apply
6. Spinnaker 외부에서 접근할 수 있도록 ELB 셋팅
kubectl patch service/spin-deck -n spinnaker -p '{"spec": {"type":
"LoadBalancer"}}'
kubectl patch service/spin-gate -n spinnaker -p '{"spec": {"type":
"LoadBalancer"}}'
7. ELB에 도메인 설정
spin-deck와 spin-gate 2개의 ELB를 Route53에 등록을 합니다.
hal config security ui edit --override-base-url http://spin-deck.dev.com:9000
hal config security api edit --override-base-url http://spin-gate.dev.com:8084
hal deploy apply
Spinnaker 배포
8. spinnaker 접속 테스트
- http://spin-deck.dev.com:9000/
- 특이사항 : spinnaker 구성을 변경하면 “시크릿 모드(Incognito mode)”으로 접근하는 것을 추천합니다.
https://spinnaker.io/docs/setup/other_config/security/authentication/#incognito-mode
9. spinnaker 배포 테스트
9-1. Application 생성
Application은 배포에 사용 할 “pipeline” 들을 저장할 수 있는 공간을 말한다.
dev Application를 생성한다.
9-2. Pipdeline 생성
- Application > dev 클릭
- Pipelines > “Configure a new pipeline” 클릭
- Pipeline Name : 파이프라인 이름 입력
- Create 클릭
- Add Stage 클릭
- Type : bake(Manifest) # 배포할 yaml를 생성하는 단계
- Name : 배포 이름
- Namespace : 배포할 Namespace 지정
- Expected Artifact : Artifact 사용 # Artifact 생성하는 방법
- Account : Chartmuseum 등록한 Artifact 지정
- Name : Chartmuseum에 올라간 nginx chart 지정
- Version : nginx chart version 지정
- Add stage 클릭
- Type : deploy(manifest) 클릭
- Stage Name : nginx deploy 으로 설정
- Account : 배포할 EKS 지정
- Override Namespace : dw 배포할 Namespace 지정
- Manifest Source : Artifact 지정
- Manaifest Artifact : Nginx 지정 (앞에서 생성한 Bake Manifest 지정)
- Save Changes 클릭
9-3. Pipeline 실행
nginx-test Pipeline “Start Manual Execution” 클릭
- 첫 번째 Stage 클릭
- Baked Manifest 클릭
- “Baked Manifest Yaml” 클릭 (Bake Manifest에서 지정한 nginx Chart yaml 내용 확인)
- 배포할 Nginx yaml 내용입니다.
- 두 번째 Stage 클릭
- “Task Status” 에서는 배포 정보 및 작업에 걸리는 시간을 보여준다.
- “Deploy Status”탭에서는 배포한 Resource 정보를 보여준다.
- Resource마다 yaml내용과 Details 정보도 볼 수 있다.
9-4. 배포 완료