해결된 질문
작성
·
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파일에 넣을 수도 있고요. 솔루션마다 모두 틀립니다.
감사합니다.
답변 감사합니다.