去指挥你的舰队吧!体验使用 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 也没有得到相关的反馈。项目是做到了业界首个,但是要真正生产可用甚至做到业界第一还有很长的一段路要走。

参考

相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
目录
相关文章
|
2月前
|
人工智能 算法 调度
阿里云ACK托管集群Pro版共享GPU调度操作指南
本文介绍在阿里云ACK托管集群Pro版中,如何通过共享GPU调度实现显存与算力的精细化分配,涵盖前提条件、使用限制、节点池配置及任务部署全流程,提升GPU资源利用率,适用于AI训练与推理场景。
298 1
|
2月前
|
弹性计算 监控 调度
ACK One 注册集群云端节点池升级:IDC 集群一键接入云端 GPU 算力,接入效率提升 80%
ACK One注册集群节点池实现“一键接入”,免去手动编写脚本与GPU驱动安装,支持自动扩缩容与多场景调度,大幅提升K8s集群管理效率。
262 89
|
7月前
|
资源调度 Kubernetes 调度
从单集群到多集群的快速无损转型:ACK One 多集群应用分发
ACK One 的多集群应用分发,可以最小成本地结合您已有的单集群 CD 系统,无需对原先应用资源 YAML 进行修改,即可快速构建成多集群的 CD 系统,并同时获得强大的多集群资源调度和分发的能力。
301 9
|
7月前
|
资源调度 Kubernetes 调度
从单集群到多集群的快速无损转型:ACK One 多集群应用分发
本文介绍如何利用阿里云的分布式云容器平台ACK One的多集群应用分发功能,结合云效CD能力,快速将单集群CD系统升级为多集群CD系统。通过增加分发策略(PropagationPolicy)和差异化策略(OverridePolicy),并修改单集群kubeconfig为舰队kubeconfig,可实现无损改造。该方案具备多地域多集群智能资源调度、重调度及故障迁移等能力,帮助用户提升业务效率与可靠性。
|
9月前
|
存储 Kubernetes 监控
K8s集群实战:使用kubeadm和kuboard部署Kubernetes集群
总之,使用kubeadm和kuboard部署K8s集群就像回归童年一样,简单又有趣。不要忘记,技术是为人服务的,用K8s集群操控云端资源,我们不过是想在复杂的世界找寻简单。尽管部署过程可能遇到困难,但朝着简化复杂的目标,我们就能找到意义和乐趣。希望你也能利用这些工具,找到你的乐趣,满足你的需求。
893 33
|
9月前
|
Kubernetes 开发者 Docker
集群部署:使用Rancher部署Kubernetes集群。
以上就是使用 Rancher 部署 Kubernetes 集群的流程。使用 Rancher 和 Kubernetes,开发者可以受益于灵活性和可扩展性,允许他们在多种环境中运行多种应用,同时利用自动化工具使工作负载更加高效。
521 19
|
9月前
|
人工智能 分布式计算 调度
打破资源边界、告别资源浪费:ACK One 多集群Spark和AI作业调度
ACK One多集群Spark作业调度,可以帮助您在不影响集群中正在运行的在线业务的前提下,打破资源边界,根据各集群实际剩余资源来进行调度,最大化您多集群中闲置资源的利用率。
|
12月前
|
Prometheus Kubernetes 监控
OpenAI故障复盘 - 阿里云容器服务与可观测产品如何保障大规模K8s集群稳定性
聚焦近日OpenAI的大规模K8s集群故障,介绍阿里云容器服务与可观测团队在大规模K8s场景下我们的建设与沉淀。以及分享对类似故障问题的应对方案:包括在K8s和Prometheus的高可用架构设计方面、事前事后的稳定性保障体系方面。
|
9月前
|
Prometheus Kubernetes 监控
OpenAI故障复盘丨如何保障大规模K8s集群稳定性
OpenAI故障复盘丨如何保障大规模K8s集群稳定性
339 0
OpenAI故障复盘丨如何保障大规模K8s集群稳定性
|
11月前
|
缓存 容灾 网络协议
ACK One多集群网关:实现高效容灾方案
ACK One多集群网关可以帮助您快速构建同城跨AZ多活容灾系统、混合云同城跨AZ多活容灾系统,以及异地容灾系统。

推荐镜像

更多