如何通过 Kubernetes 管理不可变基础设施
作者
王海龙,SUSE Rancher 中国社区技术经理,Linux Foundation APAC Evangelist,负责 Rancher 中国技术社区的维护和运营。拥有 8 年的云计算领域经验,经历了 OpenStack 到 Kubernetes 的技术变革,无论底层操作系统 Linux,还是虚拟化 KVM 或是 Docker 容器技术都有丰富的运维和实践经验。
本文整理自王海龙在 SUSECON 北京 2022 开源技术峰会上的主题演讲。
本文主要介绍如何通过 Kubernetes 在边缘设备上部署和管理操作系统,然后将这些边缘设备组建成一个 Kubernetes 集群,最后统一接入到 Rancher 中进行管理。
云原生技术的基础定义
云原生相信大家已经非常了解了,上图是 CNCF 对云原生的定义,也列出了云原生的代表技术,其中容器、服务网格、微服务、声明式 API 这些技术,相信大家都已经非常熟悉。
其中一项叫不可变基础设施,这个概念并不常见,用起来和我们传统方式有些冲突,有时候大家可能会感觉别扭,我们就从不可变基础设施谈起。
Mutable vs Immutable
先来对比一下可变和不可变,也就是 Mutable 和 Immutable。
从基础设施角度来看,Mutable 更倾向于我们传统的运维视角,其实就是一个 update in-place,即在原地更新这样的理念,比如:您原来的主机上安装了 apache2,上面部署了业务,想换成 nginx,需要先卸载掉 apache2 服务,然后再重新安装一个 nginx,可能也需要重启服务或者系统来让这次变更生效。这个过程,您的基础设施为了满足业务需求,进行了一次或者多次变更,实际上它就是一个可变的基础设施。
Immutable 的核心思想是任何基础设施的实例一旦创建之后变成为只读状态,如需修改和升级,则使用新的实例进行替换。如果您有新的变更需求,就应该去准备(provision)一个新的基础设施,而不是说在原来的基础上做一个本地的更新。
最大的区别,就是原来的 Mutable 人工干预的比较多,需要靠人工去操作系统里进行各种更改。Immutable 的话,更偏向自动化,您已经预先把基础设施及其依赖都定义好了,这时只需要去触发新的变更就可以完成变更。这里并不涉及到去更改原始的基础设施,这对于基础设施来说,就变成不可变的了。
介绍完这两种理念,大家应该立刻想到了容器技术。您可以构建一个镜像,然后在镜像的基础上去部署业务。如果出现问题,我们不会去容器里去做变更,而是从容器构建阶段去解决问题。所以从容器的角度,镜像就是一个不可变的基础设施。容器技术出现后,Immutable 就变得非常直观,也出现了类似 OCI Image 这样的规范。
Immutable 不只存在于容器领域,也逐渐下沉到了操作系统的层面,Immutable OS 也借助 Container 的理念,形成了许多 Container OS,比如:RancherOS,K3os,CoreOS。这些 OS 的理念,都是从这个角度衍生出来的。
Elemental-toolkit:提供 Container based OS 的自定义能力
我们之前在使用操作系统的时候,很少自己构建;就算有特殊需求需要构建操作系统,我们自定义的内容也不会特别多。
既然是 Container OS,那就应该像容器一样,能够交付给用户一个充分自定义能力的操作系统。所以我们做了一个叫 Elemental-toolkit 的工具,来让用户自己去构建一个自定义的 Container OS。
这个工具有两个非常重要的特点:
可以使用 Dockerfile 定义操作系统,就像写原始的 docker images 那样。Elemental-toolkit 可以基于您写的 dockerfile 来去构建一个操作系统。这并不是一个简单的镜像,而是一个操作系统,这里面有内核、rootfs,还有您加的软件包。
为了和 OCI Image 的理念整合,所以这个操作系统是可以使用 OCI Image 去做分发;也就是说您构建出来的操作系统,可以上传到 dockerhub。升级的时候,就直接到 dockerhub 去拉这个镜像,然后自动到您的操作系统上安装。也就是说您运维操作系统和运维容器没什么区别。
使用 Kubernetes 管理边缘基础设施
Elemental-toolkit 可以构建一个自定义的基础操作系统,然后就可以借助 Kubernetes 能力来去管理边缘基础设施。当然,还需要借助一些工具才能实现:
RancherD:其实就是一个部署工具,可以实现自定义部署 Rancher/k3s/rke2。RancherD 可以封装到由 Elemental-tools 构建的操作系统里,这样启动操作系统之后就会自动创建 K3s 集群。
RancherOS Operator:可以实现自动注册节点到集群,然后批量升级和管理操作系统的版本等一些功能。我们可以通过 RancherOS Operator 来管理这些不可变的基础设施,也就是由 Elemental-toolkit 构建的这些不可变的操作系统。
Demo:通过 Kubernetes 在边缘设备上安装和管理 OS
下面我们将通过 Demo 来给大家介绍如何通过 Kubernetes 在边缘设备上安装操作系统,如何通过 Kubernetes 在边缘设备上管理和升级操作系统。这个 Demo 分为几个核心阶段:
- RancherOS Operator 安装和设置
- 构建引导 ISO 映像
- 创建下游集群
- 将 OS 安装到节点,并添加到集群
- 更新 OS
项目地址:https://github.com/rancher-sandbox/rancher-node-image
具体现场 Demo 内容,请参见本视频:https://www.bilibili.com/video/BV1NG4y1r75V/?spm_id_from=333.999.0.0

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
SQLAuto 开源,智能零代码数据库功能测试工具
腾讯 APIJSON 又一个生态周边项目 SQLAuto 开源啦~ SQLAuto-智能零代码数据库功能测试工具 ☔智能零代码测试 SQL、任意增删改查、任意 SQL 模板变量、一键批量生成 本项目前端工具是基于APIAuto改造的纯静态 SPA 网页,下载源码解压直接浏览器打开。 后端需要部署 APIJSON-Demo 5.2.5+ 的 APIJSONBoot-MultiDataSource。 感谢开源 jsonon editor.md vue.js 技术交流 关于作者 如果有什么问题或建议可以提ISSUE,交流技术,分享经验。 如果你解决了某些bug,或者新增了一些功能,欢迎贡献代码,感激不尽。 其它项目 APIJSON腾讯零代码、全功能、强安全 ORM 库🏆后端接口和文档零代码,前端(客户端) 定制返回 JSON 的数据和结构 APIAuto敏捷开发最强大易用的 HTTP 接口工具,机器学习零代码测试、生成代码与静态检查、生成文档与光标悬浮注释 UnitAuto机器学习单元测试平台,零代码、全方位、自动化 测试 方法/函数 的正确性和可用性 APIJSON.NETC# 版 AP...
- 下一篇
探索智能化测试技术
摘要:随着软件迭代模式的不断发展,测试环节的自动化程度也得到了有效的、持续的提升,智能化测试是结合AI算法和测试数据对测试多个环节进行针对性的优化。 本文分享自华为云社区《【智能化测试专题】智能化测试技术探索》,作者: DevAI。 1. 发展阶段 测试是评估和验证输入是否能得到符合预期输出的过程。测试包含了软件测试和硬件测试。测试的早期萌芽是在20世纪50年代,主要是以调试为主,验证程序是否符合预期。1957年Charles Baker在《软件测试发展》中将测试和调试区分开来,提出了测试的概念,指出测试的目的不仅仅是验证还需要确认软件是否满足要求。1983年IEEE首次召开了软件测试的技术会议,并给出了软件测试的定义。IEEE定义的软件测试明确指出测试的目的是为了检验软件是否满足需求,它是一门需要经过设计、开发和维护等完整阶段的过程。随着软件研发模式从瀑布模式到敏捷模式再到DevOps(其各环节流程如图1所示),DevOps注重Dev、Ops和QA(Tester)之间的协同合作,因此为了达到产品质量的持续改进,对测试环节流程自动化与持续进行都提出了更高的要求。 图1. DevOps流...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Linux系统CentOS6、CentOS7手动修改IP地址
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- Docker安装Oracle12C,快速搭建Oracle学习环境
- CentOS7安装Docker,走上虚拟化容器引擎之路
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- CentOS关闭SELinux安全模块
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- Hadoop3单机部署,实现最简伪集群
- CentOS6,7,8上安装Nginx,支持https2.0的开启