如何通过 Kubernetes 管理不可变基础设施
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何通过 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
以上是关于如何通过 Kubernetes 管理不可变基础设施的主要内容,如果未能解决你的问题,请参考以下文章
#yyds干货盘点# Kubernetes 是如何搞定“不可变基础设施”的?(04)
Kubernetes in Action 笔记 —— Kubernetes 介绍