Inflearn brand logo image

인프런 커뮤니티 질문&답변

로건님의 프로필 이미지
로건

작성한 질문수

대세는 쿠버네티스 (Helm편)

Helm 추가기능 - Helm Hook

helm hook과 Pod initContainer 중 선택

해결된 질문

작성

·

21

·

수정됨

1

안녕하세요, 강사님. 매번 꼼꼼하게 설명해주시는 덕분에 강의만으로도 충분히 이해를 하다가 처음으로 질문을 남겨봅니다.

 

Helm hook에 대해서 처음 배우면서 기존에 자주 사용하던 Pod 내 initContainer 중 어떤 방식을 택하는 것이 더 좋을지에 대해 고민하게 되었습니다.

 

특정 파드의 main container가 시작되기 전에 항상 먼저 실행되어야 하는 container가 있다고 가정할 때 Helm hook의 pre-install, pre-upgrade을 사용하면 initContainer와 비슷한 동작을 하도록 만들 수 있을 것 같은데 둘 중에 어떤 것을 선택하는 것이 더 일반적인지 혹은 선택에 따른 추가적인 장단점이 있을지 궁금합니다.

 

이 문제에 대해 혼자 고민해봤을 때는 helm hook을 사용하게 되면 install, upgrade, rollback 시점에 대해 모두 고려하여 어노테이션을 지정해줘야 된다는 불편함이 있을 것 같아서 main container가 시작되기 전에 항상 선행되어야 하는 컨테이너가 있다면 initContainer를 활용하는 것이 더 좋지 않을까라는 생각으로 기울고 있습니다..! 그렇다면, helm hook은 정말 helm install, upgrade, rollback 등과 같은 조금 더 세부적인 helm의 동작에 대해서만 hook을 설정할 때 활용한다고 생각하면 될지 고민입니다.

 

감사합니다!

답변 2

1

일프로님의 프로필 이미지
일프로
지식공유자

Helm은 배포를 위한 작업입니다.

Main App 입장에서 처음 배포시 사전에 먼저 기동되고 있어야 하는 App이 필요할 때는 pre-install을 씁니다.

만약 Helm으로 배포되는 App이 (Server, DB) 이렇게 두 가지이고, 최초 배포시 DB부터 기동 된 후에 Server를 배포 하기 위해서는 pre-install을 쓰는 게 맞고요.

initConatiner는 Main Container를 항시 보조하기 위한 기능이에요.

DB를 먼저 배포 했다고 하더라도, Server 입장에서는 initContainer를 통해 DB가 통신 가능한 지를 한번 더 체크해서, ok되면 main Container를 기동 시킬 수 있어요. 그럼 main container에서는 항상 DB는 살아 있다는 조건에서 로직을 짜면 됩니다.

결국 initContainer는 Main Container의 기능을 분산 시키기 위한 용도 인거죠. 그래서 Pod가 재기동 될때마다 같이 재시작 되면서 DB를 체크해주는 반복적인 동작을 하게 되고요.

근데 DB를 뛰우기 위해, initContainer가 mainContainer보다 먼저 기동될 수 있다고해서 여기에 DB를 담지 않습니다.

이 정도 설명이면 어떤 상황을 위해 initContainer와 pre-install를 구별해서 쓰는 건지 느낌이 오시나요?

단지 둘 다 main container보다 먼저 실행을 시킬 수 있다는 이유만으로 고민을 해야 되는 요소는 아니예요. 내가 main container 보다 먼저 실행시켜야 하는 로직이, main container 를 보조하기 위한 목적인지, 아니면 main container와는 별개의 역할을 하는 로직인지를 생각하는 게 먼저 입니다.

추가 질문 있으시면 말씀해주세요.

0

로건님의 프로필 이미지
로건
질문자

안녕하세요, 강사님. 먼저 이렇게 상세하게 답변 달아주셔서 너무 감사드립니다.

 

답변해주신 내용을 읽어보니 제가 initContainer를 주로 Main App이 실행되기 전에 Main App에서 필요한 파일이나 시크릿 등을 외부에서 가져오기 위해 사용해왔었는데 이러한 내용들이 말씀해주신 것처럼 main container를 보조하기 위한 역할로 사용되고 있었다는 생각이 들었습니다.

 

말씀해주신 내용을 토대로 먼저 실행시켜야 하는 App 혹은 로직이 main container와 별개로 동작하는 역할인지 아니면 Main App을 보조하기 위한 역할인지를 기준삼아 잘 구분해보도록 하겠습니다. 답변 감사합니다!

로건님의 프로필 이미지
로건

작성한 질문수

질문하기