Spinnaker on GKE (도입편)

7466 단어 CDgcpGKESpinnaker

ToDo



Halyard on GKE Quickstart - [ htps //w w. s 핀아케 r. 이오 / 세츠 p / 쿠이 cks rt / 하 rdg / ]
이것을 그대로(최신판으로 해, asia-northeast1-c존에서) 해 보았다.

Spinnaker?



-> CD (Continuous Delivery Platform)

장점은
· Immutable Infrastructure *1의 철저
· 예측 가능하고 안전한 배포 파이프 라인 만들기
 (cron에 의해서도 파이프라인 기동 가능 → k8s jobs의 관리에도)

역할


(인용: 참고 기사①)

이로 인해 출시
안정적인 이미지 만들기, 배포 후 테스트, 문제가 발생한 경우 되감기
등의 작업을 "제대로"관리할 수 있다

이 "제대로"부분을 이번에는 검증하고 싶다.
→ 이번에는 도입 만

Halyard?



-> Spinnaker 자체의 Deploy 관리 도구

Spinnaker는 복수의 컴포넌트(컨테이너)로 형성되어 있기 때문에, Halyard에서의 관리가 추천되고 있다.
Spinnaker의 각 컴포넌트의 Deploy, Test, Update의 실행을 포함한다.

필요한 것



· GCP 계정
 ·gcloud 명령 (GoogleCloudSDK)
GCE, GKE 사용
· · 이하의 API 활성화
  Google Identity and Access Management (IAM) API
  Google Cloud Resource Manager API

만드는 것





GCE에 Halyard를 배포하고 거기에서 GKE에 Spinnaker를 배포

해봤어



조금 시간이 걸리므로 먼저 GKE 클러스터를 만듭니다.
(1.8.4-gke.0, asia-northeast1-c, 나머지는 기본값)

왼쪽에 VM(GCE) 생성
GCP_PROJECT=$(gcloud info --format='value(config.project)')
HALYARD_SA=halyard-service-account

gcloud iam service-accounts create $HALYARD_SA \
    --project=$GCP_PROJECT \
    --display-name $HALYARD_SA

HALYARD_SA_EMAIL=$(gcloud iam service-accounts list \
    --project=$GCP_PROJECT \
    --filter="displayName:$HALYARD_SA" \
    --format='value(email)')

gcloud projects add-iam-policy-binding $GCP_PROJECT \
    --role roles/iam.serviceAccountKeyAdmin \
    --member serviceAccount:$HALYARD_SA_EMAIL

gcloud projects add-iam-policy-binding $GCP_PROJECT \
    --role roles/container.admin \
    --member serviceAccount:$HALYARD_SA_EMAIL
GCS_SA=gcs-service-account

gcloud iam service-accounts create $GCS_SA \
    --project=$GCP_PROJECT \
    --display-name $GCS_SA

GCS_SA_EMAIL=$(gcloud iam service-accounts list \
    --project=$GCP_PROJECT \
    --filter="displayName:$GCS_SA" \
    --format='value(email)')

gcloud projects add-iam-policy-binding $GCP_PROJECT \
    --role roles/storage.admin \
    --member serviceAccount:$GCS_SA_EMAIL
HALYARD_HOST=$USER-halyard-`date +%m%d`

gcloud compute instances create $HALYARD_HOST \
    --project=$GCP_PROJECT \
    --zone=asia-northeast1-c \
    --scopes=cloud-platform \
    --service-account=$HALYARD_SA_EMAIL \
    --image-project=ubuntu-os-cloud \
    --image-family=ubuntu-1404-lts \
    --machine-type=n1-standard-4

VM(GCE)에 SSH로 들어가기
gcloud compute ssh $HALYARD_HOST \
    --project=$GCP_PROJECT \
    --zone=asia-northeast1-c \
    --ssh-flag="-L 9000:localhost:9000" \
    --ssh-flag="-L 8084:localhost:8084"

최신 안정 버전 kubectl을 넣는다. (이번에는 v1.8.4가 들어갔다)
→ 시도했지만 화면이 표시되지 않는 버그가되어 꽤 막혔습니다.
튜토리얼대로 여기는 v1.6.1을 넣는다.
curl -O https://storage.googleapis.com/kubernetes-release/release/v1.6.1/bin/linux/amd64/kubectl

chmod +x kubectl

sudo mv kubectl /usr/local/bin/kubectl

안정판 halyard를 끼워넣는다.
curl -O https://raw.githubusercontent.com/spinnaker/halyard/master/install/stable/InstallHalyard.sh

sudo bash InstallHalyard.sh

. ~/.bashrc

GKE 등록
GKE_CLUSTER_NAME={YOUR_GKE_CLUSTER_NAME}
GKE_CLUSTER_ZONE={YOUR_GKE_CLUSTER_ZONE}

gcloud config set container/use_client_certificate true

gcloud container clusters get-credentials $GKE_CLUSTER_NAME \
    --zone=$GKE_CLUSTER_ZONE
GCS_SA=gcs-service-account
GCS_SA_DEST=~/.gcp/gcp.json

mkdir -p $(dirname $GCS_SA_DEST)

GCS_SA_EMAIL=$(gcloud iam service-accounts list \
    --filter="displayName:$GCS_SA" \
    --format='value(email)')

gcloud iam service-accounts keys create $GCS_SA_DEST \
    --iam-account $GCS_SA_EMAIL

Spinnaker 최신 버전을 사용하도록 설정 (이번에는 v1.5.1이 설정됨)
hal config version edit --version $(hal version latest -q)

GCS 설정
hal config storage gcs edit \
    --project $(gcloud info --format='value(config.project)') \
    --json-path ~/.gcp/gcp.json

hal config storage edit --type gcs

GCR 설정
hal config provider docker-registry enable

hal config provider docker-registry account add my-gcr-account \
    --address asia.gcr.io \
    --password-file ~/.gcp/gcp.json \
    --username _json_key

k8s 공급자 설정
hal config provider kubernetes enable

hal config provider kubernetes account add my-k8s-account \
    --docker-registries my-gcr-account \
    --context $(kubectl config current-context)

Deploy Spinnaker!
hal config deploy edit \
    --account-name my-k8s-account \
    --type distributed

hal deploy apply

Halyard (GCP) ⇔ Spinnaker (GKE) 연결
hal deploy connect

이번에는 로컬에서 9000 번을 링크하여 SSH 연결했으므로,
http://localhost:9000 에서 Spinnaker에 연결
※ deploy 후, OAuth를 설정하지 않은, GCR에 아무것도 없는 등 Warning이 나오지만 접속은 할 수 있다
 


감상



길어졌으므로, 실 동작에 대해서는 다른 기사에 쓰려고 생각합니다.

컨테이너 레지스트리(이번은 GCR)와 제휴해 주어 매우 편리해.
hal 명령 기억하지 않으면. 내용의 동작까지 이해할 수 있으면 k8s의 공부도 될 것 같다.hal deploy apply SoCOOL! Halyard는 상주시키지 않아도 좋을까?

매우 유용한 기사



Global Continuous Delivery with Spinnaker - Netflix 본가 블로그
→ 소개.

Spinnaker의 Continuous Delivery - 메르카
→ 알기 쉽고 사용하고 싶어지는 기사. 간결하게 정리되어 있어 훌륭하다.

Compute Engine에서 Spinnaker 실행 - GCP Blog
→ "Spinnaker 정보"섹션을 이해하기 쉽습니다.

*1 불변의 인프라 (참고: ht tp // // 게으른. 아니. 이. jp / l / m / 엔 rp 리세 / rc c s / 1701 / 23 / l_kz_ 0123_01. jpg )

좋은 웹페이지 즐겨찾기