开发环境使用宿主机部署,测试和生产使用 k8s。会有什么坑吗?
背景,Java 项目,spring cloud 技术栈。因为和 springcloud 体系耦合很重,一下子剥离不开,还需要继续使用 springcloud 。 开发人员需要和开发环境相互调用,但注册中心里是 docker 容器里的 IP 地址。想简单处理,开发环境维持老的方式部署,测试和生产部署 k8s 容器。请教一下有经验的大佬,这样会有什么坑吗?
各位大佬,我想我还需要澄清一下
网络设备不受我们控制。
服务器和开发机均没有root和管理员权限。
网络环境受限,无法自由安装软件。
由于上面的条件显示,所以我才会考虑使用传统的宿主机方式进行开发环境部署。
开发人员需要和开发环境相互调用---没看懂。
配置下静态路由,本地环境就可以访问 service 的 cluster ip 了
改下应用网络,直接使用宿主机网络,不过这样可能会出现端口冲突,需要规划下各个应用端口使用
开发环境怎么能网络调用其他的服务呢,单测的话 mock 掉就好了,想运行发测试环境就行
developer 的 pc 需要调用 dev 环境上的 server
路由器配置下 K8 网段的静态路由表
集群里起一个 vpn 或者使用 ingress 、metallb 这种工具直接暴露出来
各位大佬,网络权限不在我们控制之下,而且我们是没有服务器的 root 权限的。
我不是 java 栈的, 机会难得, 想请教大佬.>>> Java 项目,spring cloud 技术栈。因为和 springcloud 体系耦合很重,一下子剥离不开,还需要继续使用 springcloud 。剥离之后使用什么技术栈啊?
直接用 springboot 就行了。或者任意 web 框架都可以,只关注 http 协议,不关注具体框架
推荐使用 telepresence , 可以帮助开发者更方便的进行 k8s 环境下的应用开发,它能让你的本机直接访问到 k8s 集群内的服务,也可以将集群内的请求流量劫持到本机进行处理,这样就不需要在开发调试中反复进行构建镜像,推送镜像,部署服务的流程了,直接在本地一站式完成,比较方便。 github.com/telepresenceio/telepresence
farer.org/2022/09/04/developing-debugging-with-teleprensence/
既让网络控制不了,就部署一个 VPN ,我之前弄过一个类似的,在一台服务器上部署一个 v2ray ,然后电脑连接到该服务器 v2ray ,这样本地电脑就可以轻松访问只有服务器才能访问的资源了
感谢,我研究一下这个方案。这个需要 windows 开发机的管理员权限吗?这个权限我们也是没有的。
感谢大佬,vpn 的方案我去研究一下。
没在 win 下装过,你试试,如果不行可以在 wsl 里试试
这是个假需求
okteto 可以了解一下,本地编辑代码,syncthing 自动同步到 pod 里
你无非就是想把容器当宿主机使用,你把你需求报你的运维人员看看他们能不能给你们提供方案,不能你就部署容器的时候往里面丢类似 webmin 、1panel 这样的管理套件然后让运维人员给你们暴露端口即可。楼上这些建议有点偏离你的本质需求。
谢谢,实际上网络端口都是通的,只是需要暴露出来。ingress 的方式是可以的。
说明你们这个 dev 环境的 k8s 搭建的时候对开发的需求考虑的不周到。遇到同样的问题,我搭建的 k8s 集群用的 cilium 的 bgp 路由方案,pod IP 和宿主机 IP 在同一个大二层。on-premises 的 本地开发机和 pod 容器 三层路由互相可达。服务注册到注册中心的地址既可以是开发机的地址,也可以是 pod 的地址,由于网络互通,对开发均无感。
直接 k8s 里面起容器开发,idea 、vscode 都支持 remote development
telepresence 或者 kt-connect 都可以将集群内的请求流量劫持到本机进行处理 github.com/telepresenceio/telepresence github.com/alibaba/kt-connect
没明白你说的“宿主机”到底是个啥你说的“没有服务器 root 权限”这个服务器和那句宿主机不是同一个东西吗?
同意 22 楼的方案,容器内开发。提升效率方便摸鱼!~
这个我有经验,我是这样弄的。1.服务打开 NodePort 获取宿主机映射端口2.在配置容器启动命令,固定在注册中心注册使用的 ip 和 port 。比如 nacos 在 spring 里固定就传--spring.cloud.nacos.discovery.ip=xxx.xxx.xxx.xxx --spring.cloud.nacos.discovery.port=xxxx这样开发在注册中心寻找服务时就能正确命中 k8s 中部署的服务这个方法由于 nacos 注册的为宿主机映射端口,所以网络性能要弱于 ClusterIP ,不过开发环境一般不会有网络压力,所以可以忽略了
我觉得用了 k8s 就不要使用注册中心了,直接使用 k8s 的 service 来做服务发现,本地测试不启动服务测试,而是写单元测试,跨服务调用的接口使用 mock ,实在不能 mock 的再考虑暴露端口来调用,不需要服务发现就不存在要把服务注册到注册中心了。只需要其它服务的地址就行了。
正常来说肯定是这样的,但我们是个老项目进行改造,有历史包袱需要兼顾。一时半会还没办法抛弃这套东西。
一个后端服务只向外提供一个借口,全用 post ,通过定义不同的业务 code 进行处理,我之前有个小系统就这样搞过,并且我还觉得前端反而会不会简单些,只用一个接口,而有的项目…
高中时期 10 PRINT "HELLO WORLD" 20 END 大学新生 program Hello(input, output) begin writeln…
dongle 是一个轻量级、语义化、对开发者友好的 Golang 编码解码和加密解密库 Dongle 已被 awesome-go 收录, ,并获得 gitee 2024 年最有…
合速度