Kubernetes 无处不在—— 开发人员正在笔记本电脑、Raspberry Pi、云、数据中心、混合云甚至多个云上部署Kubernetes。它是现代基础设施的基础,抽象了底层的计算、存储和网络服务。 Kubernetes 隐藏了不同基础设施环境之间的差异并支持多云。
Kubernetes也成为编排的通用控制平面,不仅包括容器编排,还包括虚拟机、数据库甚至SAP Hana实例等各种资源。
尽管Kubernetes 正在快速发展,但它仍然给开发人员和运维人员带来了许多挑战。关键挑战之一是在边缘运行Kubernetes。与云或数据中心相比,边缘有很大不同。这是在高度受限的环境中的远程位置执行的。与数据中心中运行的类似设备相比,边缘设备只拥有一小部分计算、存储和网络资源。边缘设备与云的连接是间歇性的,并且主要在离线环境中运行。这些因素使得在边缘部署和管理Kubernetes 集群变得困难。
在此基础上,业界最广泛使用的K8S 管理平台的创建者Rancher Labs 发布了K3s,这是一种针对边缘高度优化的Kubernetes 发行版。 K3s 是Kubernetes 的简化迷你版本,但API 一致性和功能保持不变。从kubectl 到Helm 再到Kubernetes,您可以将几乎任何云原生生态系统工具无缝连接到K3。事实上,K3s 是一个经过CNCF 认证且兼容的Kubernetes 发行版,可以部署在生产环境中。几乎所有运行完整Kubernetes 集群的工作负载都保证在K3s 集群上运行。
Kubernetes 这个由10 个字母组成的单词被社区称为K8S。由于K3s 恰好是Kubernetes 内存的一半,Rancher 找到了一个五个字母的单词来代表新的发行版,并将其缩写为K3s。
深入了解K3s架构
K3 的美妙之处在于它的简洁。打包并部署为单个二进制文件(大约100MB),您可以在几秒钟内构建一个成熟的Kubernetes 集群。安装就像在集群中的每个节点上运行脚本一样简单。
K3s 二进制文件是自治的封装实体,运行Kubernetes 集群的几乎所有组件,包括API 服务器、调度程序和控制器。默认情况下,所有K3s 安装都包含足够的控制平面、kubelet 和containerd 运行时来运行Kubernetes 工作负载。当然,您还可以添加仅运行kubelet 代理和containerd 运行时的专用工作节点来调度和管理pod 的生命周期。
与传统的Kubernetes 集群相比,K3 中主节点和工作节点没有明显区别。 Pod 可以在任何节点上进行调度和管理,无论其角色如何。因此,主节点和工作节点的命名方案不适用于K3S 集群。
在k3s 集群中,运行控制平面组件和kubelet 的节点称为服务器,仅运行kubelet 的节点称为代理。服务器和代理都有容器运行时和kubeproxy 来管理集群中的隧道和网络流量。
典型的k3s 环境运行一个服务器和多个代理。当您在安装期间传递服务器URL 时,节点将成为代理。否则,您将运行一个单独的、独立的k3s 集群,并拥有自己的控制平面。
那么Rancher 如何减少k3s 上的内存呢?首先,我们删除了运行最小集群不需要的许多Kubernetes 可选组件。接下来,添加几个必需的元素:containerd、Flannel、CoreDNS、CNI、Traefik Ingress 控制器、本地存储过程、内置服务负载均衡器和统一网络策略控制器。所有这些组件都打包成二进制文件并在同一进程中运行。除此之外,该发行版还支持开箱即用的Helm 图表。
上游Kubernetes 发行版臃肿且有大量可以删除的代码。例如,存储卷插件和云提供商API 可以显着增加您的发行版的内存。 K3s 忽略了所有这些以最小化二进制大小。
另一个重要的区别是集群状态的管理方式。 Kubernetes 依赖分布式键/值数据库etcd 来存储整个集群的状态。 K3s 用一个名为SQLite 的轻量级数据库取代了etcd,这是一个成熟的内置场景数据库。许多移动应用程序捆绑SQLite 来保存状态。
在至少三个节点上运行etcd 可以使Kubernetes 控制平面具有高可用性。另一方面,SQLite 不是分布式数据库。为了实现控制平面高可用性,K3 服务器可以指向外部数据库端点。支持的数据库包括etcd、MySQL 和PostgreSQL。通过有效地将状态委托给外部数据库,K3s 支持多个控制平面实例并提高集群可用性。
Rancher 正在试验名为DQLite 的SQLite 分布式版本,它最终可能成为K3 的默认数据存储。
K3s最大的优势在于其“自带电池但可更换”的做法。例如,您可以将containerd运行时替换为Docker CE运行时,将Flannel替换为Calico,将本地存储替换为Longhorn。
要了解有关K3s 架构的更多信息,我们强烈建议观看K3s 架构师Darren Shepherd 在北美KubeCon 2019 上的演讲。
K3s部署场景和拓扑结构
K3s 发行版支持多种架构,包括AMD64、ARM64 和ARMv7。凭借一致的安装体验,K3 可以在Raspberry Pi Zero、NVIDIA Jetson Nano、Intel NUC 或Amazon EC2 a1.4xlarge 实例上运行。
对于需要单节点Kubernetes 集群来维护相同的清单部署工作流程的环境,请在服务器或边缘设备上安装K3。这使您可以灵活地将现有的CI/CD 管道和容器映像与Helm 图表和YAML 文件结合使用。
如果您希望在AMD64 或ARM64 架构上运行高可用集群,请安装三节点etcd 集群,然后安装三台K3 服务器和一个或多个代理。这提供了生产级环境并为控制平面提供高可用性。
当您在云中运行K3s 集群时,您将服务器指向Amazon RDS 或Google Cloud SQL 等托管数据库,以运行具有多个代理的高可用控制平面。每个K3s 服务器都可以在不同的可用区中运行,以最大限度地延长正常运行时间。
如果您在具有可靠的始终在线连接的边缘计算环境中运行K3,请在云中运行服务器并在边缘运行代理。这使您可以灵活地在远程环境中运行代理,同时在云中运行高度可用且易于管理的控制平面。
最后,您可以在5G 边缘位置(例如AWS Wavelength 或Azure Edge Zones 环境)部署K3s HA 控制平面,同时在设备内运行代理。该拓扑反映了智能建筑、智能工厂和智能医疗场景。
原创文章,作者:小条,如若转载,请注明出处:https://www.sudun.com/ask/83488.html