Kubernetes 环境下极致开发体验-实时热加载和一键调试
如果无法正常显示,请先停止浏览器的去广告插件。
1. Kubernetes 环境下极致开发体
验:实时热加载和一键调试
王炜
腾讯云 CODING 高级架构师/Nocalhost 研发负责人
2.
3. 自我介绍
王炜
CNCF 大使
《Istio Handbook》作者之一、《Spinnaker 实战:云原生多
云环境的持续部署方案》作者
Nocalhost 项目负责人
4. • 在开发/测试/生产环境已经使用
• 认为在
K8s?
K8s 环境下应用开发和调试很难?
5. • K8s 环境开发困局
主流云原生开发方式
热加载原理
开发和调试演示
开源共建
• 展望和规划
•
•
•
•
6. 一、K8s 环境开发困局
7. K8s 环境的开发困境
微服务-Docker
Docker-Kubernetes
微服务越来越多,运行环境变复杂。服务依赖、打包、运行、迁移越来越难。 微服务越来越多,运行环境变复杂。服务依赖、打包、运行、迁移越来越难。
Docker 提供镜像打包的解决方案。 Kubernetes 提供容器编排的解决方案。
8. 面向运维提供能力
开发难
概念繁多,学习成本高
调试难
很难像本地一样调试
面向运维提供能力
9. 技能要求急剧提升
10. 技能要求急剧提升
11. 云原生开发工具依然缺失
12. 二、主流云原生开发方式
13. 主流的云原生开发方式
手动 自动 Minikube + Telepresence 编码后,手动构建镜像、推送到镜像仓 编码后,推送到代码仓库,自动触发 Minikube 拉起本地 K8s 开发环境, 云上 K8s 集群提供计算资源解决弹性的
库、修改工作负载镜像版本,调度 CI/CD 流程,等待生效。 Telepresence 实现本地编码。 问题,Telepresence 本地编码。
10 分钟/次 5 分钟/次 10 秒钟/次 10 秒钟/次
云 + Telepresence
14. 网络打通的局限性
环境差异
工作负载声明了 env、configmap、secret、volume 等,很难在本地复制出完全一致的
环境。
跨平台差异
全量代理的方式会使得网络拓扑产生变化,导致内网、公网访问无法达到预期。
网络限制
即便是能够将远端的 env、configmap 挂载到本地,也难以屏蔽跨平台之间的差异。
15. 如何获得近乎本地开发的体验
无需重新构建镜像
本地编码实时生效
复用集群网络
容器应用热加载
16. 三、实现容器应用热加载
17. 容器应用热加载-从 Dockerfile 说起
Dockerfile CMD 或 ENTRYPOINT 定义容器启动命令
对应容器 PID=1 的进程
18. 容器应用热加载-从 Dockerfile 说起
go run main.go
19. 容器应用热加载-从 Dockerfile 说起
源码哪里来 本地同步到容器
编译环境哪里来 将容器镜像替换为开发镜像
20. 容器应用热加载-从 Dockerfile 说起
21. Nocalhost-进入开发模式
= No Localhost
本地同步到容器
将容器镜像替换为开发镜像
22. Nocalhost
23. Nocalhost Server
隔离开发环境
统一管理开发资源
24. Nocalhost IDE 插件
编码热加载
一键 Debug
VSCode & Jetbrains
25. 四、Nocalhost 开发和调试演示
26.
27. 原理解析
•
1. 替换容器镜像为开发镜像,提供编译环境
* 继承 configmap、env、volume 挂载等配置
* 替换容器 PID=1 的进程为阻塞进程,防止容器 Crash
• 2. 增加文件同步的 Sidecar,实现本地和容器源码同步
• 3. 在 IDE 内自动获取远端容器 Terminal,方便启停进程
28. 五、开源共建和展望
29. 开源共建
•
•
nocalhost.dev
github.com/nocalhost/nocalhost
30. 展望
• 休眠模式,节约成本
• VCluster 虚拟集群
• 环境复制
31. 总结
• 使用 Nocalhost IDE 插件解决开发循环反馈慢的问题
• 使用 Nocalhost Server 解决云原生环境统一管理问题
• Nocalhost Server + IDE 插件组成云原生开发环境解决方案
• 推荐实践:定义环境而不是维护环境
32.
33.