요약
Helm을 사용하는 이유와 등장 배경을 이해하기 위해서
쿠버네티스에서 애플리케이션을 배포 및 관리하는데 필요하거나 어려움이 있는 것을 나열해보자.
첫번째는 배포할 애플리케이션에 필요한 수 많은 쿠버네티스 오브젝트에 대한 러닝커브다.
쿠버네티스에 애플리케이션을 배포하기 위해서는 Deployment, Service, ConfigMap, Secret, Storage, Ingress와 같은 여러 타입의 오브젝트에 대한 Manifest File(.yaml)이 필요하다.
→ 내가 작성한 Manifest File을 다른 사용자에게 공유한다고 했을 때, 내가 작성한 모든 오브젝트와 Manifest File에 대해 모든 이해가 있어야 공유 받은 사람도 해당 Manifest File을 제대로 활용할 수 있을 것이다.
두번째는 Manifest File은 정적인 파일이라는 점이다.
일반적으로 애플리케이션의 이름이 Manifest File안에서 중복적으로 나타단다.(deployment 이름, service 이름, image 이름, label 등), 또 이와 같이 사용자 환경에 맞게 변경해야할 값이 이곳 저곳 중복되어 나타나는 경우가 은근 자주 발생한다.
→ Manifest File에 나타나는 중복되는 모든 부분을 일일이 일괄 수정해야한다. 행여나 한가지라도 빠뜨리면 애플리케이션이 제대로 동작하지 않을 수 있다.
세번째는 애플리케이션 수명주기 관리가 어렵다.
쿠버네티스에 배포한 애플리케이션과 관련된 쿠버네티스 오브젝트의 변경사항을 추적하기가 쉽지 않다. Manifest File을 Git으로 버전 관리를 한다던가, kubectl describe
명령어로 각 오브젝트에 대한 이벤트를 확인할 수 있지만 이는 결코 간단하지 않다.