当我尝试使用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 问题。
非常感谢您提前提出任何建议。