Kubernetes Engine으로 배포 관리

김승윤·2021년 11월 12일
0
post-custom-banner

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

post-custom-banner

0개의 댓글