• 카테고리

    질문 & 답변
  • 세부 분야

    데브옵스 · 인프라

  • 해결 여부

    해결됨

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

22.11.18 15:39 작성 조회수 121

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

질문자

2022.11.21

답변 감사합니다.