디플로이먼트는 애플리케이션을 배포하고 선언적으로 업데이트하기 위한 높은 수준의 리소스이다.
디플로이먼트를 생성하면 레플리카셋 리소스가 그 아래에 생성된다.
디플로이먼트를 사용하는 경우 실제 파드는 디플로이먼트가 아닌 디플로이먼트의 레플리카셋에 의해 생성되고 관리된다.
파드를 감시하는 레플리카셋이 디플로이먼트를 지원한다.
파드 인스턴스를 지속적으로 실행하기에 레플리카셋이 충분한데 굳이 그 위해 다른 오브젝트를 추가한 이유가 뭘까?
롤링 업데이트를 한다고 생각해보면 애플리케이션 업데이트할 때는 추가 레플리케이션셋을 도입하고 두 컨트롤러가 잘 조화되도록 조정해야한다.
이를 디플로이먼트 리소스가 관리할 수 있다.
디플로이먼트를 사용하면 디플로이먼트 리소스를 통해 원하는 상태를 정의하면 쿠버네티스가 알아서 업데이트를 처리해준다!
디플로이먼트를 생성하면 그럼 레플리카셋이 생성되고 이것이 파드를 정의된 개수만큼만 만든다는 데 어떻게 되는걸까?
참고 : https://robomoan.medium.com/k8s-%EB%94%94%ED%94%8C%EB%A1%9C%EC%9D%B4%EB%A8%BC%ED%8A%B8-deployment-%EA%B5%AC%EC%84%B1-%EC%97%85%EB%8D%B0%EC%9D%B4%ED%8A%B8-%EC%8A%A4%EC%BC%80%EC%9D%BC%EB%A7%81%ED%95%98%EA%B8%B0-5f4aaa94540f
디플로이먼트로 만든 리소스를 보면 pod 이름에 - - 사이 중간에 이상한 숫자값이 있는게 보인다.
이게 바로 디플로이먼트와 파드 탬플릿의 해시값을 의미하고 레플리카셋은 이러한 파드를 관리함을 뜻한다.
보면 위 사진의 764c4cb9c8이 replicaset이랑 pod명에 들어가 있다.
앞에서 언급했듯 디플로이먼트는 파드를 직접 관리하지 않고 레플리카셋을 생성하고 이들이 파드를 관리하도록 맡겨둔다.
이번의 레플리카셋컨트롤러를 사용해 애플리케이션을 실행한 경우 쿠버네티스 업데이트를 수행하려면 kubectl rollling-update 를 실행해 직접 지시해야했다.
심지어 새로 생성되는 레플리케이션컨트롤러 이름까지 지정해야했다..
너무 짜친다…
그러나 디플로이먼트를 사용해 업데이트하면 리소스에 정의된 파드 템플릿을 수정하기만 하면 쿠버네티스가 실제 시스템 상태를 리소스에 정의된 상태로 만드는데 필요한 모든 단계를 수행한다.
수동에서 자동으로 바뀐 느낌!
디플로이먼트 파드 템플릿에서 새 이미지 태그를 참조해 시스템이 의도하는 상태가 될 수 있도록 쿠버네티스에 맡기면 됩니다.