开发环境使用宿主机部署,测试和生产使用 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 的再考虑暴露端口来调用,不需要服务发现就不存在要把服务注册到注册中心了。只需要其它服务的地址就行了。
正常来说肯定是这样的,但我们是个老项目进行改造,有历史包袱需要兼顾。一时半会还没办法抛弃这套东西。
简单列一下: Elasticsearch 用什么替代? ELK 有什么优质替代方案吗? Spark 有什么好的分布式计算替代方案吗? Spring boot 感觉替代方案很多。…
平时都是使用 md5 做哈希,但是有时候感觉 32 位太长了,有点浪费,想问下大家除了 md5 ,还有没有其他优秀的哈希算法?比较短的 fnv substr(md5("")…
我司有个需求是这样的: 要求实现解析 dicom(多帧)文件,把他转化成多个图片,然后把每个图片拿去调用 ai 组的一个接口(标出病灶,结节,返回坐标集合),拿到每个图片的坐标…