开发环境使用宿主机部署,测试和生产使用 k8s。会有什么坑吗? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
cookii
V2EX    Kubernetes

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

  •  
  •   cookii 2023-11-29 08:41:37 +08:00 via Android 4407 次点击
    这是一个创建于 681 天前的主题,其中的信息可能已经有所发展或是发生改变。
    背景,Java 项目,spring cloud 技术栈。因为和 springcloud 体系耦合很重,一下子剥离不开,还需要继续使用 springcloud 。



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



    想简单处理,开发环境维持老的方式部署,测试和生产部署 k8s 容器。请教一下有经验的大佬,这样会有什么坑吗?
    第 1 条附言    2023-11-29 09:54:38 +08:00

    各位大佬,我想我还需要澄清一下

    1. 网络设备不受我们控制。
    2. 服务器和开发机均没有root和管理员权限。
    3. 网络环境受限,无法自由安装软件。

    由于上面的条件显示,所以我才会考虑使用传统的宿主机方式进行开发环境部署。

    28 条回复    2023-11-29 17:03:16 +08:00
    OceanBreeze
        1
    OceanBreeze  
       2023-11-29 09:01:20 +08:00 via iPhone
    开发人员需要和开发环境相互调用---没看懂。
    harvies
        2
    harvies  
       2023-11-29 09:02:55 +08:00 via Android
    配置下静态路由,本地环境就可以访问 service 的 cluster ip 了
    DoctorDeng
        3
    DoctorDeng  
       2023-11-29 09:03:27 +08:00
    改下应用网络,直接使用宿主机网络,不过这样可能会出现端口冲突,需要规划下各个应用端口使用
    gitrebase
        4
    gitrebase &nsp;
       2023-11-29 09:05:31 +08:00
    开发环境怎么能网络调用其他的服务呢,单测的话 mock 掉就好了,想运行发测试环境就行
    cookii
        5
    cookii  
    OP
       2023-11-29 09:06:34 +08:00
    @OceanBreeze developer 的 pc 需要调用 dev 环境上的 server
    orange2023
        6
    orange2023  
       2023-11-29 09:09:21 +08:00
    路由器配置下 K8 网段的静态路由表
    xiaobai1213
        7
    xiaobai1213  
       2023-11-29 09:11:41 +08:00   1
    集群里起一个 vpn
    或者使用 ingress 、metallb 这种工具直接暴露出来
    cookii
        8
    cookii  
    OP
       2023-11-29 09:12:11 +08:00
    @harvies
    @DoctorDeng
    @orange2023
    各位大佬,网络权限不在我们控制之下,而且我们是没有服务器的 root 权限的。
    chaleaochexist
        9
    chaleaochexist  
       2023-11-29 09:14:14 +08:00
    我不是 java 栈的, 机会难得, 想请教大佬.

    >>> Java 项目,spring cloud 技术栈。因为和 springcloud 体系耦合很重,一下子剥离不开,还需要继续使用 springcloud 。

    剥离之后使用什么技术栈啊?
    cookii
        10
    cookii  
    OP
       2023-11-29 09:15:25 +08:00 via Android   1
    @chaleaochexist 直接用 springboot 就行了。或者任意 web 框架都可以,只关注 http 协议,不关注具体框架
    aapeli
        11
    aapeli  
       2023-11-29 09:22:56 +08:00   1
    推荐使用 telepresence , 可以帮助开发者更方便的进行 k8s 环境下的应用开发,它能让你的本机直接访问到 k8s 集群内的服务,也可以将集群内的请求流量劫持到本机进行处理,这样就不需要在开发调试中反复进行构建镜像,推送镜像,部署服务的流程了,直接在本地一站式完成,比较方便。

    https://github.com/telepresenceio/telepresence
    DoctorDeng
        13
    DoctorDeng  
       2023-11-29 09:25:56 +08:00   1
    既让网络控制不了,就部署一个 VPN ,我之前弄过一个类似的,在一台服务器上部署一个 v2ray ,然后电脑连接到该服务器 v2ray ,这样本地电脑就可以轻松访问只有服务器才能访问的资源了
    cookii
        14
    cookii  
    OP
       2023-11-29 09:27:48 +08:00
    @aapeli 感谢,我研究一下这个方案。这个需要 windows 开发机的管理员权限吗?这个权限我们也是没有的。
    cookii
        15
    cookii  
    OP
       2023-11-29 09:28:23 +08:00
    @DoctorDeng 感谢大佬,vpn 的方案我去研究一下。
    aapeli
        16
    aapeli  
       2023-11-29 09:32:34 +08:00
    @imzhoukunqiang 没在 win 下装过,你试试,如果不行可以在 wsl 里试试
    sampeng
        17
    sampeng  
       2023-11-29 09:37:02 +08:00 via iPhone
    @imzhoukunqiang 这是个假需求
    serialt
        18
    serialt  
       2023-11-29 09:50:22 +08:00
    okteto 可以了解一下,本地编辑代码,syncthing 自动同步到 pod 里
    xomix
        19
    xomix  
       2023-11-29 10:05:07 +08:00
    你无非就是想把容器当宿主机使用,你把你需求报你的运维人员看看他们能不能给你们提供方案,不能你就部署容器的时候往里面丢类似 webmin 、1panel 这样的管理套件然后让运维人员给你们暴露端口即可。
    楼上这些建议有点偏离你的本质需求。
    cookii
        20
    cookii  
    OP
       2023-11-29 10:15:53 +08:00
    @xomix 谢谢,实际上网络端口都是通的,只是需要暴露出来。ingress 的方式是可以的。
    idontnowhat2say
        21
    idontnowhat2say  
       2023-11-29 10:25:10 +08:00
    说明你们这个 dev 环境的 k8s 搭建的时候对开发的需求考虑的不周到。遇到同样的问题,我搭建的 k8s 集群用的 cilium 的 bgp 路由方案,pod IP 和宿主机 IP 在同一个大二层。on-premises 的 本地开发机和 pod 容器 三层路由互相可达。服务注册到注册中心的地址既可以是开发机的地址,也可以是 pod 的地址,由于网络互通,对开发均无感。
    ldyisbest
        22
    ldyisbest  
       2023-11-29 11:15:35 +08:00   1
    直接 k8s 里面起容器开发,idea 、vscode 都支持 remote development
    mightybruce
        23
    mightybruce  
       2023-11-29 12:24:07 +08:00
    telepresence 或者 kt-connect 都可以将集群内的请求流量劫持到本机进行处理
    https://github.com/telepresenceio/telepresence
    https://github.com/alibaba/kt-connect
    julyclyde
        24
    julyclyde  
       2023-11-29 15:28:33 +08:00
    没明白你说的“宿主机”到底是个啥
    你说的“没有服务器 root 权限”这个服务器和那句宿主机不是同一个东西吗?
    liaoliaojun
        25
    liaoliaojun  
       2023-11-29 15:53:29 +08:00
    同意 22 楼的方案,容器内开发。提升效率方便摸鱼!~
    JayZXu
        26
    JayZXu  
       2023-11-29 16:09:55 +08:00   1
    这个我有经验,我是这样弄的。
    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
        27
    zhenjiachen  
       2023-11-29 16:30:33 +08:00
    我觉得用了 k8s 就不要使用注册中心了,直接使用 k8s 的 service 来做服务发现,本地测试不启动服务测试,而是写单元测试,跨服务调用的接口使用 mock ,实在不能 mock 的再考虑暴露端口来调用,不需要服务发现就不存在要把服务注册到注册中心了。只需要其它服务的地址就行了。
    cookii
        28
    cookii  
    OP
       2023-11-29 17:03:16 +08:00
    @zhenjiachen 正常来说肯定是这样的,但我们是个老项目进行改造,有历史包袱需要兼顾。一时半会还没办法抛弃这套东西。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3365 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 29ms UTC 10:40 PVG 18:40 LAX 03:40 JFK 06:40
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86