developing in k8s with vscode on window

315 阅读4分钟

需求要点

  • 在本地环境中使用 VSCode 文本编辑器 , 基于 VSCode REMOTE-Containers 插件, 实现在容器里开发。
  • 自己的电脑只需要装好IDE,连接到容器里就可以立刻开发编译
  • 不喜 在本地电脑里安装java sdk, nodejs等,一是污染本地环境,二是在本地安装/运行成功了,因为环境不一致,在其他电脑不一定安装成功。
  • 喜爱 在容器中统一开发环境,安装一次,运行任意。
  • 喜爱 在容器中为不同的平台编译(若源码支持不同的平台运行;经济有限)。
  • 平时需要使用到 windwos 系统 ,不喜 在同一台电脑上多硬盘安装系统进行切换。

使用场景

  • 为不同的环境对源码进行测试。比如测试对某个插件的版本支持情况等。
  • 因没有统一开发环境,用户/产品/测试/或不同的开发人员埋怨在其电脑环境中安装不成功。
  • 需要为不同的平台/环境进行编译,但手里没有那么多环境的实机。

容器化安装方便,切换版本方便,也不污染本地环境,也能统一开发环境

工作原理

Remote-Containers 这一套插件现在的功能很多都是基于电脑本机安装的 docker 容器环境,虽然它支持连接到远端的 docker 容器,接到远端之后会有很多额外的设置。

问题解决

当前问题: 在[本地] 还是 [远端] 安装 docker 服务端 ?

解决方案:

因为只有一台电脑,所以[远端] 其实就在[本地]电脑上。+ 因为平时使用的是window系统,且不喜欢多硬盘多系统之间的切换,而docker的容器化技术原生不支持windows系统(需要开启虚拟化支持),所以需要在window上搭建一个Linux系统出来。故有:

  • [远端] 为 windows 环境时, vmware + linux + docker
  • [远端] 为 windows 环境时, virtualbox + linux + docker
  • [远端] 为 windows 环境时, wsl + docker
  • [远端] 为 windows 环境时, wsl + docker desktop for window
  • [远端] 为 windows 环境时, hyper-v + docker desktop for window

当前环境下,在[远端]安装 docker 服务端 其实就是在[Linux系统]系统里,也就是在 ["虚拟机"]里。也就是在 wsl/hyper-v/virtualbox/vmware

了解更多: 容器化技术 docker vs podman


end


当前问题: 想在[本地]使用 docker 命令。 需要在[本地] 安装 docker 客户端 。

解决方案:

  • [本地] 为 windows 环境时,可以使用 scoop 安装。 (ps:scoop install docker)
  • [本地] 为 macos 环境时,可以使用 brew 安装。
  • [本地] 为 linux 环境时,可以使用 yum/apt/snap 等安装。

当前环境下,[本地] 为 windows 环境。


end


当前问题: 让 [远端]docker 服务端 (docker daemon) 支持远程调用功能。

解决方案:

  • [远端] 设置 docker 服务端配置,设置监听地址和端口,开启 docker 远程调用 api 功能。比如 -H tcp://0.0.0.0:2375-H tcp://127.0.0.1:2375 或 回环地址 -H tcp://127.0.0.1:2375 等。可以使用下列操作:(实施方式不唯一)
sudo mkdir /etc/systemd/system/docker.service.d/
sudo cat > /etc/systemd/system/docker.service.d/override.conf <<EOF
[Service]
ExecStart=
ExecStart=/usr/bin/dockerd -H fd:// -H tcp://0.0.0.0:2375 --containerd=/run/containerd/containerd.sock
EOF

end


当前问题: 让 [本地] 的 window 连接 [远端]docker 服务端 (docker daemon)。

解决方案:

  • [本地] 的 powershell 中 使用 docker 命令 , 基于 [远端] docker 服务端的地址和端口创建上下文,切换上下文。
# scoop install docker
docker context create wsl --docker "host=tcp://127.0.0.1:2375"
docker context use wsl

# after that you can run it in window:
# docker run --rm -it ubuntu:20.04 bash

当前环境下,[本地] 为 windows 环境。如果是基于 wsl,windows 可以使用127.0.0.1 访问 wsl。如果是基于 hyper-v/virtualbox/vmware 等, 需填写与[本地]处于同一网络下的虚拟机的地址。


end


当前问题: 让 [本地] 的 vscode 连接 [远端]docker 服务端 (docker daemon)。

解决方案:

  • [本地] vscode 里打开 设置 docker host 地址和端口。(记得安装 vscode 的 docker 插件)

当前问题: 想使用 k8s 。 在[远端] 部署 k8s 。部署k8s的方案有多种,kubeadm/minikube/kind/k3s/k3d/mircok8s 等,根据需要选择

解决方案:

  • [远端] 为 windows 环境时, vmware + linux + docker/containred + k8s
  • [远端] 为 windows 环境时, virtualbox + linux + docker/containred + k8s
  • [远端] 为 windows 环境时, wsl + docker/containred + k8s
  • [远端] 为 windows 环境时, wsl + docker desktop for window + k8s
  • [远端] 为 windows 环境时, hyper-v + docker desktop for window + k8s

了解更多: 容器化技术 docker + k8s vs containred + k8s


end


当前问题: 让[本地] 的 windows 可以访问 [远端] 的k8s

解决方案:

  • 设置 kubeconfig。(todo)

windows 上安装 k8s 管理的开发环境的步骤 - 知乎 (zhihu.com)

# set ~/.kube/config


end


当前问题: 让[本地] 的 vscode 可以访问 [远端] 的k8s

解决方案:

  • 安装 vscode 的kubernetes 插件 , 指定 kubeconfig。 (todo)

参考文献

windows 上安装 k8s 管理的开发环境的步骤 (zhihu.com)

Develop a container on a remote Docker host (visualstudio.com)

Alternate ways to install Docker (visualstudio.com)

Sharing git credentials (visualstudio.com)

Use Docker or Kubernetes from a container (visualstudio.com)

Add non-root user to a container (visualstudio.com)

通过现有应用使用 Bridge to Kubernetes

通过示例应用使用 Bridge to Kubernetes

配置 Kubernetes 桥接

Remote Kubernetes Development in Visual Studio Code with Okteto | Okteto