使用Talos简化Kubernetes

使用 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 的好处

  1. Talos 在整个系统中保持一致性,并避免任何配置更改。Talos 将此称为“可预测性”。
  2. Talos 旨在使 Kubernetes 基础设施完全不可变,从而增强可靠性、安全性和一致性。这使得 Talos 成为运行 Kubernetes 的裸机服务器的理想选择。
  3. Talos 被设计为不可变的,因此它在 RAM 上运行,而不是在磁盘上运行。由于 Talos 是 SquashFS 映像,因此它具有较少的写入点,这些写入点本质上是短暂的。
  4. Talos 具有高度安全性。
  5. Talos 是一个非常轻量级的操作系统,大约有 12 个二进制文件,全部用于运行 Kubernetes。
  6. Talos 是 API 驱动的。
  7. Talos 遵循 KSPP(内核自保护项目)给出的建议 -KSPP 文档

用例

Talos 非常适合自管理 Kubernetes 集群,但CIVO等平台提供使用 Talos 部署 Kubernetes 集群的支持。以下是使用 Talos 运行 Kubernetes 的一些用例。

1. 边缘应用程序:

要在边缘设备大规模集群中进行管理,Kubernetes 是最佳选择之一,因为它不仅可以设计用于容器编排,还可以有效地管理边缘设备。为了确保边缘应用程序的可靠性和安全性,拥有一个安全且可靠的 Kubernetes

2. 裸机上的 Kuberntes:

在裸机上使用 Kubernetes 消除了不必要的抽象,使我们的应用程序能够完全控制硬件。Talos 是在裸机服务器上部署 Kubernetes 的绝佳选择。它消除了不必要的配置和故障排除,并使在裸机上部署 Kubernetes 变得容易。

3. AI & 机器学习工作负载:

Kubernetes 被证明是测试和训练新的机器学习模型的理想平台,能够无缝部署到更大规模的环境中。在部署中保持一致性对于确保安全稳定的模型部署至关重要。Talos 通过提供一致的环境,根据需求实现可靠的模型扩展,在此过程中发挥了关键作用。

架构和设计

Talos Architecture 由许多具有已定义 gRPC 界面的不同组件组成。所有 Talos 组件之间的通信都通过 gRPC 进行。

Talos 文件系统分区

  • EFI:存储 EFI 引导数据。
  • BIOS:用于 GRUB 第二阶段引导。
  • Boot:用于引导加载程序,存储 initramfs 和内核数据。
  • Meta:存储有关 Talos 节点的元数据。
  • State:存储机器配置。
  • Ephemeral:挂载在 /var 上,用于存储临时数据。

Talos的文件系统有3层:

  1. rootfs:它是只读的核心squashfs层。然后将Squashfs作为循环设备挂载到内存中。
  2. tmpfs:此文件系统用于运行时特定需求。
  3. 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 命名空间中。

Demo

在这篇文章中,由于尚未提供裸机,我们将使用 Docker 来展示该功能。订阅我们的博客,因为我们计划在之后的文章中介绍如何在裸机上运行 Talos。我们将学习如何使用 Docker 创建 Kubernetes 集群。

设置 Docker 和 Talos 集群

先决条件

在继续之前,请确保你已安装以下软件:

注意: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'

让我们清理并删除集群

结论

Talos 在管理 Kubernetes 环境中发挥着至关重要的作用。它的简单性极大地简化了 Kubernetes 集群的配置。Talos 的不可变理念极大地增强了基础设施的安全性与一致性。

常见问题解答

Talos 与 k3s

Talos 与 k3s 之间没有直接比较。但是,在考虑部署 Kubernetes 集群时,k3s 需要一个操作系统,并且具有其他依赖项,这些依赖项根据底层操作系统而异。而 Talos 的重点是使用其不可变理念运行 Kubernetes 集群,从而保持其安全性和可靠性。Talos 使 Kubernetes 部署变得更加简单。

Talos 包含哪些二进制文件?

  • Talos 中的init二进制文件负责运行 kubelet 和容器运行时。
  • Containerd 是 Talos 中的运行时,以及 runc。
  • Modprobe 用于为某些二进制文件加载模块。模块可以添加到 Talos,或者我们可以使用Image Factory中预先构建的模块。
  • 对于卷管理,使用 lvm。
  • udevd 用于从内核收集消息并将其传递给其他系统。
  • xfs_repair 等二进制文件用于修复 XFS 文件系统。

Talos 是否免费?

Talos 是一个免费且开源的操作系统,受 Mozilla 公共许可证版本 2.0 约束,允许商业使用。在Talos Github 存储库中查看更多信息。

为什么要使用 Talos?

Talos 使 Kubernetes 环境更加安全可靠。众所周知,Talos 适用于 Kubernetes 等分布式系统,如果您希望您的 Kubernetes 环境更加安全可靠,则应该使用 Talos。

我们可以在裸机上运行 Talos 吗?

如果您希望在裸机上配置 Kubernetes,Talos 是理想的选择。敬请关注,了解如何在裸机上部署 Talos,订阅我们的帖子或直接联系我们以进一步讨论此事。

谁为 Talos 提供额外支持?

本文在云云众生https://yylives.cc/)首发,欢迎大家访问。

RustDesk 由于诈骗猖獗,暂停国内服务 Apple 发布 M4 芯片 淘宝 (taobao.com) 重启网页版优化工作 高中生自创开源编程语言作为成人礼——网友锐评:依托答辩 云风从阿里离职,未来计划制作 Windows 平台的独立游戏 程序员的归宿 Visual Studio Code 1.89 发布 Java 17 是最常用的 Java LTS 版本 Windows 10 市场份额达 70%,Windows 11 持续下滑 开源日报 | 谷歌扶持鸿蒙上位;开源Rabbit R1;Docker加持的安卓手机;微软的焦虑和野心;海尔电器把开放平台关了
{{o.name}}
{{m.name}}

猜你喜欢

转载自my.oschina.net/u/6919515/blog/11105497