使用 Talos 以简单的方式了解如何使用 Kubernetes 。
译自 Making Kubernetes Simple with Talos,作者 Ritesh。
今年,Kubernetes 随着 v1.30.0 版本的发布迎来了其十周年纪念日,巩固了其作为首选云平台的地位。EKS、GKS 和 AKS 等自管理 Kubernetes 集群占集群总数的 73%,其余 27% 为自管理,如 Dynatrace 所述。过去十年是公有云时代,但由于成本不断上升,一些企业正试图通过混合云找到平衡。根据 VMware 的说法,大约 76% 的组织现在利用多个云,即公有云和私有云的组合。Kubernetes 允许我们在所选硬件上构建多云和私有云层,并且以经济高效的方式构建,而无需承诺使用某个特定云。
尽管 Kubernetes 的采用率不断提高,但人们仍然关注成本效率、可靠性和安全性。从 Kubernetes 虚拟机过渡到裸机基础设施可通过消除管理程序层、简化故障排除流程和最大化应用程序的资源可用性来提供性能优势。裸机设置使组织能够完全控制硬件组件,从而针对特定工作负载进行定制优化。通过正确的工程实践和 Kubernetes 的集成,组织可以实现与公有云产品同等的功能。从历史上看,由于操作复杂性,特别是在管理集群生命周期方面,在裸机上运行 Kubernetes 构成了挑战。然而,这些障碍已随着 Talos 的引入而被克服,我们将在本文中进一步探讨。
Talos 是一个非常精简的操作系统,用 Golang 编写。Talos 被设计为一个特定于操作系统的操作系统,用于维护 Kubernetes 集群。为了使 Kubernetes 基础设施更可靠,我们需要确保每个节点运行相同版本的操作系统。Talos 可以通过添加 Talos 构建在其上的不可变理念来帮助我们保持 Kubernetes 基础设施的可靠性和一致性。
Talos 始终作为 SquashFS 映像运行,SquashFS 映像是 Linux 中的只读文件系统。Talos SquashFS 映像的总大小约为 80M。Talos 故意省略了 systemd、GNU 实用程序、控制台包、bash 或 SSH 二进制文件等组件,以最大程度地减少攻击面并降低安全漏洞的可能性。相反,它依赖于一个用于管理系统操作的现代 API。
Talos 仅包含所需内容。相反,所有内容都由一个现代 API 管理。Talos 非常注重不可变基础设施理念。
不可变基础设施一旦系统部署,你将无法对其进行任何更改;此概念称为不可变基础设施。如果在不可变基础设施中需要进行更改,则会创建一个具有所需修改的新基础设施,而不是更改现有基础设施。拥有不可变的基础设施使登台、预生产和生产环境更加一致。在裸机 k8s 基础设施上保持节点之间的一致性是最重要的。在这种类型的基础设施中,我们的应用程序与操作系统紧密耦合,这是不可变系统的缺点。
- Talos 在整个系统中保持一致性,并避免任何配置更改。Talos 将此称为“可预测性”。
- Talos 旨在使 Kubernetes 基础设施完全不可变,从而增强可靠性、安全性和一致性。这使得 Talos 成为运行 Kubernetes 的裸机服务器的理想选择。
- Talos 被设计为不可变的,因此它在 RAM 上运行,而不是在磁盘上运行。由于 Talos 是 SquashFS 映像,因此它具有较少的写入点,这些写入点本质上是短暂的。
- Talos 具有高度安全性。
- Talos 是一个非常轻量级的操作系统,大约有 12 个二进制文件,全部用于运行 Kubernetes。
- Talos 是 API 驱动的。
- Talos 遵循 KSPP(内核自保护项目)给出的建议 - KSPP 文档
Talos 非常适合自管理 Kubernetes 集群,但 CIVO 等平台提供使用 Talos 部署 Kubernetes 集群的支持。以下是使用 Talos 运行 Kubernetes 的一些用例。
要在边缘设备大规模集群中进行管理,Kubernetes 是最佳选择之一,因为它不仅可以设计用于容器编排,还可以有效地管理边缘设备。为了确保边缘应用程序的可靠性和安全性,拥有一个安全且可靠的 Kubernetes
在裸机上使用 Kubernetes 消除了不必要的抽象,使我们的应用程序能够完全控制硬件。Talos 是在裸机服务器上部署 Kubernetes 的绝佳选择。它消除了不必要的配置和故障排除,并使在裸机上部署 Kubernetes 变得容易。
Kubernetes 被证明是测试和训练新的机器学习模型的理想平台,能够无缝部署到更大规模的环境中。在部署中保持一致性对于确保安全稳定的模型部署至关重要。Talos 通过提供一致的环境,根据需求实现可靠的模型扩展,在此过程中发挥了关键作用。
Talos Architecture 由许多具有已定义 gRPC 界面的不同组件组成。所有 Talos 组件之间的通信都通过 gRPC 进行。
- EFI:存储 EFI 引导数据。
- BIOS:用于 GRUB 第二阶段引导。
- Boot:用于引导加载程序,存储 initramfs 和内核数据。
- Meta:存储有关 Talos 节点的元数据。
- State:存储机器配置。
- Ephemeral:挂载在 /var 上,用于存储临时数据。
Talos的文件系统有3层:
- rootfs:它是只读的核心squashfs层。然后将Squashfs作为循环设备挂载到内存中。
- tmpfs:此文件系统用于运行时特定需求。
- system:内部操作必需。
例如,Talos 将写入 /system/etc/hosts,然后将其绑定到 /etc/hosts 中。Talos 不会让 /etc 可写,而只让 /etc 的特定部分可写。/system 会在每次启动时完全重新创建。为了实现启动时持久化,Talos 创建了 overlay 的文件系统。Kubernetes 拥有 /var。此目录由 etcd 用于写入数据。我们添加 "--preserve" 选项来避免在升级时删除此数据,仅当机器升级或重置时才会删除此数据。
talosctl
是一个用于与 Talos 中所有组件交互的 CLI 工具。类似于我们使用 kubectl
与 kube-api 交互的方式,talosctl
用于与 apid 交互。
- apid:Talos 是 API 驱动的,
apid
负责提供 gRPC 终结点以与不同的组件交互。apid
在每个节点上都存在,包括控制平面。
Talos 架构
- machined:它负责处理来自 apid 的 API 请求,并进行资源和控制管理。
- trustd:它是一个守护进程,用于在系统中建立信任。它用于在节点之间建立信任。
- udevd:它用于在 /dev 中设置必需的链接。
- 资源:它们与 Kubernetes 中的资源类似,资源属于不同类型,并包含元数据,如命名空间、类型等。资源可通过其命名空间进行唯一标识。“机器配置”资源反映了当前的机器配置。
- 控制器:在 Talos 中,控制器作为线程运行。一个控制器可以管理多种资源类型,并且每种资源类型都可以有许多资源。为了避免冲突,只有一个控制器负责管理命名空间中特定资源类型。Talos 将为控制器定义的资源类型存储在 meta 命名空间中。
在这篇文章中,由于尚未提供裸机,我们将使用 Docker 来展示该功能。订阅我们的博客,因为我们计划在之后的文章中介绍如何在裸机上运行 Talos。我们将学习如何使用 Docker 创建 Kubernetes 集群。
在继续之前,请确保你已安装以下软件:
- Docker Engine
- Kubectl
- talosctl
注意:talosctl 和 Talos 操作系统 ISO 镜像版本应相同。有关更多信息,请查看发布信息。
Mac:
brew install siderolabs/tap/talosctl
Linux:
wget https://github.com/siderolabs/talos/releases/download/v1.7.0/talosctl-linux-amd64
chmod +x talosctl-linux-amd64
./talosctl-linux-amd64
sudo mv ./talosctl-linux-amd64 /usr/local/bin
使用 docker 和 talosctl 安装一个三节点集群。以下命令将创建一个 3 节点集群(controlplane、workernode-1、workernode-2)。
talosctl cluster create --workers 2
让我们检查一下创建的节点数以及操作系统信息
kubectl get nodes -o wide
kubectl get node talos-default-worker-1 -o json | jq -r '.status.nodeInfo.osImage'
让我们清理并删除集群
talosctl cluster destroy
Talos 在管理 Kubernetes 环境中发挥着至关重要的作用。它的简单性极大地简化了 Kubernetes 集群的配置。Talos 的不可变理念极大地增强了基础设施的安全性与一致性。
Talos 与 k3s 之间没有直接比较。但是,在考虑部署 Kubernetes 集群时,k3s 需要一个操作系统,并且具有其他依赖项,这些依赖项根据底层操作系统而异。而 Talos 的重点是使用其不可变理念运行 Kubernetes 集群,从而保持其安全性和可靠性。Talos 使 Kubernetes 部署变得更加简单。
- Talos 中的
init
二进制文件负责运行 kubelet 和容器运行时。 - Containerd 是 Talos 中的运行时,以及 runc。
- Modprobe 用于为某些二进制文件加载模块。模块可以添加到 Talos,或者我们可以使用 Image Factory 中预先构建的模块。
- 对于卷管理,使用 lvm。
- udevd 用于从内核收集消息并将其传递给其他系统。
- xfs_repair 等二进制文件用于修复 XFS 文件系统。
Talos 是一个免费且开源的操作系统,受 Mozilla 公共许可证版本 2.0 约束,允许商业使用。在 Talos Github 存储库 中查看更多信息。
Talos 使 Kubernetes 环境更加安全可靠。众所周知,Talos 适用于 Kubernetes 等分布式系统,如果您希望您的 Kubernetes 环境更加安全可靠,则应该使用 Talos。
如果您希望在裸机上配置 Kubernetes,Talos 是理想的选择。敬请关注,了解如何在裸机上部署 Talos,订阅我们的帖子或直接联系我们以进一步讨论此事。
- Sidero Labs
- CloudRaft 用于实施和支持。联系我们 以进一步讨论。