Kubernetes pod에 디버거 연결

Cloud Code는 디버거를 Node.js, Python, Go, 자바, .NET용 Kubernetes pod에 연결하는 기능을 지원합니다. 이때 디버그 가능 컨테이너cloudcode.kubernetes 유형의 연결 구성만 있으면 됩니다.

Kubernetes pod 연결과 Kubernetes 애플리케이션 디버깅의 차이에 대한 자세한 내용은 Kubernetes pod 연결과 Kubernetes 애플리케이션 디버깅을 참조하세요.

컨테이너 설정

디버깅할 컨테이너를 준비하려면 사용 중인 언어의 안내를 따르세요.

Node.js

  • --inspect=<debugPort>로 Node.js 애플리케이션을 시작합니다. 여기서 debugPort연결 구성에서 가져옵니다. 예시: CMD ["node", "--inspect=9229", "index.js"]

Python

  • 머신 및 컨테이너에 ptvsd 모듈이 설치되어 있는지 확인합니다.
  • ptvsd를 통해 Python 애플리케이션을 시작합니다. 지정된 포트를 연결 구성debugPort 필드에 일치시킵니다. 예를 들면 다음과 같습니다.
    CMD ["python", "-m", "ptvsd", "--port", "", "app.py"]
    

Go

  • 머신 및 Go 컨테이너에 dlv 패키지가 설치되어 있는지 확인합니다.
  • dlv debug를 통해 Go 애플리케이션을 시작합니다.

    시작 명령어에 지정된 포트는 연결 구성debugPort 속성 값과 동일해야 합니다. 예를 들면 다음과 같습니다.

    CMD ["dlv", "debug", "--headless", "--listen=:<debugPort>", "--log"]
    

    문제 해결 팁: Go 애플리케이션을 디버깅하면 애플리케이션이 멈추고 디버거가 연결될 때까지 대기합니다. 서비스를 시작하려면 디버거를 연결하세요.

자바

  • 머신에 JVM이 설치되어 있는지 확인합니다.
  • 다음 옵션으로 자바 애플리케이션을 시작합니다. 여기서 debugPort연결 구성에서 가져옵니다.

    -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=,quiet=y
    

    예를 들어 디버그 모드에서 자바 애플리케이션을 시작하고 포트 debugPort에서 연결을 리슨하려면 다음 안내를 따르세요.

    ENTRYPOINT ["java","-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=<debugPort>,quiet=y", "-jar", "my-app-1.0.jar"]
    

.NET Core

  • Kubernetes 컨테이너에 Microsoft의 .NET Core 명령줄 디버거인 vsdbg가 설치되어 있는지 확인합니다.

    예를 들면 다음과 같습니다.

    RUN apt-get update 
    && apt-get install -y --no-install-recommends unzip
    && apt-get install -y procps
    && rm -rf /var/lib/apt/lists/*
    && curl -sSL https://aka.ms/getvsdbgsh | bash /dev/stdin -v latest -l /vsdbg

연결 구성 설정

디버그 가능한 컨테이너에 연결하려면 cloudcode.kubernetes 유형의 연결 구성이 있어야 합니다.

.vscode/launch.json 파일이 없는 프로젝트

프로젝트의 .vscode 폴더에 시작 파일이 없는 경우 디버그 패널을 사용하여 파일을 추가할 수 있습니다.

  1. 디버그 패널(작업 표시줄의 디버그 뷰 아이콘 디버그 아이콘 사용)로 이동하여 드롭다운 메뉴에서 구성 추가를 선택합니다.

  2. 환경으로 Cloud Code: Kubernetes를 선택합니다.

    Cloud Code: Kubernetes를 환경으로 설정

  3. Attach to Kubernetes Pod 옵션 선택

    Kubernetes 구성 옵션 선택

  4. 해당 프로그래밍 언어를 선택합니다.

    그러면 프로젝트의 launch.json 파일이 생성되어 열리고 연결 구성이 생성됩니다. 이제 프로젝트의 구성 속성과 일치하도록 이 파일에서 구성 속성을 업데이트할 수 있습니다. 구성 속성에 대한 자세한 내용은 구성 속성을 참조하세요.

    열린 launch.json 파일에 표시된 구성 속성

.devcode/launch.json 파일이 있는 프로젝트

기존 .devcode/launch.json에 새 연결 구성을 추가하려면 다음 절차를 따르세요.

  1. launch.json 파일을 엽니다.
  2. 스니펫 Intelliense를 호출하는 Add Configuration 버튼을 누릅니다.
  3. 원하는 언어에 대해 Cloud Code: Attach to Kubernetes Pod 스니펫 중 하나를 선택합니다.
  4. 그러면 연결 구성이 추가됩니다. 이제 프로젝트의 속성과 일치하도록 이 구성의 속성을 업데이트할 수 있습니다. 구성 속성에 대한 자세한 내용은 이 를 참조하세요.

구성 속성

속성 설명
debugPort 컨테이너에서 사용되는 디버그 포트입니다.
podSelector 디버그 pod를 선택하는 데 사용되는 키-값 쌍 집합입니다(자세한 내용은 선택기 가이드를 참조). 일반적인 podSelector는 대개 다음과 같습니다.

"podSelector": { "app": <deployment-name> }

localRoot 디버깅할 프로그램이 있는 로컬 디렉토리 경로입니다. 기본값은 ${workspaceFolder}입니다.
remoteRoot 디버깅할 프로그램이 있는 (Kubernetes 컨테이너의) 원격 디렉터리의 절대 경로입니다.

Kubernetes pod에 디버거 연결

구성 및 컨테이너를 설정한 후에는 다음 안내를 따르세요.

  1. 디버그 뷰 디버그 아이콘를 엽니다.
  2. F5 키를 사용하여 구성을 선택하고 시작합니다.
    • 디버깅 중에 localhost:${debugPort}가 컨테이너의 debugPort로 포트 전달됩니다.
  3. 이제 디버깅 세션이 성공적으로 설정되었습니다.
  4. 이제 중단점 설정 및 단계별 코드 실행과 같이 로컬 코드를 디버깅할 때 일반적으로 하는 모든 작업을 수행할 수 있습니다.
  5. 변수 및 스택 정보를 검사하려면 디버그 사이드바를 사용합니다. 디버깅 세션과 상호작용하려면 하단 창 디버거에 있는 디버그 콘솔을 사용합니다.

    중단점 및 변수에서 일시중지된 앱과 범위의 값으로 채워진 호출 스택 섹션

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

Kubernetes pod 연결과 Kubernetes 애플리케이션 디버깅

Kubernetes pod에 연결 Kubernetes 애플리케이션 디버깅
단일 Kubernetes pod 디버깅 애플리케이션에서 디버그 가능한 모든 컨테이너 디버깅
디버깅하기 전에 애플리케이션을 Kubernetes pod에서 실행해야 합니다. Kubernetes 클러스터에서 애플리케이션을 실행하고 디버거를 연결합니다.
'cloudcode.kubernetes' 유형의 구성(.vscode/launch.json)을 사용하고 'attach'를 요청합니다. 'cloudcode.kubernetes' 유형의 구성(.vscode/launch.json)을 사용하고 'launch'를 요청합니다.
자세한 내용은 출시 구성과 연결 구성 비교를 참조하세요.
샘플 구성:

{
  "name": "Attach to Kubernetes Pod (NodeJS)",
  "type": "cloudcode.kubernetes",
  "request": "attach",
  "language": "Node",
  "debugPort": 9229,
  "podSelector": {
     "app": "hello-world"
  },
  "localRoot": "${workspaceFolder}",
  "remoteRoot": "/app"
}
샘플 구성:

{
  "name": "Run/Debug on Kubernetes",
  "type": "cloudcode.kubernetes",
  "request": "launch",
  "skaffoldConfig": "${workspaceFolder}/skaffold.yaml",
  "watch": true,
  "cleanUp": true,
  "portForward": true
}
이 구성은 애플리케이션을 실행하는 데 사용할 수 없습니다. 이 구성은 애플리케이션을 실행하거나 디버깅하는 데 사용할 수 있습니다.
이 구성은 언어별로 다릅니다. 이 구성은 언어별로 다르지 않습니다.
전용 명령어 없음 **Kubernetes의 디버그** 명령어