Kubernetes에서 Java 앱의 원격 디버깅
4697 단어 javadebuggingkubernetesdocker
그러나 그것에 대해 너무 기뻐하지 마십시오. 때로는 응용 프로그램이 로컬에서 구현되고 테스트된 작업을 수행하지 않는 경우가 있습니다. 숙련된 개발자라면 이런 경우 디버거를 켜겠지만 쿠버네티스 클러스터에서 그게 그렇게 쉬운가요? 예, 이 블로그 게시물에서 정확히 그 방법을 보여드리겠습니다!
단순함을 위해 이 게시물 전체에서 IntelliJ 개발 환경을 사용하지만 이것이 큰 제한은 아닙니다. 다른 개발 환경에서도 유사한 기능을 제공합니다.
개념
기본 아이디어는 Kubernetes 포드(Java 앱이 실행 중인)의 포트에서 디버깅을 활성화하는 것입니다. 이 포트는 포드에 의해 노출되어야 합니다.
그런 다음 Port Forwarding을 사용하여 로컬 포트를 포드의 열린 디버깅 포트로 전달해야 합니다. 마지막으로 전달된 로컬 포트를 사용하여 개발 환경에서 JVM 원격 디버깅을 시작해야 합니다. 다음 다이어그램은 Kubernetes 클러스터의 원격 디버깅 구조를 보여줍니다.
그림 1: Kubernetes 클러스터의 원격 디버깅 개념
0단계: IntelliJ에서 JVM 원격 디버깅 설정
첫 번째 단계는 IntelliJ에서 원격 디버깅을 설정하는 것입니다. 이렇게 하려면
Run Configurations
에 대한 구성 창을 여십시오.그림 2: 새로운 "원격 JVM 디버그"실행 구성
Run Configuration
를 선택하여 새 Remote JVM Debug
를 만듭니다. 이제 명령줄 인수를 복사합니다. 다음 단계에서 필요합니다.
1단계: 원격 JVM에서 디버깅 활성화
우리는 일반적으로 다음과 같은 Dockerfile로 빌드하는 Docker 이미지에 애플리케이션을 패키징합니다.
FROM eclipse-temurin:17-alpine
ARG ARTIFACT
COPY $ARTIFACT app.jar
ENTRYPOINT ["sh", "-c", "java $JAVA_OPTS -jar /app.jar"]
$JAVA_OPTS
의 변수ENTRYPOINT
가 중요합니다. 이것을 사용하여 이전에 복사한 명령줄 인수를 삽입합니다. Kubernetes에서 배포 리소스를 조정하여 이를 수행합니다. kubectl get deployments
를 사용하여 배포 목록을 표시하고 kubectl edit deployment <DEPLOYMENT_NAME>
를 사용하여 다음과 같이 배포를 조정할 수 있습니다.spec:
containers:
- ...
env:
- name: JAVA_OPTS
value: <COPIED_JAVA_OPTS>
ports:
- name: remotedebugging
containerPort: <PORT>
protocol: TCP
...
<COPIED_JAVA_OPTS>
를 IntelliJ에서 복사한 명령줄 인수로 바꿉니다. <PORT>
를 디버깅에 사용하는 포트로 바꾸십시오(이 경우에는 5005
). 이 작업을 완료한 후 편집기를 닫으면 Kubernetes가 새 배포를 시작합니다.
kubectl get pods
명령으로 이를 확인할 수 있습니다. 새 포드가 생성되어야 합니다. 다음 단계에서 중요: 팟(Pod)의 이름을 복사하십시오!2단계: 포트 포워딩
Pod가 다시 시작된 후 Pod의 디버깅 포트를 로컬 시스템으로 전달해야 합니다. 다음 명령을 사용하여 이 작업을 수행할 수 있습니다.
kubectl port-forward <POD_NAME> <LOCAL_PORT>:<POD_PORT>
<POD_NAME>
는 이전 단계에서 복사했어야 하는 포드의 이름입니다. <LOCAL_PORT>
는 포워딩을 위해 로컬로 사용되고 디버깅을 위해 개발 환경이 연결되는 포트로 교체해야 합니다. <POD_PORT>
는 이전 단계의 배포 구성에서 연 포트입니다. 3단계: 행복한 디버깅!
마지막으로 0단계에서 만든 디버깅 구성을 시작해야 하며 다음 메시지가 표시되어야 합니다.
Listening for transport dt_socket at address: 5005
. 🎉이제 중단점을 설정하고 일부 버그를 찾을 수 있습니다!
자원
Michael Weidmann은 https://www.devlix.de/blog의 devlix 블로그에 글을 쓰고 있습니다.
이 문서는 여기에 처음 게시되었습니다(독일어): https://www.devlix.de/remote-debugging-von-java-apps-in-kubernetes/
devlix GmbH: 품질, 컨설팅, 개발
Reference
이 문제에 관하여(Kubernetes에서 Java 앱의 원격 디버깅), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/devlix-blog/remote-debugging-of-java-apps-in-kubernetes-2mo텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)