DevOps 방식에서는 정기적으로 여러 배포를 사용하여 '지속적 배포', 'Blue/Green 배포', 'Canary 배포'와 같은 애플리케이션 배포 시나리오를 관리합니다.
Google Cloud Shell로 실습하겠습니다.
gcloud auth list
# 사용 중인 계정 이름 목록 표시합니다.
gcloud config list project
# 프로젝트 ID 목록을 표시합니다.
gcloud config set compute/zone asia-northeast2-a
# GCP 영역을 설정하고, 로컬 영역을 asia-northeast2-a로 설정합니다.
gsutil -m cp -r gs://spls/gsp053/orchestrate-with-kubernetes .
cd orchestrate-with-kubernetes/kubernetes
# 컨테이너와 배포를 만들고 실행하기 위한 코드를 가져옵니다.
gcloud container clusters create bootcamp --num-nodes 5 --scopes "https://www.googleapis.com/auth/projecthosting,storage-rw"
# n1-standard-1 노드 5개로 클러스터를 만듭니다. 몇 분정도 소요됩니다.
kubectl explain deployment
# 배포 객체에 대해 알아봄 (--recursive 옵션을 이용하여 모든 필드를 볼 수도 있습니다.
kubectl explain deployment.metadata.name
# 내용을 보면 기능 이해에 도움이 됩니다.
vi deployments/auth.yaml
# deployments/auth.yaml 구성 파일을 업데이트합니다.
# containers 섹션에 있는 이미지를 변경합니다.
containers:
- name: auth
image: kelseyhightower/auth:1.0.0
cat deployments/auth.yaml
# 배포를 통해 어떻게 하나의 복제본이 생성되고 버전 1.0.0의 인증 컨테이너를 사용하는지 확인.
kubectl create -f deployments/auth.yaml
# kubectl create를 사용하여 배포 객체를 만듭니다.
kubectl get deployments
# 배포를 만들면 생성 여부를 확인할 수 있습니다.
kubectl get replicasets
# 배포가 생성되면, Kubernetes에서는 배포에 관한 ReplicaSet를 만듭니다.
# 배포에 관한 ReplicaSet가 생성되었는지 확인할 수 있습니다.
kubectl get pods
# 마지막으로, 배포의 일부로 생성된 포드를 볼 수 있습니다.
# ReplicaSet가 생성될 때 Kubernetes에서 단일 포드를 생성합니다.
kubectl create -f services/auth.yaml
# kubectl create 명령어를 사용하여 인증을 배포하기 위한 서비스를 만듭니다.
kubectl create -f deployments/hello.yaml
kubectl create -f services/hello.yaml
# 같은 방법으로 hello 배포를 만들고 노출합니다.
kubectl create secret generic tls-certs --from-file tls/
kubectl create configmap nginx-frontend-conf --from-file=nginx/frontend.conf
kubectl create -f deployments/frontend.yaml
kubectl create -f services/frontend.yaml
# frontend 배포를 만들고 노출합니다.
kubectl get services frontend
# 외부 IP를 가져와서 프런트엔드와 연결함으로써 프런트엔드와 상호작용합니다.
curl -ks https://<EXTERNAL-IP>
# hello 응답을 다시 받게 됩니다.
kubectl explain deployment.spec.replicas
# 배포가 생성되었으므로 spec.replicas를 업데이트하면 확장할 수 있습니다.
# kubectl explain 명령어로 확인할 수 있습니다.
kubectl scale deployment hello --replicas=5
# replicas를 5개로 설정합니다.
kubectl get pods | grep hello- | wc -l
# 현재 hello 포드가 5개 실행되고 있는지 확인합니다.
kubectl scale deployment hello --replicas=3
# replicas를 3개로 축소합니다.
kubectl get pods | grep hello- | wc -l
# 다시 확인해봅니다.
배포는 순차적 업데이트 메커니즘을 통해 이미지를 새 버전으로 업데이트하도록 지원합니다. 배포가 새 버전으로 업데이트되면 새 ReplicaSet가 만들어지고, 이전 ReplicaSet의 복제본이 감소하면서 새 ReplicaSet의 복제본 수가 천천히 증가합니다.
kubectl edit deployment hello
# 배포의 containers 섹션에 있는 image를 다음과 같이 변경합니다.
containers:
image: kelseyhightower/hello:2.0.0
# 편집기에서 저장하면, 업데이트된 배포가 클러스터에 저장되고 Kubernetes에서 순차적 업데이트가 시작됩니다.
kubectl get replicaset
# Kubernetes에서 생성한 새로운 ReplicaSet를 확인합니다.
kubectl rollout history deployment/hello
kubectl rollout undo deployment/hello
# rollout 명령어를 사용하여 이전 버전으로 롤백합니다.
kubectl rollout history deployment/hello
# 기록에서 롤백을 확인합니다.
kubectl get pods -o jsonpath --template='{range .items[*]}{.metadata.name}{"\t"}{"\t"}{.spec.containers[0].image}{"\n"}{end}'
# 마지막으로 모든 포드가 이전 버전으로 롤백되었는지 확인합니다.
참고 : https://www.cloudskillsboost.google/focuses/639?locale=ko&parent=catalog