Devcontainer 开发指南
工具安装
使用VSCode
安装远程开发扩展
使用VSCode,安装Remote-ssh与DevContainers扩展


在左侧远程菜单中,点击加号添加 k8s 集群所在的远程节点,按提示完成 SSH 登录

安装K8s扩展
在远程节点上安装Kubernetes扩展

点击K8s标签,点击clusters菜单中的
Set Kubeconfig。选择默认/root/.kube/config或输入自定义kubeconfig文件路径。确认后,k8s插件能够获取当前集群的资源信息

开发容器准备
根据需要开发的项目的工作负载配置,编写开发用的资源配置。主要流程在于:
- 编写开发Pod(必须是Pod),保持环境变量、挂载卷、权限等配置不变,修改开发镜像、命令,并挂载代码、开发环境等
- 使用原有的Service、ConfigMap、ServiceAccount等配套资源。
以某后端服务为例,以下是一个开发用 Pod。和原 Deployment 配置相比:
- 删除 securityContext 权限限制,便于开发
- 新增了
app-dev标签,用于后续从对应 Service 分流 - 修改容器镜像为 golang 开发镜像,并修改命令为
tail -f /dev/null使 Pod 常驻 - 沿用原有环境变量、端口、挂载卷、服务账号
- 新增 hostPath 挂载卷:
- code:远程主机上的源码路径;
- go-path:远程主机上的 Golang 路径,执行
go env GOPATH获取;
- 设置 nodeName 为当前远程节点名称,确保 Pod 与源码在同一节点(hostPath 挂载要求)
- 这里额外将源码挂载路径设置为 workingDir,便于进入容器后开发。
app-dev.yaml
apiVersion: v1
kind: Pod
metadata:
name: app-dev
namespace: example-system
labels:
app: app-dev
spec:
serviceAccountName: app
containers:
- name: app
image: golang:1.24.5
imagePullPolicy: IfNotPresent
command: ["tail"]
args: ["-f", "/dev/null"]
workingDir: /app
env:
- name: OAUTH_CLIENT_ID
valueFrom:
secretKeyRef:
key: client-id
name: app-oauth-client
- name: OAUTH_CLIENT_SECRET
valueFrom:
secretKeyRef:
key: client-secret
name: app-oauth-client
ports:
- containerPort: 8080
protocol: TCP
resources: {}
volumeMounts:
- name: code
mountPath: /app
- name: go-path
mountPath: /go/pkg
- mountPath: /ssl/ca.pem
name: app-tls
subPath: ca.crt
- mountPath: /ssl/server.key
name: app-tls
readOnly: true
subPath: tls.key
- mountPath: /ssl/server.crt
name: app-tls
readOnly: true
subPath: tls.crt
- mountPath: /etc/app/log-config
name: log-config-volume
- mountPath: /etc/app/config
name: config-volume
volumes:
- name: code
hostPath:
path: /path/to/code # change this
type: Directory
- name: go-path
hostPath:
path: /path/to/golang # change this
type: DirectoryOrCreate
- name: app-tls
secret:
defaultMode: 384
secretName: app-tls
- name: log-config-volume
configMap:
defaultMode: 420
name: app-logcfg
- name: config-volume
configMap:
defaultMode: 420
name: app-config
nodeName: <node-name> # change this
修改对应 Service 的标签选择,将流量转移到开发 Pod 上来
labelSelector: app-dev
开发运行
在K8s扩展中,展开Namespace,选择开发Pod所在的命名空间,右键
Use Namespace切换上下文
按F1后通过关键词搜索并选择
Dev Containers: Attach to Running Kubernetes Container...
选择上面部署的开发Pod

在新建的VSCode窗口中编辑代码、执行命令,使用方式与普通VSCode开发一致。首次打开需要再容器中启用Golang扩展