云原生架构与 GitOps 实战
王炜
前腾讯云 CODING 架构师
5442 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 44 讲
云原生架构与 GitOps 实战
15
15
1.0x
00:00/00:00
登录|注册

35|秒级开发体验,如何实现容器热加载和一键调试?

你好,我是王炜。
在上一节课,我为你介绍了 GitOps 开发循环反馈变慢的原因以及三种解决方案。在这三种解决方案中,我推荐你使用远程开发的方式来加速开发循环反馈。
这节课,我们就来学习如何借助 Nocalhost 实现 Kubernetes 应用秒级的开发体验,提升开发循环反馈效率。
Nocalhost 是腾讯云 CODING 在 2020 年开源的项目,同时它也是云原生开发领域下第一个由国人主导并进入 CNCF Sandbox 的项目。
我有幸参与了 Nocalhost 从 0 到 1 的研发过程,也深知其工作原理。所以,这节课除了带你了解 Nocalhost 的基本使用以外,我还会带你深入了解它的工作模式和原理,让你更深刻地理解“远程开发”这种创新的开发模式。
在开始今天的学习之前,你需要做好下面这些准备。
按照第一章第 2 讲的内容在本地通过配置文件创建 Kind 集群,并在集群内安装好 Ingress-Nginx。
配置 Kubectl 使其能够访问 Kind 集群。

远程开发概述

说起远程开发,我相信有一些同学会想到 VS Code 的 SSH Remote。它利用了 VS Code 客户端和 Server 解耦的特性,让 VS Code Server 运行在远端的 VM,本地 VS Code 客户端只起到了 UI 展示和交互的作用,两者通过 SSH Tunnel 进行数据交互,它的工作原理如下图所示。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《云原生架构与 GitOps 实战》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(6)

  • 最新
  • 精选
  • ╭(╯ε╰)╮
    按网上和老师说的修改时间有几个问题 1 依赖镜像,不是所有的镜像都支持TZ="Asia/Shanghai",我们不想业务被镜像限制住 2 时区修改能精确到分钟吗,我们的定时器不一定是整点运行,可能是00:00:01、04:01:00这些分散的时间点,避免定时任务同一时刻集中触发 3 类似用户上线后给一个累计在线时长的小奖励,这种逻辑需要把时间向后调,这是跟着配置来的,根时区没关系。比如我们有5分钟、10分钟、半小时、1小时,以前qa重启4次改4次时间 5分钟就把所有情况都测完了。按老师说的改时区、我想不出来怎么弄。。。 2 qa肯定是不会用k8s的,让他们修改窗口的启动参数或者重新做个镜像也不现实,以前停服、改时间、重启没什么操作难度,1分钟就测好了。改了k8s,以前1分钟的工作要重新打包、上传镜像、重新运行、怎么看都要以10分钟为单位起算。这个成本公司不会接受。有没有即时生效、简单便捷的方法呢?

    作者回复: 总体的思考原则是,QA 测试的困难不能影响业务架构的升级和迁移,迁移的好处远远大于给测试带来的影响。 这种测试场景本身就比较复杂,我比较建议一并把这个测试流程改造成自动化测试进行,把复杂度内聚到测试程序里面。另一个解决思路是把定时器解耦到外部服务,而不依赖于容器的时间。 至于修改时间的问题,确实会有你提到的种种困难,不过也并不是没有解决方案,你可以看这个项目:https://github.com/wolfcw/libfaketime。它可以实现在单个容器里伪造任何你想要的时间,不过操作起来比较复杂,所以最好让 QA 把这部分测试逻辑改造成自动化。

    归属地:上海
    2
  • 黑鹰
    nocalhost-docker.pkg.coding.net/nocalhost/dev-images/golang 这个镜像拉取特别慢,国内网络和VPN 经常拉取失败。 Warning Failed 47m (x4 over 80m) kubelet Failed to pull image "nocalhost-docker.pkg.coding.net/nocalhost/dev-images/golang:latest": rpc error: code = Unknown desc = context deadline exceeded Warning Failed 47m (x4 over 80m) kubelet Error: ErrImagePull Warning Failed 46m (x5 over 76m) kubelet Error: ImagePullBackOff Normal Pulling 30m (x5 over 82m) kubelet Pulling image "nocalhost-docker.pkg.coding.net/nocalhost/dev-images/golang:latest" Normal BackOff 25m (x12 over 76m) kubelet Back-off pulling image "nocalhost-docker.pkg.coding.net/nocalhost/dev-images/golang:latest"

    作者回复: 可以换成 dockerhub 的 golang 镜像,只要有编译环境即可。

    归属地:北京
    1
  • 林龍
    请问一下,本篇文章中考虑到第28章的一个安全性的问题。28中我觉得一个观点让我受益匪浅就是持续集成工具不应该可以直接操作k8s,这也是gitops我觉得的核心,本篇文章是通过本地连接,一是考虑到k8s不应该外网访问,第二是不应该所有人(开发)都能操作k8s。

    作者回复: 生产环境是需要杜绝直连 K8s 集群的。开发环境为了提高开发效率可以考虑开放,并通过 IP 白名单的方式兼顾安全性。

    归属地:广东
    1
  • ╭(╯ε╰)╮
    请老师解决一个阻碍我们尝试kubernetes的疑惑 docker和k8s里怎么修改时间? 我们公司比较传统,开发好的功能由qa的同事测试,qa同事在自己的机器上部署应用,应用中的定时或延迟任务都是停服、修改本地时间然后重启测试。 比如有个凌晨12点的任务,qa停了自己的服,改下自己机器的时间到23:59:00,然后重启服务器,等一分钟到12点了看任务有没有成功执行。 网上搜索到的修改docker时间的方法就两个,一个是把系统时间相关的类库挂载到容器里,另一个是修改时区。这两个方法对我们的测试并不可用。极客时间的其他有关docker、kubernetes的专栏我也有订阅,但老师们都没有提到过这个问题,我很好奇难到大家都不用定时器的吗? 另外这节课里提到的Nocalhost也是同一个疑惑,我修改了一段定时器的触发逻辑,怎么在pod里修改时间然后测试是否正常触发了呢? 课程听到现在一直没有找到合适的地方提问,看课表这个专栏也快结束了,希望老师在结课前能指点一下我,让我们公司能在云原生开发从0到1

    作者回复: 你可以简单的把 Pod 理解为虚拟机就可以了,虚拟机怎么改时区和时间,在 Pod 里就怎么改。 比如,如果你的基础镜像是 Debian 或 CentOS,那么可以通过设置 TZ 环境变量来改时区,例如:TZ=Asia/Shanghai。 其次,还可以在构建容器镜像的时候通过修改 Dockerfile 也可以修改时区和时间,参考这个链接:https://dev.to/0xbf/set-timezone-in-your-docker-image-d22。

    归属地:上海
    1
  • bingo
    老师,使用nocalhost进行本地调试不知道什么原因内存飙升,idea关了内存还是降不下去,请问我该从哪些方面找找问题

    作者回复: 可能是 Nocalhost 本身的问题,IDEA 插件占用内存过高,VSCODE 插件性能会更好。

    归属地:吉林
  • ╭(╯ε╰)╮
    还有一个问题 网上搜到的一些说法,我在一个容器里修改时间,会影响到外面宿主主机。 如果我们用namespace把不同团队做隔离,但大家可能会被分配在一台node上吧,这样的话,一个人修改了自己的服务时间,会影响到其他人。自己的服务器跑着跑着莫名其妙的时间跳了,出来一堆bug。

    作者回复: 已回复~

    归属地:上海
    3
收起评论
显示
设置
留言
6
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部