공대생 정리노트

9장 : 디플로이먼트 - 선언적 애플리케이션 업데이트 본문

Kubernetes/Kubernetes in ACTION

9장 : 디플로이먼트 - 선언적 애플리케이션 업데이트

woojinger 2021. 5. 3. 00:25

9.1 파드에서 실행 중인 애플리케이션 업데이트

모든 파드를 업데이트하는 방법에는 두 가지가 있다.

1. 기존 파드를 모두 삭제한 후, 새 파드 시작

2. 새로운 파드를 삭제하고, 가동하면 기존 파드 삭제

 

2번 방법의 경우 새 파드를 모두 추가하고 한꺼번에 기존 파드를 삭제하거나 순차적으로 새 파드를 추가하고 기존 파드를 점진적으로 제거하는 등으로 작업을 수행할 수 있다

 

1번 방법 : 짧은 시간 동안 애플리케이션 사용이 불가

2번 방법 : 애플리케이션이 동시에 두 가지 버전을 실행해야 하기에, 데이터 저장소에 데이터를 저장하는 경우 새 버전이 이전 버전을 손상시킬 수 있는 데이터 스키마나 데이터의 수정을 해서는 안된다

 

9.2 레플리케이션컨트롤러로 자동 롤링 업데이트 수행

롤링 업데이트 : 파드를 단계별로 교체하는 것

 

kubectl을 사용해 업데이트를 할 수 있다.

kubectl rolling-update 명령어를 실행하여 동작시킨다.

 

롤링업데이트를 시작하면 새 레플리케이션컨트롤러가 즉시 만들어진다.

새 레플리케이션컨트롤러와 기존 레플리케이션컨트롤러의 셀렉터의 deployment 레이블 값이 다르다. 따라서 파드가 교체되면서 기존 레플리케이션컨트롤러가 스케일 다운이 되고, 새 레플리케이션컨트롤러가 스케일 업이 될 수가 있다

반면 서비스는 모든 파드를 대상으로 한다

업데이트 프로세스가 파드를 교체하면서 롤링 업데이트를 수행한다.

 

현재는 kubectl rolling-update를 더 이상 사용하지 않는다.

 

1. 오브젝트를 쿠버네티스가 수정하는 것은 좋은 방식이 아니다

롤링업데이트는 kubectl 클라이언트가 쿠버네티스 API서버로 HTTP 요청을 보내 수행한다. kubectl 클라이언트가 쿠버네티스 마스터 대신 스케일링을 수행하는 것이다.

만약 업데이트를 수행하는 동안 네트워크 연결이 끊어진다면, 업데이트 프로세스는 중간에 중단되고 파드와 레플리케이션도 중간 상태에서 끝이 난다

 

2. 이러한 방식은 실제 명령을 나타낸다

쿠버네티스에게 의도하는 시스템의 상태를 선언하고, 쿠버네티스가 그것을 달성할 수 있는 가장 좋은 방법을 이용해 상태를 달성하는 것이 좋은 방식이다

 

이러한 이유로 인하여, 디플로이먼트라는 새로운 리소스가 도입이 되었다.

 

9.3 애플리케이션을 선언적으로 업데이트하기 위한 디플로이먼트 사용하기

디플로이먼트는 선언적으로 업데이트하기 위한 리소스

파드를 감시하는 레플리카셋이 디플로이먼트 지원

디플로이먼트 리소스에 정의된 파드 템플릿을 수정하기만 하면 쿠버네티스가 실제 시스템 상태를 리소스에 정의된 상태로 만드는데 필요한 모든 단계를 수행한다

디플로이먼트 전략

RollingUpdate : 롤링 업데이트

Recreate : 한번에 기존 모든 파드를 삭제한 뒤, 새로운 파드를 만든다

 

kubectl set image deployment ~ 명령어를 이용하면 이미지를 변경할 수 있고, 디플로이먼트의 파드 템플릿이 업데이트 되어 변경이 된다

 

디플로이먼트의 롤백도 가능하다

 

Comments