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

kimwj님의 프로필 이미지

작성한 질문수

대세는 쿠버네티스 [초급~중급]

StatefulSet 내용이 잘 이해가 되지 않습니다.

해결된 질문

작성

·

175

1

강사님 안녕하세요

StatefulSet 강의 중 궁금한 부분이 있어서 질문 드립니다.

 

먼저 ReplicaSet 부하 분산용으로 kubetm/app 가 3개 실행된다

replicas:3

spec:
      containers:
      - name: container
        image: kubetm/app

부하 분산용으로 kubetm/app 가 3개 실행된다는 내용은 이해를 하겠는데

 

StatefulSet 예제도

replicas:3

spec:
      containers:
      - name: container
        image: kubetm/app

이렇게 되어있더라구요

강의 내용처럼 containers에 예를 들어

image: kubetm/primary

image: kubetm/secondary

image: kubetm/albiter

각각 다른 역할을 하는 container가 실행되어야 하는거 아닌가요?

만약 그렇다고 하면 replicas 부분과 container 부분의 yaml 파일 작성이 실제로 어떻게 되는지 궁금합니다.

 

 

답변 1

1

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

안녕하세요.

하나의 App이 3가지 기능을 모두 할 수 있게 구현되는게 기본입니다.

MongoDB의 경우도 같은 이미지이지만 설정에 따라 자신이 하는 기능이 결정됩니다.

그렇기 때문에 이미지는 모두 동일하게 가고요,

해당 Pod별로 서로 다른 스크립트를 돌게 하는 방법은 다 다릅니다.

한가지 예를 들면, MongoDB 이미지에 기본 initScript가 포함되어 있을 수 있고, 이 스크립트가 돌아갈 때 prmary인지 secondary인지 인자를 줄 수 있겠죠.

그리고 인자를 주는 방법으로는 환경 변수를 가져올 수 있고,

StatefulSet의 경우 환경변수로 hostname이 mongodb-0, mongodb-1, mongodb-2 이런식으로 생기기 때문에, 만약 스크립트를 아래와 같이 줘서 자신이 어떤 역할을 해야하는지 결정 할 수가 있겠네요

if [[ $POD_NAME =~ (.*)-0$ ]]; then

echo "primary"

else

echo "secondary"

fi

fi

이런 스크립트를 Pod yaml파일에 넣을 수도 있고요. 솔루션마다 모두 틀립니다.

감사합니다.

 

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

답변 감사합니다.

kimwj님의 프로필 이미지

작성한 질문수

질문하기