🔥딱 8일간! 인프런x토스x허먼밀러 역대급 혜택

Application 기능으로 이해하기 - Probe > 응용과제 [미션2]

응용1 : startupProbe가 실패 되도록 설정해서 Pod가 무한 재기동 상태가 되도록 설정해 보세요.

  1. 사전작업

  • Object 그려보며 이해하기 실습에서 진행한 인프라 코드들을 재사용하기 위해 배포한 오브젝트들을 kubectl 명령어로 삭제합니다.

[root@k8s-master ~]# kubectl delete ns anotherclass-123

[root@k8s-master ~]# kubectl delete pv api-tester-1231-files

  1. startupProbe가 실패하도록 만들기 위해 Deployment YAML 파일 내용을 아래와 같이 수정합니다.

  • failureThreshold의 값을 기존 36에서 1로 변경합니다.

startupProbe:
  httpGet:
    path: "/startup"
    port: 8080
  periodSeconds: 5
  failureThreshold: 1  # 이 부분 수정
  1. 로그를 관찰하기 쉽도록 HPA minReplica 1로 바꿉니다.

$ kubectl patch -n anotherclass-123 hpa api-tester-1231-default -p '{"spec":{"minReplicas":1}}'

  1. 결과

image

image

image

응용2 : 일시적 장애 상황(App 내부 부하 증가)가 시작 된 후, 30초 뒤에 트래픽이 중단되고, 3분 뒤에는 App이 재기동 되도록 설정해 보세요.

(아래 API를 날리면 readinessProbe와 livenessProbe가 동시에 실패하게 됩니다)

 

  1. 사전작업

  • 응용 1. 에서 진행한 인프라 코드들을 재사용합니다.

     

     

    2. 일시적 장애 상황(App 내부 부하 증가)가 시작 된 후, 30초 뒤에 트래픽이 중단되고, 3분 뒤에는 App이 재기동 되도록 Deployment YAML 파일 내용을 아래와 같이 수정합니다.

  • livenessProbe 의 periodSeconds 값을 기존 10에서 60으로 변경합니다.

startupProbe:
  httpGet:
    path: "/startup"
    port: 8080
  periodSeconds: 5
  failureThreshold: 10  # 1에서 10으로 다시 증가 
readinessProbe:
  httpGet:
    path: "/readiness"
    port: 8080
  periodSeconds: 10
  failureThreshold: 3
livenessProbe:
  httpGet:
    path: "/liveness"
    port: 8080
  periodSeconds: 60   # 이 부분 수정
  failureThreshold: 3  

1. 30초 뒤 트래픽 중단

readinessProbe는 10초마다 체크하고, 3번 연속 실패해야 Ready가 false가 됩니다.

10초 × 3 = 30초 후 서비스에서 Pod가 제외되어 트래픽이 중단됩니다.

2. 3분 뒤 App 재기동

livenessProbe는 60초마다 체크하고, 3번 연속 실패해야 Pod를 재시작합니다.

60초 × 3 = 180초(3분) 후 컨테이너가 재시작합니다.

 3. 일시적 장애사항 부여

// 부하 증가 API - (App 내부 isAppReady와 isAppLive를 False로 바꿈) 
curl http://192.168.56.30:31231/server-load-on

 

2025-06-09 19:43:50	2025-06-09T10:43:50.764Z  INFO 1 --- [nio-8080-exec-6] DefaultController                        : [SyStem] The system load has occurred
2025-06-09 19:43:55	2025-06-09T10:43:55.879Z  INFO 1 --- [nio-8080-exec-7] DefaultService                           : [Kubernetes] readinessProbe is Failed-> [System] isAppReady: false
# livenessProbe 실패 1회차
2025-06-09 19:44:05	2025-06-09T10:44:05.883Z  INFO 1 --- [nio-8080-exec-8] DefaultService                           : [Kubernetes] livenessProbe is Failed-> [System] isAppLive: false
2025-06-09 19:44:05	2025-06-09T10:44:05.883Z  INFO 1 --- [nio-8080-exec-9] DefaultService                           : [Kubernetes] readinessProbe is Failed-> [System] isAppReady: false
2025-06-09 19:44:15	2025-06-09T10:44:15.882Z  INFO 1 --- [io-8080-exec-10] DefaultService                           : [Kubernetes] readinessProbe is Failed-> [System] isAppReady: false
2025-06-09 19:44:15	2025-06-09T10:44:15.895Z  INFO 1 --- [nio-8080-exec-1] DefaultService                           : [Kubernetes] readinessProbe is Failed-> [System] isAppReady: false
2025-06-09 19:44:25	2025-06-09T10:44:25.884Z  INFO 1 --- [nio-8080-exec-2] DefaultService                           : [Kubernetes] readinessProbe is Failed-> [System] isAppReady: false
2025-06-09 19:44:35	2025-06-09T10:44:35.878Z  INFO 1 --- [nio-8080-exec-3] DefaultService                           : [Kubernetes] readinessProbe is Failed-> [System] isAppReady: false
2025-06-09 19:44:45	2025-06-09T10:44:45.884Z  INFO 1 --- [nio-8080-exec-4] DefaultService                           : [Kubernetes] readinessProbe is Failed-> [System] isAppReady: false
2025-06-09 19:44:55	2025-06-09T10:44:55.885Z  INFO 1 --- [nio-8080-exec-5] DefaultService                           : [Kubernetes] readinessProbe is Failed-> [System] isAppReady: false
2025-06-09 19:45:05	2025-06-09T10:45:05.879Z  INFO 1 --- [nio-8080-exec-6] DefaultService                           : [Kubernetes] readinessProbe is Failed-> [System] isAppReady: false
# livenessProbe 실패 2회차
2025-06-09 19:45:05	2025-06-09T10:45:05.880Z  INFO 1 --- [nio-8080-exec-7] DefaultService                           : [Kubernetes] livenessProbe is Failed-> [System] isAppLive: false
2025-06-09 19:45:15	2025-06-09T10:45:15.885Z  INFO 1 --- [nio-8080-exec-9] DefaultService                           : [Kubernetes] readinessProbe is Failed-> [System] isAppReady: false
2025-06-09 19:45:25	2025-06-09T10:45:25.883Z  INFO 1 --- [nio-8080-exec-8] DefaultService                           : [Kubernetes] readinessProbe is Failed-> [System] isAppReady: false
2025-06-09 19:45:30	2025-06-09T10:45:30.803Z  INFO 1 --- [io-8080-exec-10] DefaultService                           : [Kubernetes] readinessProbe is Failed-> [System] isAppReady: false
2025-06-09 19:45:35	2025-06-09T10:45:35.885Z  INFO 1 --- [nio-8080-exec-1] DefaultService                           : [Kubernetes] readinessProbe is Failed-> [System] isAppReady: false
2025-06-09 19:45:45	2025-06-09T10:45:45.882Z  INFO 1 --- [nio-8080-exec-2] DefaultService                           : [Kubernetes] readinessProbe is Failed-> [System] isAppReady: false
2025-06-09 19:45:55	2025-06-09T10:45:55.883Z  INFO 1 --- [nio-8080-exec-3] DefaultService                           : [Kubernetes] readinessProbe is Failed-> [System] isAppReady: false
# livenessProbe 실패 3회차
2025-06-09 19:46:05	2025-06-09T10:46:05.888Z  INFO 1 --- [nio-8080-exec-5] DefaultService                           : [Kubernetes] livenessProbe is Failed-> [System] isAppLive: false
2025-06-09 19:46:05	2025-06-09T10:46:05.888Z  INFO 1 --- [nio-8080-exec-4] DefaultService                           : [Kubernetes] readinessProbe is Failed-> [System] isAppReady: false
2025-06-09 19:46:05	2025-06-09T10:46:05.984Z  INFO 1 --- [nio-8080-exec-7] DefaultService                           : [Kubernetes] readinessProbe is Failed-> [System] isAppReady: false
2025-06-09 19:46:36	
2025-06-09 19:46:36	  .   ____                      _ 
2025-06-09 19:46:36	 /\\ / ___'_ __ (_)_    _ \ \ \ \
2025-06-09 19:46:36	( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
2025-06-09 19:46:36	 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
2025-06-09 19:46:36	  '  |____| .__|_| |_|_| |_\__, | / / / /
2025-06-09 19:46:36	 =========|_|==============|___/=/_/_/_/
2025-06-09 19:46:36	 :: Spring Boot ::                (v3.1.0)
2025-06-09 19:46:36	
2025-06-09 19:46:38	2025-06-09T10:46:38.590Z  INFO 1 --- [           main] com.pro.app.AppApplication               : Starting AppApplication v0.0.1-SNAPSHOT using Java 17.0.2 with PID 1 (/usr/src/myapp/app.jar started by root in /usr/src/myapp)
2025-06-09 19:46:38
2025-06-09T10:46:38.784Z  INFO 1 --- [           main] com.pro.app.AppApplication               : The following 1 profile is active: "dev"

 4. API 실패 상태 확인

// 외부 API 실패 
[root@k8s-master ~]# curl http://192.168.56.30:31231/hello
curl: (7) Failed to connect to 192.168.56.30 port 31231: Connection refused

 5. 장애사항 제거

// 부하 감소 API - (App 내부 isAppReady와 isAppLive를 True로 바꿈) 
curl http://192.168.56.30:31231/server-load-off

 

응용3 : Secret 파일(/usr/src/myapp/datasource/postgresql-info.yaml)이 존재하는지 체크하는 readinessProbe를 만들어 보세요.

  1. 사전작업

  • 응용 1. 에서 진행한 인프라 코드들을 재사용합니다.

     

     

    2. Secret 파일(/usr/src/myapp/datasource/postgresql-info.yaml)이 존재하는지 체크하도록 Deployment YAML 파일 내용을 아래와 같이 수정합니다.


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

 

  1. Readiness Probe 확인

  • 현재는 exec 속성으로 command를 날렸을 때 해당 경로에 파일이 있어 실패를 안하고 있기 때문에 이벤트가 안 찍히는 중입니다.

image

  • Deployment YAML 파일 내용 가운데 exec 속성의 command를 존재하지 않는 파일을 찾도록 수정합니다.

  • 수정하고 나면 아래와 같이 Readiness Probe 실패 이벤트 확인 가능합니다.

image

 

 

 

댓글을 작성해보세요.

채널톡 아이콘