CloudApps 用户指南

CloudApps 是一款专为阿里云 EDAS(企业级分布式应用服务)开发者量身打造的 VS Code 扩展。它让您能够像在本地一样,实时查看、编辑云上应用。

目前插件支持 VS CodeQoder

核心功能特性

  • 一键连接:通过 SSH 直接连接到 Kubernetes Pod

  • 智能搜索:支持按 Pod 名称、IP 地址、应用名称快速搜索

  • 远程开发:集成 VS Code Remote-SSH,支持远程工作区开发

  • 安全连接:自动生成和管理 SSH 密钥对

快速开始

1. 安装扩展

  1. 在扩展市场中搜索 "CloudApps" 并点击安装。

  2. 注意

    • VS Code 用户:本扩展依赖微软官方的 "Remote - SSH" 扩展,请确保一并安装。

    • Qoder 用户:无需额外安装,Qoder 已内置相关功能。

2. 配置凭证

进入扩展设置页面,配置您的阿里云 AccessKey ID 和 AccessKey Secret。配置完成后,点击刷新按钮获取应用列表。

image.png

image.png

3. 查找应用

可以在输入框中输入应用名称或 IP 进行过滤,或直接在树状视图中查找。

例如,当您知道 Pod 的 IP 地址片段(如 10.76.207)时,在 EDAS FILTER 输入框中输入该 IP 段,CloudApps 将自动过滤并展示所有匹配该 IP 前缀的 Pod,让您能够快速找到目标容器。

image.png

同样,当需要查找所有与 Python 相关的应用时,只需输入 python 关键词,CloudApps 会立即过滤出所有包含该关键词的应用(如 python39、python-test 等)及其下属的所有 Pod。

image.png

4. 建立连接

点击目标 Pod 旁的 连接 图标。

image.png

连接成功后,VS Code 将自动弹出新的远程窗口,您即可开始云端开发。

典型使用场景:Flask 应用云端实时改动

假设您在 EDAS 上部署了一个 Flask 应用,现在需要快速验证一个功能改动的效果。使用 CloudApps,整个流程可以在几分钟内完成:

1. 搜索并连接目标 Pod

在 CloudApps 的 EDAS FILTER 中输入应用名称(如 python),快速定位到您的 Flask 应用 Pod:

点击目标 Pod 旁的"连接"按钮,CloudApps 将自动完成 SSH 配置并打开远程工作区。

image.png

2. 查看和编辑代码

连接成功后,VS Code 将弹出新窗口,左侧文件树显示 Pod 内的目录结构,您可以直接打开 app.py 等源代码文件进行编辑,例如把Hello from Flask 改为 Hello World

image.png

3. 验证效果

a) 端口转发

使用 kubectl port-forward 将应用端口映射到本地:

kubectl port-forward -n default pod/python-test-group-1-6558b4495-5j9mr 8000:8000

b) 重载应用

  • Flask 开发模式:保存文件后会自动重载,无需额外操作。

  • Gunicorn 生产模式(本次示例使用):需要手动重启服务。在 Pod 终端中运行:

ps aux | grep gunicorn  # 找到主进程 ID
kill -HUP <PID>         # 重载配置

c) 查看结果

在浏览器中访问 http://localhost:8000,立即看到代码修改后的效果。

整个过程无需重新构建镜像或重启 Pod,极大提升了调试效率。

image.png

常见问题

1. 容器被 OOMKilled(内存溢出)?

  • 原因:CloudApps 需要在 Pod 中运行 VS Code Server,这会占用一定的内存资源(通常几百 MB)。如果您的 Pod 内存限制(Limit)设置得过于紧凑,启动 VS Code Server 可能会导致容器内存超限。

  • 解决方案:建议在 EDAS 控制台适当调大 Pod 的内存限制 (Memory Limit),推荐至少 2GB。

image.png

2. 提示权限不足 (Forbidden)?

CloudApps 的部分功能(如创建临时容器)需要 Kubernetes RBAC 权限。如果您遇到权限问题,请确保您的集群角色包含临时容器的创建权限:

image.png

可以将以下自定义 ClusterRole 进行配置使用自定义RBAC限制集群内资源操作

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: pod-ssh-minimal
rules:
  - apiGroups: [""]
    resources: ["pods"]
    verbs: ["get", "list", "watch"]
  - apiGroups: [""]
    resources: ["pods/exec"]
    verbs: ["get", "create"]
  - apiGroups: [""]
    resources: ["pods/ephemeralcontainers"]
    verbs: ["patch"]