[쿠버네티스] 6. 레플리케이션 및 파드 컨테이너 관리
- 클라우드 & 인프라/쿠버네티스
- 2020. 6. 7.
레플이케이션과 파드의 컨테이너 관리 요소
쿠버네티스를 사용하면 컨테이너의 실행을 보장 받는다.
풆어서 얘기하자면, 파드가 노드에 스케줄링이 되면 해당 노드의 Kubelet은 파드의 컨테이너를 실행하고 파드가 존재하는 한 컨테이너가 계속 실행되도록 한다.
어플리케이션이 죽는다면 다시 리소스에 의해 재실행
예외 상황
- 만약 자바 어플리케이션이 실행 중 OOM이 발생해 죽는다면?
- 어플리케이션이 무한 루프 또는 교착상태에 빠질 경우
=> 이런경우 어플리케이션이 다시 시작되도록 하기 위해선 앱 내부의 기능에 의존하지 말고 외부에서 어플리케이션의 상태를 체크 해야 함
라이브니스 프로브
쿠버네티스는 라이브니스 프로브를 통해 컨테이너가 살아 있는지 확인할 수 있다.
라이브니스 프로브는 파드의 spec에 정의되어 있다.
HTTP 기반 라이브니스 프로브 생성
apiVersion: v1
kind: Pod
metadata:
name: kubia-liveness
spec:
containers:
- image: luksa/kubia-unhealthy
name: kubia
livenessProbe:
httpGet:
path: /
port: 8080
이 파드의 디스크립터는 쿠버네티스가 주기적으로 '/' 경로와 8080포트에 HTTP GET을 요청해서 컨테이너가 정상 동작하는지 확인하도록 httpGet 라이브니스 프로브를 정의한다.
이전 컨테이너가 종료된 이유를 파악하려는 경우
kubectl logs {podname} --previous 명령어 사용
또는 kubectl describe po {podnamne} 으로 이전 종료 이유를 보면 된다.
describe 로 상태를 확인해 보자
Last State: Terminated
Reason: Error
Exit Code: 137
Started: Tue, 02 Jun 2020 22:46:36 +0900
Finished: Tue, 02 Jun 2020 22:48:23 +0900
Ready: True
Restart Count: 3
Liveness: http-get http://:8080/ delay=0s timeout=1s period=10s #success=1 #failure=3
위와 같이 마지막 상태값과 코드 그리고 재실행된 횟수 정보를 확인 할 수 있다.
여기서 Liveness 속성을 보면 파일로 작성한 라이브니스 프로브 지정값 이외도 지연, 제한 시간, 기간등과 같은 추가 속성도 볼수 있다.
- delay : 제한시간으로 해당 시간안에 반응이 되야함
- period : 기간으로 해당 기간을 주기로 프로브를 실행
- failure : 연속으로 n 번 실패하면 재실행
위 속성들은 프로브를 정의할때 지정 할 수 있다.
만약 어플리케이션이 초기 실행시간이 길다면?
어플리케이션이 초기 세팅이나 리소스 로딩으로 인해 지연시간이 생긴다면, 프로브는 컨테이너가 시작하자마자 실패 임계값을 초과 해버릴지도 모른다.
따라서 초기 지연값을 설정해주는 것도 좋은 방법이다.
livenessProbe:
httpGet:
path: /
port: 8080
initialDelaySeconds : 15 <- 첫번째 프로브 실행까지 15 초 대기
레플리케이션컨트롤러
레플리케이션 컨트롤러는 쿠버네티스 리소스로서 파드가 항상 실행되도록 보장한다.
동작
레플리케이션컨트롤러는 실행중인 파드 목록을 지속적으로 모니터링하고 파드의 수를 유지한다.
위 표는 레플리케이션 컨트롤러의 동작 과정을 보여준다.
요소
레플리케이션컨트롤러는 세가지 필수 요소가 있다.
- 레이블 셀렉터
- 레플리카 수
- 파드 템플릿
YAML 파일로 레플리케이션컨트롤러 생성 하기
apiVersion: v1
kind: ReplicationController
metadata:
name: kubia
spec:
replicas: 3
selector:
app: kubia
template:
metadata:
labels:
app: kubia
spec:
containers:
- image: luksa/kubia
name: kubia3
ports:
- containerPort: 8080
protocol: TCP
현재 복제폰은 3개이며 레이블 셀렉터는 'kubia'로 지정하여 레이블이 kubia인 파드를 3개 유지하도록 한다.
kubectl create -f {file}
위와 같이 컨트롤러를 생성 할 수 있다.
그리고 현재 파드 목록을 조회하면
kubia-mczx8 1/1 Running 0 114s app=kubia
kubia-sq46d 1/1 Running 0 114s app=kubia
kubia-zjw6v 1/1 Running 0 39s app=kubia
이렇게 3개의 파드가 생성된걸 확인 할 수 있다.
레플리케이션컨트롤러 스케일 확장
기존 3개의 레플리카에서 10개로 스케일을 조정하고 싶다면
replica 필드 값을 수정하면 된다.
kubectl scale rc kubia --replicas=10
레플리케이션컨트롤러 삭제
kubectl delete 명령어로 삭제하면 파드도 같이 삭제된다. 하지만
--cascade=false 옵션으로 파드는 실행중으로 유지할 수 있다.
'클라우드 & 인프라 > 쿠버네티스' 카테고리의 다른 글
[쿠버네티스] 7. Job & CronJob (0) | 2021.05.29 |
---|---|
[쿠버네티스] 5. 레이블을 이용한 파드 관리 (0) | 2020.06.07 |
[쿠버네티스] 4. 파드 (0) | 2020.06.07 |
[쿠버네티스] 3. 쿠버네티스 클러스터 환경 구성. (0) | 2020.06.07 |
[쿠버네티스] 1. 개념 정리 (0) | 2020.06.07 |