去指挥你的舰队吧!体验使用 Fleet 批量管理 K8S 集群

简介: 体验 Fleet 是怎么管理海量 Kubernetes 集群的。

前言

2020年4月3日,Rancher Labs 宣布推出全新开源项目 Fleet,致力于为用户提供海量 Kubernetes 集群的集中管理体验。

最早听说到这个消息时,我还是很疑惑的,Fleet 不是 CoreOS 早已经停止维护的一个项目吗?怎么又和 Rancher Labs 扯上了关系?

“为用户提供海量 Kubernetes 集群的集中管理体验”这句话是否言过其实:

  • “海量”这个量到底有多大?
  • 又有多少公司或团队有管理海量的 Kubernetes 集群的需求?
  • 又是怎么一个集中管理法?

带着这些疑问,我仔细了解了一下 Fleet 这个开源项目。

Fleet

首先,这里的 Fleet 是一个新项目,起这个名字应该算是一种致敬,经过了解后我个人觉得这个名字起的还是挺贴切的,比一大波 KubeXXX 有创意多了。

“我一直是它的忠实粉丝,将这一项目命名为 Fleet 也包含了我的私心。”Darren Shepherd 解释道:“所以我希望重新使用 Fleet 这一名字,这是对这个非常出色的容器领域早期项目的致敬。同时,对于推动 Kubernetes 集群管理的演进,我们感到十分兴奋及万分期待。”
--- 摘自 RancherLabs 官方微信公众号《Rancher开源Fleet:业界首个海量K8S集群管理项目》

顾名思义 Fleet 是“舰队”的意思,而 Kubernetes 在希腊语意为 “舵手”。从名称上看,Fleet 的目标就是管理或是指挥众多 Kubernetes 集群。而在了解这个项目时,我发现了这个项目和 Rancher Labs 另一个受欢迎项目 k3s 有个千丝万缕的联系,甚至在我看来 Fleet 可能就是就是为了管理众多 k3s 集群而生的,是 Rancher Labs 布局边缘计算和 IoT 领域的重要组成部分。

k3s 是一款轻量级的 Kubernetes 集群,主要面向边缘计算和 IOT 领域,相比原生 Kubernetes,k3s 体量更轻、部署简单且快速,同时还具有完整的 Kubernetes 体验。可以说只要是 Linux 系统(配合周边工具甚至可以运行在 Mac 和 Windows 系统),无论是树莓派、各种开发板还是 PC 机,都可以独立运行起 k3s,这也为运行海量 Kubernetes 集群提供了可能。以汽车为例,我们可以为每一辆汽车都部署一个 k3s 集群,所有汽车相关的软件(导航、广播甚至是无人驾驶程序)都部署在 k3s 集群中,每次这些软件发布新版本,只需使用 Fleet 进行批量操作该种车型的所有 k3s 集群即可,无需将车开回 4S 店进行手动更新。

联系美国空军是 Kubernetes 与 Istio 项目的重要用户,这种实践可能早就开始了。

解释了海量 Kubernetes 集群的疑问,下面就从 Fleet 的架构入手,讲讲如何集中管理

Fleet 包含ManageragentManager所在集群作为控制平面管理所有agent集群,同时 Fleet 根据 Kubernetes 部署 Pod 的模型,定义了一个 Bundles 对象,并且提供了一种内置机制,可以使用诸如HelmKustomize等行业标准工具为每个目标集群定制 Bundles,在我看来这种模式以及bundle.yaml的写法都和Kustomize很像(套娃行为?)...一旦用户在集群之间部署了 Bundles,Fleet 就会主动监视资源是否已就绪,以及是否被更改过。总的来说就是通过部署 Bundles,就可以将部署内容批量分发到所有目标集群,从而达到集中管理的目的。

尝鲜体验

说那么多其实意义不大,好不好用,只有试过才知道。这里使用的 Fleet 版本为v0.2.0,是目前的最新版本。

下载 CLI 工具

首先需要下载fleet的 CLI 工具,这里的体验和 k3s 类似,都是直接curl GitHub 上的安装脚本并执行:

$ curl -sfL https://raw.githubusercontent.com/rancher/fleet/master/install.sh | sh -

部署控制平面

使用 CLI 工具将Fleet Manager部署到 Kubernetes 集群上:

# Kubeconfig should point to Manager cluster
$ fleet install manager | kubectl apply -f -

生成 Cluster group token

到这控制平面就部署好了,接下来部署agent目标集群。这里生成的其实是一个 yaml 文件,内容包含 fleet 需要的 RBAC 权限和 fleet-agent 的 Deployment:

# Kubeconfig should point to Manager cluster
$ fleet install agent-token > token

目标集群注册

将需要纳管的目标集群加入到 fleet 中,注意:这里需要将 kubeconfig 切换到目标集群,也就是需要部署agent的集,每个需要注册的集群都要部署agent

# Kubeconfig should point to AGENT cluster
$ kubectl apply -f token

部署 bundles

这里就是向多个集群同时部署 bundles,使用方法也和Kustomize类似(example 目录是 fleet 官方仓库中的示例目录):

# Kubeconfig should point to Manager cluster
$ fleet apply ./examples/helm-kustomize

查看状态

现在就可以查看所有集群 bundles 的状态了,这里可以看到 bundles 在多个集群都部署成功了(这里是我起的两个 k3s 集群做的测试):

$ kubectl get fleet
NAME                                   CLUSTER-COUNT   BUNDLES-READY   BUNDLES-DESIRED   STATUS
clustergroup.fleet.cattle.io/default   2               3               4                 Modified: 1 (helm-kustomize )

NAME                                    CLUSTERS-READY   CLUSTERS-DESIRED   STATUS
bundle.fleet.cattle.io/fleet-agent      2                2
bundle.fleet.cattle.io/helm-kustomize   1                2                  Modified: 1 (default-default-group/cluster-5a186072-acbd-4f54-8f22-fb1651ce902f )

总结

总的来说,Fleet 的架构简洁且十分轻量,部署方式简单,使用YAMLHelmKustomez都可以进行资源的描述和配置,甚至可以使用Helm+Kustomeze的模式,部署体验不错。

但遗憾的是,目前 Fleet 还处于项目早期,实践也仅限于尝鲜体验,并不能用于生产环境,项目 README 中还专门提到了目前 Fleet 仅适用于 10 个集群以下的小规模部署。目前文档不足且项目维护人员并不积极,文档勘误的 RP 和相关 ISSUE 也没有得到相关的反馈。项目是做到了业界首个,但是要真正生产可用甚至做到业界第一还有很长的一段路要走。

参考

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
相关文章
|
13天前
|
缓存 容灾 网络协议
ACK One多集群网关:实现高效容灾方案
ACK One多集群网关可以帮助您快速构建同城跨AZ多活容灾系统、混合云同城跨AZ多活容灾系统,以及异地容灾系统。
|
23天前
|
Kubernetes Ubuntu 网络安全
ubuntu使用kubeadm搭建k8s集群
通过以上步骤,您可以在 Ubuntu 系统上使用 kubeadm 成功搭建一个 Kubernetes 集群。本文详细介绍了从环境准备、安装 Kubernetes 组件、初始化集群到管理和使用集群的完整过程,希望对您有所帮助。在实际应用中,您可以根据具体需求调整配置,进一步优化集群性能和安全性。
91 12
|
26天前
|
Prometheus Kubernetes 监控
OpenAI故障复盘 - 阿里云容器服务与可观测产品如何保障大规模K8s集群稳定性
聚焦近日OpenAI的大规模K8s集群故障,介绍阿里云容器服务与可观测团队在大规模K8s场景下我们的建设与沉淀。以及分享对类似故障问题的应对方案:包括在K8s和Prometheus的高可用架构设计方面、事前事后的稳定性保障体系方面。
|
28天前
|
Kubernetes 网络协议 应用服务中间件
Kubernetes Ingress:灵活的集群外部网络访问的利器
《Kubernetes Ingress:集群外部访问的利器-打造灵活的集群网络》介绍了如何通过Ingress实现Kubernetes集群的外部访问。前提条件是已拥有Kubernetes集群并安装了kubectl工具。文章详细讲解了Ingress的基本组成(Ingress Controller和资源对象),选择合适的版本,以及具体的安装步骤,如下载配置文件、部署Nginx Ingress Controller等。此外,还提供了常见问题的解决方案,例如镜像下载失败的应对措施。最后,通过部署示例应用展示了Ingress的实际使用方法。
61 2
|
1月前
|
存储 Kubernetes 关系型数据库
阿里云ACK备份中心,K8s集群业务应用数据的一站式灾备方案
本文源自2024云栖大会苏雅诗的演讲,探讨了K8s集群业务为何需要灾备及其重要性。文中强调了集群与业务高可用配置对稳定性的重要性,并指出人为误操作等风险,建议实施周期性和特定情况下的灾备措施。针对容器化业务,提出了灾备的新特性与需求,包括工作负载为核心、云资源信息的备份,以及有状态应用的数据保护。介绍了ACK推出的备份中心解决方案,支持命名空间、标签、资源类型等维度的备份,并具备存储卷数据保护功能,能够满足GitOps流程企业的特定需求。此外,还详细描述了备份中心的使用流程、控制台展示、灾备难点及解决方案等内容,展示了备份中心如何有效应对K8s集群资源和存储卷数据的灾备挑战。
|
2月前
|
Kubernetes 监控 Cloud Native
Kubernetes集群的高可用性与伸缩性实践
Kubernetes集群的高可用性与伸缩性实践
88 1
|
3月前
|
JSON Kubernetes 容灾
ACK One应用分发上线:高效管理多集群应用
ACK One应用分发上线,主要介绍了新能力的使用场景
|
3月前
|
Kubernetes 持续交付 开发工具
ACK One GitOps:ApplicationSet UI简化多集群GitOps应用管理
ACK One GitOps新发布了多集群应用控制台,支持管理Argo CD ApplicationSet,提升大规模应用和集群的多集群GitOps应用分发管理体验。
|
3月前
|
Kubernetes Cloud Native 云计算
云原生之旅:Kubernetes 集群的搭建与实践
【8月更文挑战第67天】在云原生技术日益成为IT行业焦点的今天,掌握Kubernetes已成为每个软件工程师必备的技能。本文将通过浅显易懂的语言和实际代码示例,引导你从零开始搭建一个Kubernetes集群,并探索其核心概念。无论你是初学者还是希望巩固知识的开发者,这篇文章都将为你打开一扇通往云原生世界的大门。
156 17
|
3月前
|
Kubernetes Ubuntu Linux
Centos7 搭建 kubernetes集群
本文介绍了如何搭建一个三节点的Kubernetes集群,包括一个主节点和两个工作节点。各节点运行CentOS 7系统,最低配置为2核CPU、2GB内存和15GB硬盘。详细步骤包括环境配置、安装Docker、关闭防火墙和SELinux、禁用交换分区、安装kubeadm、kubelet、kubectl,以及初始化Kubernetes集群和安装网络插件Calico或Flannel。
271 4