인프런 워밍업클럽 4기 - 데브옵스 스터디
[미션2] Application 기능으로 이해하기 - Probe
응용1 : startupProbe가 실패 되도록 설정해서 Pod가 무한 재기동 상태가 되도록 설정해 보세요.
(여러분들이 가장 많이 겪게될 Pod 에러입니다)
방법 : startupProbe에 failureThreshold 수치를 App이 기동안되도록 낮추면 됩니다.
startupProbe는 앱이 기동중일때 부터 체크하게 되는데, 앱이 기동시간이 오래걸리는데 failureThreshold 수치를 낮게 설정할 경우 무한 재기동 상태에 빠지게 됩니다. 따라서 무한 재기동에 빠지지 않게 하기위해 앱의 기동시간보다 여유롭게 주는 것이 좋습니다.
deployment의 startupProbe의 failureThreshold 값을 1로 변경합니다.
startupProbe:
httpGet:
path: "/startup"
port: 8080
periodSeconds: 5
failureThreshold: 1
readinessProbe:
httpGet:
path: "/readiness"
port: 8080
periodSeconds: 10
failureThreshold: 3
livenessProbe:
httpGet:
path: "/liveness"
port: 8080
periodSeconds: 10
failureThreshold: 3
Pod의 Events 내용을 확인해보면 startupProbe의 failureThreshold 값 1만큼 실패하는 경우 앱을 계속 재기동 하는 것을 확인할 수 있습니다.
또한 Pod의 "재시작" 횟수를 통해 앱이 현재 계속 재기동 상태라는 것을 확인할 수 있습니다.
응용2 : 일시적 장애 상황(App 내부 부하 증가)가 시작 된 후, 30초 뒤에 트래픽이 중단되고, 3분 뒤에는 App이 재기동 되도록 설정해 보세요.
앱은 정상 기동 된 상태이기 때문에 startupProbe와는 관련이 없습니다.
readinessProbe의 값을 통해 외부 트래픽의 연결을 제어할 수 있고, livenessProbe를 통해 현재 앱의 상태 체크를 할 수 있습니다.
트래픽 중단을 위해서는 readinessProbe의 값으로 제어를 해야하기 때문에 10초에 1번씩 체크하여 3회가 실패하면 트래픽이 중단됩니다.
3분뒤에 앱을 재기동 시키기 위해 livenessProbe의 값을 60초에 1회씩 체크하여 3회가 실패하면 앱이 재기동 됩니다.
startupProbe:
httpGet:
path: "/startup"
port: 8080
periodSeconds: 5
failureThreshold: 10
readinessProbe:
httpGet:
path: "/readiness"
port: 8080
periodSeconds: 10
failureThreshold: 3
livenessProbe:
httpGet:
path: "/liveness"
port: 8080
periodSeconds: 60
failureThreshold: 3
3분 뒤 앱이 재기동 되는 것을 확인할 수 있습니다.
응용3 : Secret 파일(/usr/src/myapp/datasource/postgresql-info.yaml)이 존재하는지 체크하는 readinessProbe를 만들어 보세요.
(꼭 API를 날리는 것만이 readinessProbe 활용의 전부는 아닙니다)
방법 : readinessProbe에는 exec라는 속성으로 command를 Pod에 날릴 수 있고, 이는 App기동시 꼭 필요한 파일이 있는지를 체크합니다
startupProbe:
httpGet:
path: "/startup"
port: 8080
periodSeconds: 5
failureThreshold: 10
readinessProbe:
exec:
command: ["cat", "/usr/src/myapp/datasource/postgresql-info.yaml"]
periodSeconds: 10
failureThreshold: 3
livenessProbe:
httpGet:
path: "/liveness"
port: 8080
periodSeconds: 10
failureThreshold: 3
해당 앱에 postgresql-info.yaml이 이미 있어서 에러로그는 확인하지 못했습니다ㅠㅠ
(삭제도 Read-Only 여서 안된다네요..? root 권한이 아니었나...?)
'인프런 워밍업클럽' 카테고리의 다른 글
Docker와 Containerd 명령 실습 (2) | 2025.06.17 |
---|---|
Application 기능으로 이해하기 - PVC/PV, Deployment, Service, HPA (3) | 2025.06.08 |
Application 기능으로 이해하기 - Configmap, Secret (0) | 2025.06.05 |
쿠버네티스 설치 구간별 상태 확인 (0) | 2025.06.01 |