百度360必应搜狗淘宝本站头条
当前位置:网站首页 > IT知识 > 正文

使用Talos简化Kubernetes

liuian 2025-02-07 18:19 18 浏览

使用 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 集群

先决条件

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

  • 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'

让我们清理并删除集群

结论

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 提供额外支持?

  • Sidero Labs
  • CloudRaft 用于实施和支持。联系我们 以进一步讨论。

相关推荐

Springboot 整合 Websocket 轻松实现IM及时通讯

一、方案实践集成分为三步:添加依赖、增加配置类和消息核心类、前端集成。1.1、添加依赖<dependency><groupId>org.springframework...

SpringBoot扩展——应用Web Socket!

应用WebSocket目前,网络上的即时通信App有很多,如QQ、微信和飞书等,按照以往的技术来说,即时功能通常会采用服务器轮询和Comet技术来解决。HTTP是非持久化、单向的网络协议,在建立连接...

【Spring Boot】WebSocket 的 6 种集成方式

介绍由于前段时间我实现了一个库【SpringCloud】一个配置注解实现WebSocket集群方案以至于我对WebSocket的各种集成方式做了一些研究目前我所了解到的就是下面这些了(就一个破w...

SpringBoot生产级WebSocket集群实践,支持10万连接!

1、问题背景智慧门诊系统旨在从一定程度上解决患者面临的三长一短(挂号、看病、取药时间长,医生问诊时间短)的问题。实现“诊前、诊中、诊后”实时智能一体化,整合完善医院工作流程。围绕门诊看病的各个环节,让...

Spring Boot3 中 WebSocket 实现数据实时通信全解析

各位互联网大厂的开发同仁们,在如今的互联网应用开发中,实时通信功能越来越重要。比如在线聊天、数据推送、实时通知等场景,都离不开高效的实时通信技术。而WebSocket作为一种高效的双向通信协议,在...

Java WebSocket 示例(java nio websocket)

一、环境准备1.依赖配置(Maven)在pom.xml中添加WebSocket依赖:xml<!--SpringBootWebSocket--><dependen...

Spring Boot整合WebSocket:开启实时通信之旅

SpringBoot整合WebSocket:开启实时通信之旅今天咱们来聊聊SpringBoot整合WebSocket这件大事儿。说到实时通信,你是不是第一时间想到QQ、微信这些聊天工具?没错,We...

Spring Boot3 竟能如此轻松整合 WebSocket 技术,你还不知道?

在当今互联网大厂的软件开发领域,实时通信的需求愈发迫切。无论是在线聊天应用、实时数据更新,还是协同办公系统,都离不开高效的实时通信技术支持。而WebSocket作为一种能够实现浏览器与服务器之间持...

Spring Boot集成WebSocket(springboot集成websocket)

一、基础配置依赖引入<dependency><groupId>org.springframework.boot</groupId><artifactId>...

Springboot下的WebSocket开发(springboot websocket server)

今天遇到一个需求,需要对接第三方扫码跳转。一种方案是前端页面轮询后端服务,但是这种空轮询会虚耗资源,实时性比较差而且也不优雅。所以决定使用另一种方案,websocket。以前就知道websocket,...

springboot websocket开发(java spring boot websocket)

maven依赖SpringBoot2.0对WebSocket的支持简直太棒了,直接就有包可以引入<dependency><groupId>org....

Python界面(GUI)编程PyQt5窗体小部件

一、简介在Qt(和大多数用户界面)中,“小部件”是用户可以与之交互的UI组件的名称。用户界面由布置在窗口内的多个小部件组成。Qt带有大量可用的小部件,也允许您创建自己的自定义和自定义小部件。二、小部件...

实战PyQt5: 014-下拉列表框控件QComboBox

QComboBox简介QComboBox下拉列表框,是一个集按钮和下拉列表选项于一体的部件。QComboBox提供了一种向用户呈现选项列表的方式,其占用最小量的屏幕空间。QComboBox中的常用方法...

Python小白逆袭!7天吃透PyQt6,独立开发超酷桌面应用

PythonGUI编程:PyQt6从入门到实战的全面指南在Python的庞大生态系统中,PyQt6作为一款强大的GUI(GraphicalUserInterface,图形用户界面)编程框架,为开...

如何用 PyQt6 打造一个功能完善的 SQLite 数据库管理工具

如何使用PyQt6和qt_material库,打造一个功能完善的SQLite数据库管理工具,轻松管理和查询SQLite数据库。一、目标数据库连接与表管理:支持连接SQLite数据库...