728x90

안녕하세요! Devfest Cloud Hero 세션에 오신 여러분 환영합니다.

 

이번 랩을 통해서 다음의 내용을 학습합니다.

1. Kubernetes 클러스터 생성,

2. 애플리케이션을 다운로드 / Git 저장소 생성 후 GCR에 배포합니다.

3. Helm으로 SpinnakerKubernetes 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

감사합니다.

728x90
반응형