안녕하세요! Devfest Cloud Hero 세션에 오신 여러분 환영합니다.
이번 랩을 통해서 다음의 내용을 학습합니다.
1. Kubernetes 클러스터 생성,
2. 애플리케이션을 다운로드 / Git 저장소 생성 후 GCR에 배포합니다.
3. Helm으로 Spinnaker를 Kubernetes Engine에 배포합니다.
4. Docker Image를 빌드합니다.
5. 애플리케이션 변경시 Docker image 변경하는 트리거를 만들어 봅니다.
6. Spinnaker 파이프라인을 구성합니다.
가용 영역을 us-central1-f로 설정하기
gcloud config set compute/zone us-central1-f
GKE 클러스터 생성하기
gcloud container clusters create spinnaker-tutorial \
--machine-type=n1-standard-2
서비스 계정 생성하기
gcloud iam service-accounts create spinnaker-account --display-name spinnaker-account
이메일 주소 / 프로젝트 ID 변수 저장하기
export SA_EMAIL=$(gcloud iam service-accounts list \
--filter="displayName:spinnaker-account" \
--format='value(email)')
export PROJECT=$(gcloud info --format='value(config.project)')
서비스 계정에 storage.admin 역할 부여하기
gcloud projects add-iam-policy-binding $PROJECT \
--role roles/storage.admin \
--member serviceAccount:$SA_EMAIL
계정키 다운로드 하기
gcloud iam service-accounts keys create spinnaker-sa.json \
--iam-account $SA_EMAIL
Cloud Pub/Sub 토픽 만들기
gcloud pubsub topics create projects/$PROJECT/topics/gcr
Spinnaker에서 읽을 수 있는 구독 생성하기
gcloud pubsub subscriptions create gcr-triggers \
--topic projects/${PROJECT}/topics/gcr
gcr-trigger 구독에서 읽을 수 있는 권한 부여하기
export SA_EMAIL=$(gcloud iam service-accounts list \
--filter="displayName:spinnaker-account" \
--format='value(email)')
gcloud beta pubsub subscriptions add-iam-policy-binding gcr-triggers \
--role roles/pubsub.subscriber --member serviceAccount:$SA_EMAIL
Helm 설치하기
wget https://get.helm.sh/helm-v3.1.1-linux-amd64.tar.gz
tar zxfv helm-v3.1.1-linux-amd64.tar.gz
cp linux-amd64/helm .
Helm에 cluster-admin 역할 부여하기
kubectl create clusterrolebinding user-admin-binding \
--clusterrole=cluster-admin --user=$(gcloud config get-value account)
Spinnaker에 Cluster-admin 역할 부여하기
kubectl create clusterrolebinding --clusterrole=cluster-admin \
--serviceaccount=default:default spinnaker-admin
차트 리파지토리 추가하기
./helm repo add stable https://charts.helm.sh/stable
./helm repo update
Spinnaker 파이프라인에 인자 설정하기
export PROJECT=$(gcloud info \
--format='value(config.project)')
export BUCKET=$PROJECT-spinnaker-config
gsutil mb -c regional -l us-central1 gs://$BUCKET
export SA_JSON=$(cat spinnaker-sa.json)
export PROJECT=$(gcloud info --format='value(config.project)')
export BUCKET=$PROJECT-spinnaker-config
cat > spinnaker-config.yaml <<EOF
gcs:
enabled: true
bucket: $BUCKET
project: $PROJECT
jsonKey: '$SA_JSON'
dockerRegistries:
- name: gcr
address: https://gcr.io
username: _json_key
password: '$SA_JSON'
email: 1234@5678.com
# Disable minio as the default storage backend
minio:
enabled: false
# Configure Spinnaker to enable GCP services
halyard:
spinnakerVersion: 1.19.4
image:
repository: us-docker.pkg.dev/spinnaker-community/docker/halyard
tag: 1.32.0
pullSecrets: []
additionalScripts:
create: true
data:
enable_gcs_artifacts.sh: |-
\$HAL_COMMAND config artifact gcs account add gcs-$PROJECT --json-path /opt/gcs/key.json
\$HAL_COMMAND config artifact gcs enable
enable_pubsub_triggers.sh: |-
\$HAL_COMMAND config pubsub google enable
\$HAL_COMMAND config pubsub google subscription add gcr-triggers \
--subscription-name gcr-triggers \
--json-path /opt/gcs/key.json \
--project $PROJECT \
--message-format GCR
EOF
Helm 명령어를 통해서 차트 배포하기
./helm install -n default cd stable/spinnaker -f spinnaker-config.yaml \
--version 2.0.0-rc9 --timeout 10m0s --wait
포트 포워딩 설정하기
export DECK_POD=$(kubectl get pods --namespace default -l "cluster=spin-deck" \
-o jsonpath="{.items[0].metadata.name}")
kubectl port-forward --namespace default $DECK_POD 8080:9000 >> /dev/null &
소스 코드 저장소 만들기
gsutil -m cp -r gs://spls/gsp114/sample-app.tar .
mkdir sample-app
tar xvf sample-app.tar -C ./sample-app
cd sample-app
유저 데이터 변경하기
git config --global user.email "$(gcloud config get-value core/account)"
git config --global user.name "[USERNAME]"
소스 코드 저장소에 커밋 수행하기
git init
git add .
git commit -m "Initial commit"
코드 저장할 저장소 만들기
gcloud source repos create sample-app
git config credential.helper gcloud.sh
코드 저장소에 커밋 수행하기
export PROJECT=$(gcloud info --format='value(config.project)')
git remote add origin https://source.developers.google.com/p/$PROJECT/r/sample-app
코드 푸시하기
git push origin master
스토리지 만들기
export PROJECT=$(gcloud info --format='value(config.project)')
gsutil mb -l us-central1 gs://$PROJECT-kubernetes-manifests
버전 관리 설정하기
gsutil versioning set on gs://$PROJECT-kubernetes-manifests
프로젝트 ID를 Kubernetes 배포 매니페스트에서 사용하기
sed -i s/PROJECT/$PROJECT/g k8s/deployments/*
태그 만들기
git tag v1.0.0
태그 푸시하기
git push --tags
SPIN CLI 설치하기
curl -LO https://storage.googleapis.com/spinnaker-artifacts/spin/1.14.0/linux/amd64/spin
spin 실행 권한 설정하기
chmod +x spin
spin 실행 권한 설정하기
./spin application save --application-name sample \
--owner-email "$(gcloud config get-value core/account)" \
--cloud-providers kubernetes \
--gate-endpoint http://localhost:8080/gate
예시 파이프라인 업로드하기
export PROJECT=$(gcloud info --format='value(config.project)')
sed s/PROJECT/$PROJECT/g spinnaker/pipeline-deploy.json > pipeline.json
./spin pipeline save --gate-endpoint http://localhost:8080/gate -f pipeline.json
앱 색상 변경하기
sed -i 's/orange/blue/g' cmd/gke-info/common-service.go
저장소에 업로드하기
git commit -a -m "Change color to blue"
git tag v1.0.1
git push --tags
변경 사항 롤백하기
git revert v1.0.1
Ctrl+O, Enter 키, Ctrl+X를 차례로 누릅니다.
git tag v1.0.2
git push --tags
감사합니다.
'IT > GCP' 카테고리의 다른 글
[Cloud Hero 2-4] Kubernetes Engine으로 배포 관리 (0) | 2022.11.22 |
---|---|
[Cloud Hero 2-2] Google Kubernetes Engine의 NGINX 인그레스 컨트롤러 (0) | 2022.11.22 |
[Cloud Hero 1-3] Kubernetes Engine: Qwik Start (0) | 2022.11.22 |
[Cloud Hero 2-1] Kubernetes를 통한 클라우드 오케스트레이션 (0) | 2022.11.22 |
[Cloud Hero 1-2] Cloud Storage: Qwik Start – CLI/SDK (0) | 2022.11.22 |