V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
cookii
V2EX  ›  Kubernetes

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

  •  
  •   cookii · 2023-11-29 08:41:37 +08:00 via Android · 3737 次点击
    这是一个创建于 367 天前的主题,其中的信息可能已经有所发展或是发生改变。
    背景,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  
       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   ·   实用小工具   ·   2051 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 00:21 · PVG 08:21 · LAX 16:21 · JFK 19:21
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.