환경
- springboot 2.1
- kubernetes 로 마이크로서비스로 서버 운영
- docker
나는 처음, java는 healthcheck 가 필요없는주 알앗다. 서버가 다 뜨지 않으면 어차피 헬스체크가 안돌아가고, db커넥션 다 연결하고, 컴파일하고 뭐하고 서버 올라오면 그때 서버 호출 가능하니까 그런주 알앗는데.. 잘못생각했나보다.
springboot도 헬스체크가 필요하다.
헬스체크 기능을 쓰려면 actuator를 사용해야한다.
참조한 블로그들
----------------------------------------------------------------------------------------------------
https://jeong-pro.tistory.com/160
https://supawer0728.github.io/2018/05/12/spring-actuator/
https://cloud.ibm.com/docs/java?topic=java-spring-healthcheck
https://stackoverflow.com/questions/30736514/spring-boot-actuator-health-returning-down
https://www.callicoder.com/spring-boot-actuator/
https://www.codeprimers.com/health-check-api-in-spring-boot-application/
http://wonwoo.ml/index.php/post/1787[ acuator 기능 요약 ]
----------------------------------------------------------------------------------------------------
헬스체크를 써야했던 이유는 기존 다른 서버들은 node, golang 으로 되어있어서 그거 기반으로 k8s가 셋팅되어있었다.
springboot 로 새로 추가하려니까 약간 안맞는 부분이 생겻음
안맞다보니 재배포시 pod가 롤링업데이트 될때 502 에러가 엄청 나옴 ... ( 이외에도 문제가 많은데 우선 이게 문제 )
기존 k8s 환경설정 보면, readiness 는 없고, liveness 만 설정되어있음.
여러가지 테스트 해보고, 내가 적용한 것들
- springboot actuator 설정 추가 .
1. endpoint 변경
( 이건 예를 든거다 )
management.endpoints.web.base-path=/monitor
management.endpoints.web.path-mapping.health=healthcheck
management.endpoint.health.show-details=always
2. healthcheck 몽고db 검증 제외
몽고나 redis는 일부 커넥션이 안맺어져 있을 수 있어서 끈다. ( sentinel, cluster 같은 설정에서 )
3. customhealthindicator 추가(추가했는데 이건 안씀.. 필요없어보여서.. 이건 아래 블로그에 잘 나와잇음 )
actuator 사용은 이정도 한거같고,
이까지가 healthcheck를 사용하는 방법이다.
------------------------------------------------------------------------------
이제 502에러가 발생하는 원인을 찾아보았다. 여러가지 테스트를 겁나 해봤는데 ..
원인은 readiness 를 설정을 하지 않아서였다.
readiness healthcheck 하니 502가 생기지 않았다.
k8s 설정을 추가했다 .
https://www.baeldung.com/spring-boot-kubernetes-self-healing-apps
여기서는, custom healthcheck를 만들수있다.
이걸 사용하면, 미리 초기화필요한 데이터들을 완료할 수 있다.
kubernetes 문서
https://kubernetes.io/ko/docs/concepts/workloads/pods/pod-lifecycle/
https://cloud.ibm.com/docs/java?topic=java-spring-healthcheck&locale=ko
pod readiness
https://rahulsharma.page/2019-01-02-k8s-springboot-readinessCheck/
이렇게 502가 생기지 않게되었다.
그러나 ... 이후로 403이 발생했따.. ㅅㅂ. ....
403해결은 다음 포스팅에 .,..
'Web > SpringBoot' 카테고리의 다른 글
[springboot] healthcheck ,actuator, kubernetes 헬스 체크 하여 pod 롤링 업데이트 403 에러 - 2/2 (0) | 2019.11.18 |
---|---|
Spring Transaction rollback 이 안됨 (1) | 2019.11.08 |
[springboot] 서버 시작시 Error creating bean with name '***' defined in class path resource 해결법 (0) | 2019.08.28 |
[spring] produces (0) | 2019.08.13 |
Jersey: A message body writer for Java Class and MIME mediatype application/json was not found (0) | 2019.08.01 |
댓글