Nocalhost —— 让云原生开发回归原始而又简单NoHost——让云原生开发回归原始简单。本文由R&D编码Nocalhost总监王伟在腾讯云CIF工程效率峰会上分享。大家好,欢迎来到CIF大会。今天和大家分享的是:解决Kubernetes应用开发的困境。首先,我想简单介绍一下我自己。我是腾讯云编码DevOps的王......
本文由R&D编码Nocalhost总监王伟在腾讯云CIF工程效率峰会上分享。
大家好,欢迎来到CIF大会。今天和大家分享的是:解决Kubernetes应用开发的困境。首先,我想简单介绍一下我自己。我是腾讯云编码DevOps的王伟。我现在是Nocalhost项目的研发主管,也是CNCF大使。事不宜迟,言归正传。
这个分享主要分为五个方面:
1.第一,K8s环境下的发展困境;
2.以及主流的云原生开发方式;
3.接下来,实现容器应用和热加载的原理;
4.开发和调试演示,其中一个演示将用于演示;
5.最后,开源共建与展望。
首先第一部分:K8s环境下的发展困境。说到云原生开发,就不得不从Docker说起。当微服务越来越多,运行环境越来越复杂的时候,Docker image为我们提供了一个很好的解决方案。但是当镜像和容器越来越多的时候,服务的布局就成了一个难题。这时候出现了很多方案,比如K8s,Docker Swarm等等。当然,K8s几乎已经成为事实上的标准,成为容器布局的首选方案,但是这个事实上的标准提供的能力是面向操作的。例如,我们可以通过活跃度和就绪度来定义服务的自动恢复机制,通过资源来定义资源使用情况。这些定义实际上给开发者增加了很大的额外负担,也造成了开发和调试之间的两难。
另外,云原生技术栈跨度非常大,对开发者提出了更高的要求,这也要求团队设计出更加符合业务需求的云原生架构。所以总体来说,对于企业来说,招聘和用工的成本也更高。
下图是CNCF云原生应用开发全景图。我们会发现,云原生开发工具这个环节还是缺失的。云原生开发这么难,那么主流的开发方式是什么或者我们现在怎么解决问题
经过总结,目前有四种云原生开发方式:
1.全手工流程。例如,手动构建和推快递镜像,修改镜像版本,等待时间表生效。每次我们看到编码效果时,我们都称之为编码的反馈回路。这种开发方式编码的反馈循环大概需要十分钟,是一个非常漫长的过程。
2.全自动流程,也就是手动环节变成了自动。这种方法显然会更快,但它的反馈回路只缩短到五分钟左右。
3.第三种是对云原生比较了解的团队经常使用的方案,即以网真为工具进行开发。网真主要是连接本地和集群网络,让开发者在本地开发。这种开发方式将编码的反馈循环减少到了10秒,但是由于开发服务是以源代码的形式在本地运行的,这种方式有一定的局限性,后面我会深入讲解。
4.第四种是使用Nocalhost,直接在容器中开发。这样就可以摆脱临场感在某些场景下的局限性。
接下来,我们来详细说说以网真为代表的网络接入方案的使用限制。首先,它最大的局限性是本地环境与工作负载的运行环境差异较大,导致业务源代码很难在本地运行。例如,业务声明安装配置映射、机密、卷等。在K8s Manifest中,很难在本地重建。其次,还有环境的差异,跨平台的差异,比如Linux和Windows之间的差异,以及某些场景下的网络限制。
说了这么多,相信大家都能明白,在K8s环境下开发最大的问题就是每次查看代码都需要重构图像,导致漫长而无效的等待。有没有不需要重建镜像的解决方案答案是肯定的。如果我们可以在容器中实现进程或应用程序的热加载,并且每次编码后都能实时生效,那我们就不需要重新构建映像了吗
接下来,我们将继续讨论该方法的实现原理和方案。先说Dockerfile。Dockerfile定义了容器的启动命令。一般来说,这是业务流程的启动模式。比如运行一个可执行文件,如果我们进入容器执行PS命令,会发现这个进程对应的是容器,也就是PID = 1的进程。我们以围棋应用为例。如果这个PID = 1的进程换成在源代码中运行,go run main.go,能否实现应用热加载修改完代码后,我们只需要重新运行这个命令就可以看到代码效果了
我们的思路没有错,但是要实现这个方案,还需要三个条件。首先是容器的源代码从哪里来除了脚本语言,一般的业务容器没有源代码;二是以Go应用为例。编译环境从何而来我们知道,一般情况下构建的业务容器会因为存储大小而保持最小的可运行环境;第三,如果PID = 1的进程被替换,如何停止容器崩溃
我们来分别看一下如何解决这些问题。首先,源代码问题可以通过从本地同步到容器来解决。第二是编译环境。我们可以通过用带有编译环境的开发映像替换正在运行的业务映像来提供编译环境。第三,我们可以把PID = 1的进程换成阻塞的进程,这三个问题就解决了。我们实现这些方案的时候,容器已经有基础带热加载了,Nocalhost的原理就是基于上面的方案。接下来,我将使用一个演示程序来演示应用程序的热加载和一键调试的效果。
Nocalhost为VSCode和JetBrains提供了全方位的插件,一旦安装就可以立即使用。接下来,我将以Golang's为例,演示演示项目Booking for的开发。
容器应用的实时热加载和一键调试演示到此结束。有兴趣的同学可以根据Nocalhost(nocalhost.dev)官网的快速入门说明试一试。
通过演示,相信你已经了解了Nocalhost带来的全新云原生开发体验。最后一部分,我会和大家分享开源共建的前景。目前Nocalhost是一个完全开源的项目,代码托管在GitHub上,拥有900+star。这也是一个CNCF景观项目,它包括在云原生全景。也欢迎您的关注和贡献。
关于展望,在这次分享中,我介绍了两种开发方式,Telepresence和Nocalhost。他们实际上有不同的解决问题的想法。可以根据自己的业务情况选择一种方式使用。此外,Nocalhost提供了开发环境和开发过程的完整管理功能。对于想要统一管理开发环境的团队,可以安装Nocalhost Server来集中管理开发集群、应用和开发环境。当然,服务器也是开源免费的。在这里,我提供一些服务器的截图。有兴趣的同学可以按照官方文档安装使用。
我的分享到这里。
特别声明:以上文章内容仅代表作者本人观点,不代表ESG跨境电商观点或立场。如有关于作品内容、版权或其它问题请于作品发表后的30日内与ESG跨境电商联系。
二维码加载中...
使用微信扫一扫登录
使用账号密码登录
平台顾问
微信扫一扫
马上联系在线顾问
小程序
ESG跨境小程序
手机入驻更便捷
返回顶部