Cloud Shell용 Cloud Code에서 Kubernetes 애플리케이션 디버그

컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요.

Cloud Code를 사용하면 skaffold debug를 활용하여 Kubernetes 클러스터에 배포된 애플리케이션을 쉽게 디버깅할 수 있습니다.

minikube 또는 Docker Desktop과 같은 로컬 클러스터, Google Kubernetes Engine(GKE) 또는 다른 클라우드 제공업체에서 애플리케이션을 디버깅하는 것이 가능합니다.

Cloud Code의 디버깅 지원이 제공되므로 포트 전달 설정 또는 언어별 디버그 인수 삽입과 같은 수동 설정을 완료할 필요가 없습니다. 디버깅을 위해서는 skaffold.yaml 구성 파일과 cloudcode.kubernetes 실행 구성이 포함된 Cloud Code에 사용 가능한 Kubernetes 애플리케이션이 필요합니다.

애플리케이션 디버깅

  1. 상태 표시줄에서 Cloud Code 상태 표시줄 Cloud Code를 클릭한 후 Debug on Kubernetes를 클릭합니다.
  2. 애플리케이션에 필요한 Skaffold 구성이나 cloudcode.kubernetes 실행 구성이 없으면 Cloud Code에서 설정을 도와줍니다.
  3. 현재의 Kubernetes 컨텍스트를 사용하여 앱을 실행할지 또는 선호하는 컨텍스트로 전환할지 확인합니다.
  4. 원격 클러스터를 컨텍스트로 선택한 경우 메시지가 표시되면 이미지를 푸시할 이미지 레지스트리를 선택합니다. Container Registry를 사용하는 경우 기존 레지스트리를 탐색하거나 만들 레지스트리의 이름을 지정할 수 있습니다. 프로젝트에 Artifact Registry API가 사용 설정되어 있고 하나 이상의 Artifact Registry 저장소가 있는 경우 기존 Artifact Registry 저장소를 찾아서 선택할 수 있습니다.

    다음 샘플은 몇 가지 일반적인 레지스트리의 경우 컨테이너 이미지가 저장되는 위치를 지정하는 방법을 보여줍니다.

    Artifact Registry {region}-docker.pkg.dev/{project_id}/{repo-name}
    Container Registry gcr.io/{project_id}
    Docker Hub docker.io/{account}
    비공개 Docker Hub 저장소를 사용하는 경우 적절하게 인증되었는지 확인합니다.

    Cloud Code는 최종 이미지 저장소 이름을 생성하기 위해 이 이미지 레지스트리를 Kubernetes 매니페스트에 지정된 이미지 이름과 연결합니다. 이 선택사항은 cloudcode.kubernetes 실행 구성(.vscode/launch.json에 있음)에 저장됩니다.

    자세한 내용은 이미지 레지스트리 처리 가이드를 참조하세요.

    Cloud Code가 컨테이너를 빌드하여 레지스트리로 푸시하고 Kubernetes 구성을 클러스터에 적용하여 출시를 기다립니다.

    출시가 완료되면 Cloud Code는 선언된 모든 컨테이너 포트를 자동으로 머신에 포트 전달하고 출력창에 URL을 표시하여 실시간 애플리케이션을 탐색할 수 있습니다.

  5. 애플리케이션의 디버깅 가능한 각 컨테이너에서 디버깅할 프로그램이 있는 원격 컨테이너에서 디렉터리를 확인하거나 입력합니다.

    또는 ESC를 눌러 컨테이너 디버깅을 건너뛸 수 있습니다.

    원격 루트 프롬프트

    Cloud Code는 애플리케이션에서 디버깅 가능한 각 컨테이너에 대한 디버그 세션을 연결합니다.

    이제 중단점 설정 및 단계별 코드 실행과 같이 실제 Kubernetes 클러스터에 대해 로컬 코드를 디버깅할 때 일반적으로 하는 동일한 작업을 수행할 수 있습니다.

    기본적으로 애플리케이션 변경사항이 자동 저장되면 Cloud Code는 애플리케이션을 다시 배포하고 새 디버그 세션을 설정합니다. 프로젝트 실행 구성에서 watch 플래그를 사용하여 이 기능을 켜고 끌 수 있습니다.

  6. 변수 및 스택 정보를 검사하려면 디버그 사이드바를 사용합니다. 디버깅 세션과 상호작용하려면 하단 창 디버거에 있는 디버그 콘솔을 사용합니다.

  7. 세션이 완료되면 다음 컨텍스트 메뉴 명령어를 사용할 수 있습니다.

    • 배포 로그 열기: Cloud Code 로그 탐색기를 사용하여 특정 배포의 애플리케이션 로그를 엽니다.
    • 서비스 URL 열기: 웹브라우저에서 특정 서비스의 애플리케이션 서비스 URL을 엽니다.
  8. 시작 구성에서 감시 모드를 사용 중지한 상태에서 애플리케이션을 변경하고 애플리케이션을 다시 빌드 및 다시 배포하려면 개발 세션 창에서 실행 작업을 일시중지한 다음 다시 빌드 및 다시 배포 아이콘 애플리케이션 다시 빌드 및 다시 배포를 클릭합니다.

  9. 디버깅 세션을 종료하려면 디버그 툴바에서 디버그 중지 아이콘 중지를 클릭합니다.

    디버깅 세션을 종료한 후에는 배포된 모든 Kubernetes 리소스가 클러스터에서 삭제됩니다.

구성 세부정보

Skaffold에 의해 구동되는 Cloud Code는 지원되는 모든 언어에 대해 다음 구성 세부정보를 자동으로 처리합니다.

  • 디버거를 연결할 수 있도록 디버그 포트 전달
  • 애플리케이션에서 디버그 가능한 하나 이상의 컨테이너에 디버거 연결. 애플리케이션에 skaffold.yaml에서 구성된 디버그 가능한 컨테이너(Cloud Code 디버그가 언어를 지원하는 컨테이너)가 여러 개 있는 경우 디버거가 디버깅 가능한 각 컨테이너에 연결됩니다.
  • 세션 전반에서 소스 매핑 정의를 유지하고 .vscode/launch.json 파일을 직접 수정하여 이러한 정의를 맞춤설정할 수 있습니다.

Cloud Code는 또한 다음과 같은 언어별 구성 세부정보를 처리합니다.

Node.js

호출할 진입점 다시 작성:

node --inspect=localhost:9229

Python

Init 컨테이너를 사용하여 ptvsd 모듈을 설치하고 호출할 진입점 다시 작성:

python -m ptvsd --host localhost --port 5678

Go

초기화 컨테이너를 사용하여 dlv 디버거를 설치하고, 시작된 디버그 세션이 헤드리스 모드에서 디버그 서버로만 실행되도록 진입점을 다시 작성하면 시작 시 디버깅된 프로세스가 계속되고, 여러 클라이언트 연결을 수락하고, localhost:56268에서 수신 대기합니다.

dlv exec --headless --continue --accept-multiclient --listen=localhost:56268 --api-version=2, <app> --

자바

적절한 JDWP(Java Debug Wire Protocol) 구성과 함께 환경 JAVA_TOOLS_OPTIONS를 추가하면 JDWP 디버깅 에이전트가 포트 5005에서 소켓 연결을 수신 대기하고 디버거가 연결되기 전에 VM이 실행되도록 허용합니다.

jdwp=transport=dt_socket,server=y,suspend=n,address=5005,quiet=y

Skaffold로 지원되는 디버깅에 대한 자세한 내용은 skaffold debug 문서를 참조하세요.

Kubernetes pod에 디버거 연결

VS Code용 Cloud Code는 Kubernetes pod에 디버거 연결도 지원합니다. 비교하려면 Kubernetes pod에 연결하기와 Kubernetes 애플리케이션 디버깅하기 비교를 참조하세요.