开发环境使用宿主机部署,测试和生产使用 k8s。会有什么坑吗?

2023-11-29 08:41:37 +08:00
 cookii
背景,Java 项目,spring cloud 技术栈。因为和 springcloud 体系耦合很重,一下子剥离不开,还需要继续使用 springcloud 。



开发人员需要和开发环境相互调用,但注册中心里是 docker 容器里的 IP 地址。



想简单处理,开发环境维持老的方式部署,测试和生产部署 k8s 容器。请教一下有经验的大佬,这样会有什么坑吗?
3781 次点击
所在节点    Kubernetes
28 条回复
idontnowhat2say
2023-11-29 10:25:10 +08:00
说明你们这个 dev 环境的 k8s 搭建的时候对开发的需求考虑的不周到。遇到同样的问题,我搭建的 k8s 集群用的 cilium 的 bgp 路由方案,pod IP 和宿主机 IP 在同一个大二层。on-premises 的 本地开发机和 pod 容器 三层路由互相可达。服务注册到注册中心的地址既可以是开发机的地址,也可以是 pod 的地址,由于网络互通,对开发均无感。
ldyisbest
2023-11-29 11:15:35 +08:00
直接 k8s 里面起容器开发,idea 、vscode 都支持 remote development
mightybruce
2023-11-29 12:24:07 +08:00
telepresence 或者 kt-connect 都可以将集群内的请求流量劫持到本机进行处理
https://github.com/telepresenceio/telepresence
https://github.com/alibaba/kt-connect
julyclyde
2023-11-29 15:28:33 +08:00
没明白你说的“宿主机”到底是个啥
你说的“没有服务器 root 权限”这个服务器和那句宿主机不是同一个东西吗?
liaoliaojun
2023-11-29 15:53:29 +08:00
同意 22 楼的方案,容器内开发。提升效率方便摸鱼!~
JayZXu
2023-11-29 16:09:55 +08:00
这个我有经验,我是这样弄的。
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 ,不过开发环境一般不会有网络压力,所以可以忽略了
zhenjiachen
2023-11-29 16:30:33 +08:00
我觉得用了 k8s 就不要使用注册中心了,直接使用 k8s 的 service 来做服务发现,本地测试不启动服务测试,而是写单元测试,跨服务调用的接口使用 mock ,实在不能 mock 的再考虑暴露端口来调用,不需要服务发现就不存在要把服务注册到注册中心了。只需要其它服务的地址就行了。
cookii
2023-11-29 17:03:16 +08:00
@zhenjiachen 正常来说肯定是这样的,但我们是个老项目进行改造,有历史包袱需要兼顾。一时半会还没办法抛弃这套东西。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/996099

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX