0

当我尝试使用CloudCode extension调试一个简单的 Kubernetes 应用程序时,我在我的 Visual Studio Code 中遇到了一个非常奇怪的案例。如果有人在 VS Code 中使用过 cloudcode,我们将不胜感激有关此问题的任何建议。

我正在尝试一个简单的单端点 Flask 应用程序,我可以在 Google Kubernetes 中成功构建和部署我的容器。端点也工作正常。但是,当我尝试将调试器附加到我的 pod 时,它总是失败并显示以下错误消息: spawn python ENOENT Source: Cloud Code (Extension)

在此处输入图像描述

这是我在 launch.json 文件中的启动和附加片段

{
    "name": "Attach to Kubernetes Pod (Python)",
    "type": "cloudcode.kubernetes",
    "request": "attach",
    "language": "Python",
    "debugPort": 3000,
    "podSelector": {
        "app": "flask-test-kustomize-app"
    },
    "localRoot": "${workspaceFolder}/flask_app_internal/app",
    "remoteRoot": "/app"
},
{
    "name": "Run on Kubernetes",
    "type": "cloudcode.kubernetes",
    "request": "launch",
    "skaffoldConfig": "${workspaceFolder}/skaffold.yaml",
    "watch": true,
    "cleanUp": false,
    "portForward": true,
    "imageRegistry": "eu.gcr.io/xxx-XXXXXX",
}

这是我的简单 Dockerfile

FROM python:3.7-alpine
COPY requirements.txt /tmp/requirements.txt
RUN apk add --no-cache --virtual .build-deps gcc libc-dev \
    linux-headers build-base libc6-compat \
    && pip install --no-cache-dir --trusted-host pypi.python.org -r /tmp/requirements.txt \
    && apk del .build-deps gcc libc-dev build-base linux-headers 
COPY ./app /app
WORKDIR /app/
ENV PYTHONPATH=/app
EXPOSE 80 8010
ENTRYPOINT ["python", "main.py"]

我的 Flask main.py 是一个非常简单的带有一个端点的 Flask 应用程序。该应用程序包含调试

import os
import sys
from flask import Flask
import time
import debugpy
debugpy.listen(('0.0.0.0', 3000))

app = Flask(__name__)
@app.route('/messages/', methods=['GET'])
def get_messages():
    v = 'hello'
    return v

if __name__ == '__main__':
    host = os.getenv("HOST", "0.0.0.0")
    port = os.getenv("PORT", "8010")
    app.run(debug=False, port=port, host=host)

我使用 debugpy 而不是 ptvsd(ptvsd 用于谷歌云代码 vscode 文档示例),但这个调试器现在已经过时了。

我的 Skaffold 文件看起来像这样

apiVersion: skaffold/v2beta19
kind: Config
build:
  tagPolicy:
    sha256: {}
  artifacts:
  - context: flask_app_internal
    image: flask_test/el-flask-kustomize-test
    docker:
      dockerfile: flask.dockerfile
deploy:
  kustomize:
      paths: ["base"]
profiles:
- name: cloudbuild
  build:
    googleCloudBuild: {}

我在本地服务器上使用相同的 dockerfile 尝试了相同的应用程序,并且调试器运行良好。但是,在 VS Code 中尝试使用 cloudcode.kubernetes 时,我总是遇到这个 spawn python enoent 问题。

非常感谢您提前提出任何建议。

4

0 回答 0