파드의 상태를 체크해주는 livenessProbe라는 녀석이 있다.
파드의 상태를 주기적으로 체크하는 probe를 실행하여 실패시 컨테이너를 재시작한다.
처음에는 was서버를 쿠버네티스로 옮겼기에 이를 관리하기 위해 livenessProbe만 설정해주었다.
spec:
container:
livenessProbe:
httpGet:
path: /health.jsp
port: 8080
failureThreshold: 10
periodSeconds: 30
timeoutSeconds: 10
httpGet으로 해당 path와 port에서 http관련 응답을 받지 못하면 실패한 것으로 간주하는 동작이다.
10번 까지 실패횟수 누적이 가능하고
30초마다 probe를 실행하고
한 번의 probe당 10초 정도 통신대기 시간이 있다.
앱이 동작하는 동안 매 30초마다 10초동안 신호가 들어오는지 확인 하고
만약 실패 횟수가 10번을 넘어가면 파드를 재시작하는 방식이다.
그런데 이렇게만 설정하면 문제가 생긴다.
파드가 시동되고 어플리케이션이 시동하는 시간이 길어지면 probe에 실패를 하게 되어버린다.
위와 같은경우 만약 어플리케이션 기동 시간이 300초 (매 30초마다 10번의 실패 횟수)를 넘어가면
파드가 재시작 되어버리는 상황이 발생하기 때문이다.
위와 같은 경우에 대한 대비책이 2가지가 있다.
하나는 livenessProbe의 시작시간을 지연시키는 방법이고
다른 하나는 startupProbe를 이용하는 방법이다.
1. initialDelaySeconds
spec:
container:
livenessProbe:
httpGet:
path: /health.jsp
port: 8080
failureThreshold: 10
periodSeconds: 30
timeoutSeconds: 10
initialDelaySeconds: 300
말그대로 초기 지연 시간이다. 300초 뒤에 livenessProbe가 동작하게 하는 설정이다.
2. startupProbe
spec:
container:
livenessProbe:
httpGet:
path: /health.jsp
port: 8080
failureThreshold: 10
periodSeconds: 30
timeoutSeconds: 10
startupProbe:
httpGet:
path: /health.jsp
port: 8080
failureThreshold: 10
periodSeconds: 10
timeoutSeconds: 3
initialDelaySeconds: 200
startupProbe는 말그대로 어플리케이션이 시작하는 기간을 체크하기 위한 옵션이다.
livenessProbe와 동작방식은 같지만 역할이 다르다.
startupProbe가 끝나면 livenessProbe같은 다른 Probe들이 동작하게된다.
위와 같은 경우 startupProbe가 200초 뒤에 시작하여 10초 마다 3초동안 통신을 시도하고
통신이 10번 실패시 재시작 하게 한다.
만약) 어플리케이션 기동시간이 270초 라고하면
어플리케이션이 기동을 시작하고 200초 뒤부터 startupProbe가 시작한다.
200초 부터 270초 까지 70초동안 startupProbe가 동작하였는데
70초 동안은 어플리케이션이 올라오지 않아 제대로된 통신이 불가하므로
failure threshold가 7이 된다.
startupProbe가 성공으로 나타나면
그때 livenessProbe가 시작되며, 매 30초마다 파드가 죽었는데 http 통신으로 확인한다.
여기까지 해도 문제가 또 발생했다.
통신에 관한 문제이다. 로드밸런서를 통해 파드를 바라보고 있던 상황에서
파드 수의 변화가 생겨버리는 경우, 생성 중인 파드에도 트래픽을 보내 트래픽 실패를 반환 받아 문제가 되곤했다.
이런경우 readinessProbe를 활용하면 좋다.
startup, liveness Probe들은 실패시 파드가 재시작한다.
그런데 readinessProbe는 실패시 파드를 서비스에서 제외 하여 트래픽을 받지 않게 한다.
제외시킨 파드는 계속해서 probe를 진행하고 통과되는 경우 복귀시킨다.
말 그대로 방치되는 상황이기 때문에 liveness나 startup Probe와 조합하여 문제시 파드를 재시작하게 한다.
readinessProbe도 startupProbe가 종료뒤에 진행된다고 한다.
spec:
containers:
- name: goproxy
image: test-img
ports:
- containerPort: 8080
readinessProbe:
path:/health.jsp
port: 8080
initialDelaySeconds: 15
periodSeconds: 10
livenessProbe:
httpGet:
path:/health.jsp
port: 8080
initialDelaySeconds: 15
periodSeconds: 10
졸면서 씀
'kubernetes' 카테고리의 다른 글
| 서비스 프록시 (0) | 2025.08.10 |
|---|---|
| 배포 전략 - init container 이용하여 소스 파일 받아오기 (0) | 2025.03.11 |
| 노드에 파드 분배 - affinity (0) | 2025.03.02 |
| init container 이용 sysctl 실행 (3) | 2025.01.25 |
| sidecar 사용하여 수시로 git clone = git-sync (0) | 2025.01.21 |