1.开发完的代码不能在本地部署运行,应当在 k8sj 集群中(这样服务的出流量都不需要做任何改变,本机不需要配置 k8s 的 rbac 等)
2.由于 1 ,最好是远程调试,比如 go dlv 。
3.不能有生成镜像的步骤(每次调试都要生成镜像太浪费时间)
4.不能影响线上用户,支持多人开发。识别测试请求,进入测试服务
我当前的设想是这样:
假设名字是 dev1 的老铁要开发名字是 mysvc 的服务
1.dev1-pod 是 dev1 老铁的开发机,在 k8s 集群中运行,老铁在本地开发完代码,在开发机 git pull ,make ,./run 。
2.dev1 老铁有一个 yaml ,里面是 mysvc-dev1 service 和 dev1-pod pod ,这个 service 指向这个 pod ,selector 用 dev1 就行。部署这个 yaml
3.服务 mysvc 在接收到请求后,第一步是识别特定测试标识 dev1 (比如 http header ),转发到 mysvc+标识=mysvcdev1 服务,所有服务代码都这样写。(转发功能只需要本服务名字拼接标识,当作目标服务,k8s 的 dns 可以直接解析)
但是这个设想有明显的缺点:
1.开发机不能 mount 根目录 / ,只能/home ,/var/http ,这样,也就是说开发机如果重启,通过 apt-get 安装的工具可能会丢。。
2.根据所开发的服务名字不同,mysvc-dev1 这个 service 也需要改名字,这本身不是痛点,但是 rbac 需要让所有服务都接受这类 service ,不能拒绝。