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.