共计 3621 个字符,预计需要花费 10 分钟才能阅读完成。
01 痛点
在咱们团队将产品的部署状态迁徙到 kubernetes 上之后,在研发过程中,开发和联调代码的过程十分的苦楚,决定寻找在 k8s 环境下的云原生时代的买通本地和开发环境的解决方案。
回顾一下,过来的开发过程,咱们的过程一共有 2 种模式,即 k8s 无关过程和依赖了 k8s 的过程。
02 剖析
– k8s 无关过程 –
- 因为我的项目依赖了 oracle 连贯库,装置 oracle 驱动,在团队中既有 window,unbuntu,和 mac 的状况下,团队成员的本地开发环境的搭建非常复杂
- 过程依赖的环境变量十分多,如果开发环境的 ip 换掉,配置环境变量十分麻烦
- 过程内依赖了一些二进制 bin 文件,格局是 ELF 的,这些文件在 windows 和 mac 的环境上是无奈执行的
– 依赖了 k8s 的过程 –
- 须要复制开发环境上 kubeconfig 文件到本地,一个人如果同时开发多个环境,切换 kubeconfig 文件十分繁琐
- 本地开发无奈将开发环境上的流量导到本地,须要打包替换环境上镜像来实现联调
03 现状
因而日常的开发流程便是:
- 配置环境变量和 kubeconfig
- 应用 postman 等其余工具进行本地开发
- 提交代码、跑 CI 流程,出镜像
- 替换环境上镜像
- 自测
显然,为了保障在本地开发的代码,在环境上实在运行的成果完全一致,带来了很大的工作效率问题,本地编码 2 分钟,上环境自测 5 分钟
04 需要
因而咱们急需一种便捷的,学习成本低的,基于配置的,一劳永逸的,团队对立的解决方案来买通本地和开发环境,节俭本地开发环境的搭建和配置的工夫,节俭团队成员联调的工夫,进步团队效率
05 计划选型
Telepresence
参考
https://docs.microsoft.com/zh…
介绍
Telepresence 是一款为 Kubernetes 微服务框架提供疾速本地化开发性能的开源软件。Telepresence 在 Kubernetes 集群中运行的 Pod 中部署双向网络代理,该 Pod 将 Kubernetes 环境(如 TCP 连贯,环境变量,卷)中的数据代理到本地过程。本地过程通明地笼罩其网络,以便 DNS 调用和 TCP 连贯通过代理路由到近程 Kubernetes 集群,可能获取
个性
- 基于在本地计算机应用 docker,fuse/sshfs 和流量转发技术,来将本地和近程之间的流量和文件系统买通,以在本地应用 ide 进行调试
- 本地拜访远端的服务, 跨 namespace
- 本地服务能够齐全拜访近程群集中的其余服务;
- 本地服务能够齐全拜访 Kubernetes 的环境变量,Secrets 和 ConfigMap
- K8S 中运行的近程服务也能够齐全拜访本地服务
- 通过在本地应用 docker 来运行本地代码,并和近程 k8s 服务通信,本支行承当了相似 kubelet 的角色
缺点
- 不反对 ide 插件
- 不能将本地代码同步到远端进行调试
- 没有做隔离,进入调试模式后,服务的可用性取决于本地服务
- 只能应用命令操作,操作不能配置化,操作繁琐
Bridge to kubernetes
参考
https://docs.microsoft.com/zh…
介绍
Bridge to Kubernetes 可重定向已连贯的 Kubernetes 群集与开发计算机之间的流量。Kubernetes 群集中的本地代码和服务能够像在同一 Kubernetes 群集中一样进行通信。
Bridge to Kubernetes 插件只可用于 Visual Studio 和 VS Code,反对其余 ide 的打算还在官网的 RoadMap 上没有开始
工作原理
- 提醒你在群集上配置要替换的服务,在开发计算机上配置用于代码的端口,并将代码的启动工作配置为一次性操作。
- 将群集上 pod 中的容器替换为近程代理容器,它会将流量重定向到开发计算机。
- 在开发计算机上运行 kubectl port-forward,将流量从开发计算机转发到群集中运行的近程代理。
- 应用近程代理从群集收集环境信息。此环境信息包含环境变量、可见服务、卷装载和秘密装载。
- 在 Visual Studio 中设置环境,以便开发计算机上的服务能够拜访雷同变量,就像它在该群集上运行一样。
- 更新 主机文件,将群集上的服务映射到开发计算机上的本地 IP 地址。这些主机 文件条目容许开发计算机上运行的代码向群集中运行的其余服务申请。若要更新 主机文件,Bridge to Kubernetes 计算机上须要管理员拜访权限。
- 开始在开发计算机上运行和调试代码。如有必要,Bridge to Kubernetes 进行以后应用这些端口的服务或过程,以开释开发计算机上所需的端口。
个性
- 买通本地和近程 k8s 环境的流量
- 将环境信息包含环境变量、service、volume,secret,configmap 克隆到本地
- 通过主动批改 /etc/hosts 文件,将集群上的服务映射到开发计算机上的本地 IP 地址
缺点
Bridge to Kubernetes 具备以下限度:
- 要使 Bridge to Kubernetes 胜利连贯,一个 pod 只能有一个容器在该 pod 中运行,然而事实中有很多多容器的 pod。
- 目前,Bridge to Kubernetes pod 必须是 Linux 容器。Windows 容器。
- 如果 k8s 环境是集群环境,若要更新 /etc/hosts 文件,Bridge to Kubernetes 计算机上须要管理员拜访权限
Nocalhost
参考
https://nocalhost.dev/zh-CN/d…
介绍
Nocalhost 是一款开源的基于 IDE 的云原生利用开发工具:
- 间接在 Kubernetes 集群中构建、测试和调试应用程序
- 提供易于应用的 IDE 插件(反对 VS Code 和 JetBrains),即便在 Kubernetes 集群中进行开发和调试,Nocalhost 也能放弃和本地开发一样的开发体验
- 应用即时文件同步进行开发:即时将您的代码更改同步到远端容器,而无需重建镜像或重新启动容器。
Nocalhost 的野心相比 Bridge to Kubernetes 和 Telepresence 更大,具备开发环境的管理体系。深度整合 vscode / IntelliJ IDEA 实现了一键部署上云,一键近程 debug 等式开发的贴心性能。
其设计的外围就是主动同步:
- 主动同步和热加载代码
- 文件
- 终端
Nocalhost 目前是齐全开源的,并已进入 CNCF Landscape:
反对 goland, idea,pycharm, vscode
工作原理
Nocalhost 由单个二进制 CLI 和 IDE 插件组成。现实状况下,您能够间接将它与您相熟的 IDE 一起应用。
Nocalhost 不须要服务器端组件,因为它通过 KubeConfig 间接与您的 Kubernetes 集群通信,就像 kubectl 一样。
个性
– 实时线上编码 –
Nocalhost 预配置为与你喜爱的 IDE 配合应用,你能够一键连贯到任何 Kubernetes 集群,开始享受在集群内进行编码,解脱烦人的本地环境配置。
– 实时同步 –
Nocalhost 能够在你每次进行批改时主动将代码同步到 K8s 容器中。这样能免去了镜像提交、构建和推送等步骤,极大提速了开发的反馈循环。因而代码批改能够实现秒级失效。
– 易于合作 –
- Nocalhost 可帮忙你的团队实现标准化开发工作流程,而无需让团队中的每个人都成为 Kubernetes 专家。
- 团队中的 Kubernetes 和 DevOps 专家能够通过 Nocalhost Server 配置和治理集群、应用程序、DevSpace 和用户。浏览无关 Nocalhost Server 的更多信息
- 开发人员无需成为 Kubernetes 专家,即可轻松查看我的项目并即时在 Kubernetes 集群中开始编码和调试。
应用形式
Nocalhost 由单个二进制 CLI 和 IDE 插件组成。现实状况下,您能够间接将它与您相熟的 IDE 一起应用。
为什么应用 Nocalhost?
构建 Kubernetes 利用并不简略,尤其对于大型开发团队来说更具挑战。Nocalhost 提供了最高效的形式来构建云原生应用程序。
应用 Nocalhost 间接在 Kubernetes 中进行开发的劣势有:
- 生产环境相似性 – 开发环境与你的生产环境十分类似,让你更有信念在公布新性能时所有都将在生产环境中失常工作。
- 提速反馈循环 – 通过文件同步,你所有代码更改能够在容器中立刻失效,而无需重建镜像或重新部署容器。
- 灵便的扩展性 – 开发人员无需再放心本地资源有余。
- 降低成本 – 更无效地应用资源并升高 IT 设施老本。
在下述环境里,在 Kubernetes 集群中进行开发很有用:
- 本地资源的限度
- 因为环境的特殊性,在本地无奈搭建可能运行的环境
- 想要在相似生产环境中测试你的利用
- 想要调试在本地计算机上难以重现的问题
- 应用程序须要拜访集群外部服务 (例如集群 DNS)
比照 PK
三者比拟来看 Nocalhost 是个性最多,反对的场景最多,反对 IDE 的插件最多,并且用户体验最好。完胜其余两位,是其余两个工具反对个性的超集,因而咱们抉择了 Nocalhost,让基于云原生的开发更高效。