CICD 배포/CICD 배포

CD - spinnaker

김붕어87 2022. 5. 6. 11:02
반응형
개요
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

 

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. 배포 완료

 

 

 

 

 

 

 

 

 

 

반응형