快速了解k3s和Kubernetes的Mender更新模块

2020-05-29 08:06:39

大家都知道Kubernetes,这是一个用于自动化应用程序部署、扩展和管理的开源容器编排系统。随着时间的推移,自动化云中基于容器的工作负载的部署、扩展和操作正在成为事实上的标准。云本地计算基金会(CNCF)负责认证Kubernetes发行版,以提供跨不同云刀片和内部部署安装的兼容环境。

最有趣的Kubernetes发行版之一是Rancher的k3,这是一个专门为物联网和边缘计算构建的经过认证的轻量级Kubernetes发行版。仍然保留了完全的Kubernetes兼容性和令人印象深刻的特性集,提供k3的单个二进制代码不到40MB,并且在ARM64和ARMv7上都可用。

K3S使物联网和边缘计算工程师能够使用Kubernetes宣言文件(描述所需部署状态的YAML文件集合)在其设备群中部署和管理基于容器的应用程序,以描述其应用程序工作负载。它是一种面向未来、功能更丰富、表现力更强的替代方案,可以使用Docker-Compose(接近Docker世界的开发人员使用的无处不在的工具)在现场管理集装箱化的应用程序。

默认情况下,它使用sqlite3数据库作为轻量级后端存储。它可以选择支持其他后端存储,即etcd、MySQL和PostgreSQL,这些后端存储不太适合嵌入式IoT和Edge设备,因此它们不在本文的讨论范围内。

关于命名的好奇心:我们将Kubernetes缩写为K8s(k和s中间有8个字母,使其成为一个10个字符的单词)。在开发k3时,Rancher的目标是创建一个Kubernetes发行版,该发行版可以用运行股票Kubernetes所需的一半资源来运行。因为10的一半是5,所以他们将k3s命名为k3s(k和s中间有三个字母,使其成为一个五个字符的单词)。不过,没人知道中间的三个字母是什么。:)。

在小到Raspberry PI或大到在云中运行的32CPU虚拟服务器的设备上安装k3,只需执行以下命令:

$curl-sfl https://get.k3s.io|sh-[INFO]查找频道稳定版本[INFO]使用v1.18.2+k3s1作为版本[INFO]下载散列https://github.com/rancher/k3s/releases/download/v1.18.2+k3s1/sha256sum-amd64.txt[INFO]下载二进制https://github.com/rancher/k3s/releases/download/v1.18.2+k3s1/k3s[INFO]验证二进制下载[INFO]将k3s安装到/usr/local/bin/k3s[INFO]创建/。usr/local/bin/kubectl指向k3s的symlink[info]创建/usr/local/bin/crictl指向k3s的symlink[info]创建/usr/local/bin/ctr指向k3s的symlink[info]创建KILLALL脚本/usr/local/bin/k3s-kill all.sh[info]创建卸载脚本/usr/local/bin/k3s-uninstall.sh[info]env:创建环境文件/etc/。k3s unit创建symlink/etc/systemd/system/multi-user.target.wants/k3s.service→/etc/systemd/system/k3s.service。[信息]systemd:启动k3s。

在不到一分钟的时间内,我们的单节点Kubernetes集群就可以运行我们的容器了。我们可以使用常用的Kubernetes kubectl CLI获取Pod列表,Pod是您可以启动的最小可部署计算单元,运行:

Mainder是我们针对物联网设备的强大、安全的空中软件更新器。我们通过Kubernetes Update模块支持运行在Kubernetes(包括k3s)上的集装化工作负载的安装和升级。

尝试Mender OTA平台的最简单方式是注册托管服务。Mender Starter计划免费提供三个月的评估期。

首先,让我们定义一个样例应用程序工作负载,它通过创建文件nginx-ployment ment.yaml来运行常用的nginx Docker映像,如下所示:

apiVersion:apps/v1Kind:DeploymentMetadata:Name:nginx-ployment mentspec:selector:matchLabels:app:nginx plicas:1 template:Metadata:Labels:app:nginx spec:Containers:-Name:nginx image:nginx:1.14.2 ports:-tainerPort:80。

现在,我们可以使用k8s-artiject-gen实用程序从上面定义的Kubernetes清单文件生成一个Mender工件,我们将能够使用Mender OTA平台部署该工件:

$wget https://raw.githubusercontent.com/mendersoftware/mender-update-modules/master/k8s/module-artifact-gen/k8s-artifact-gen$chmod 775 k8s-artiject-gen$./k8s-artiject-gen\-n nginx-sample-app\-t device_type\-o nginx-sample-app.mender\-o nginx-sample-app.mender已成功生成:修补程序artiject:名称:nginx-sample-app格式:修补程序版本:3签名:无签名兼容设备:';[设备类型]。提供组:依赖于以下项目之一:[]依赖于以下组之一:[]状态脚本:更新:0:类型:K8S提供:无依赖:无元数据:无文件:名称:nginx-deployment.yaml大小:316Modified:2020-05-27 06:17:57+0200CEST Checksum:529d78bd4aac18e2343426fa6267960a74f3c5a450ab04f32c4acd42efb9bdfe。

请注意:您必须将字符串DEVICE_TYPE替换为您为自己的设备设置的设备类型,例如Beaglebone或raspbercrypi3。有关设置设备类型的更多信息,请参阅Mender官方文档。

文件nginx-sample-app.mender是Mender工件,它嵌入了Kubernetes清单文件,您可以使用Mender OTA平台将其部署到您的k3S设备中。

您可以使用Mender用户界面或使用Mender-cli上载工件,运行:

$mender-cli login--服务器https://hosted.mender.io--用户名您的@email.com密码:*登录成功$mender-cli工件上传nginx-https://hosted.mender.ioProcessing-app.mender--服务器示例上传的文件。这可能需要大约一分钟时间。上载成功。

要在运行Kubernetes的设备上部署和升级Kubernetes清单,您需要安装Mender客户端。您可以按照我们文档页面中的说明安装Mender客户端。

我们将使用K8s更新模块来部署我们的应用程序工作负载,在Mender行话中描述为应用程序更新。由于完整的系统更新超出了本文的范围,我们可以很容易地使用Debian包安装Mender客户端,如使用Debian包文档页面安装Mender中所述。

一旦安装并验证了Mender客户端,就安装了Mender客户端并对其进行了身份验证,以便连接到我们的Mender服务器,无论是内部部署的还是我们托管的Mender服务。我们已准备好在设备上安装K8S更新模块:

此时,我们可以从Mender图形用户界面为我们的设备创建部署,并且Mender客户端将使用K8s Update模块应用Kubernetes清单文件。

在内部,K8s Update模块使用kubectl CLI来应用捆绑在Mender工件中的声明文件。

$kubectl获取部署名称就绪最新可用AGEnginx-Deployment 1/1 1 74s$kubectl获取PodsNAME就绪状态重新启动AGEnginx-Deployment-6b474476c4-kzq66 1/1运行0 83s

容器在嵌入式世界中获得了很大的吸引力。在物联网和边缘设备中部署容器化应用程序的最常见、最广为人知的方法是直接使用Docker或使用Docker-Compose。不过,Kubernetes对于这样的用例来说是一个有价值的替代方案,在这些用例中,尽管资源有限,但是完整的容器协调器可以为开发人员提供一个有状态的环境来运行平台无关的工作负载。