1. 파드에서 실행 중인 애플리케이션 업데이트
1) 오래된 파드를 삭제하고 새 파드로 교체
- ReplicationController에서 파드 템플릿을 교체한 다음 진행할 수 있다.
2) 새 파드 기동과 이전 파드 삭제
- 잠시 동안 두 배의 파드를 실행하는 방법도 있다.
- 아니면 롤링 업데이트를 할 수도 있다. 하지만 이걸 수동으로 하면 어렵고 오류가 발생하기 쉽다.
2. 레플리케이션컨트롤러로 자동 롤링 업데이트 수행
1) kubectl을 이용한 롤링 업데이트
- 이렇게 하는 건 구린 방법이다. 이런 식의 방법은 서버가 아니라 클라이언트가 업데이트 프로세스를 수행하는 것이다. kubectl이 업데이트 수행하는 동안 네트워크 연결이 끊어진다면?
- 그리고 이러한 방법은 imperative(실제 명령)이다. K8s에게 파드를 추가/제거하라고 직접 지시하지 마라. 원하는 레플리카 수를 변경하면 된다.
3. 애플리케이션을 선언적으로 업데이트하기 위한 Deployment 사용하기
Deployment는 lower-level로 간주되는 ReplicationController나 ReplicaSet과 달리 앱을 배포하고 declarative하게 업데이트하기 위한 high-level 리소스이다.
1) Deployment 생성
Deployment를 생성하는 것은 ReplicationController를 만드는 것과 다르지 않다. Deployment는 레이블 셀렉터, 원하는 레플리카 수, 파드 템플릿으로 구성된다.
2) Deployment 업데이트
- 사용 가능한 디플로이먼트 전략
- 기본은 RollingUpdate이다. 대안은 Recreate가 있다.
- 디플로이먼트 리소스에서 파드 템플릿을 변경하기만 하면 앱이 최신 버전으로 업데이트된다.
3) Deployment 롤백
- Deployment는 Revision history를 유지한다. 즉 이전 레플리카셋이 롤아웃 이후에도 삭제되지 않는다는 뜻이다. 이를 이용해 롤백을 할 수 있다.