在 re:Invent 2021 上,AWS 宣布了 v0.5.0 版本的 Karpenter,将其开源 Kubernetes 节点配置项目标记为生产就绪。借助 Karpenter,Kubernetes 用户现在可以比现有的 Kubernetes cluster-autoscaler 项目更有效地根据 pod 规范动态配置底层计算节点。

Karpenter 是使用 AWS 构建的开源、灵活、高性能的 Kubernetes 集群自动扩缩器。它通过快速启动适当大小的计算资源来响应不断变化的应用程序负载,帮助提高应用程序可用性和集群效率。 Karpenter 还提供即时计算资源以满足您的应用程序的需求,并且很快将自动优化集群的计算资源占用空间,以降低成本并提高性能。

在使用 Karpenter 之前,Kubernetes 用户需要动态调整其集群的计算容量,以支持使用 Amazon EC2 Auto Scaling 组和 Kubernetes Cluster Autoscaler 的应用程序。 AWS 上近一半的 Kubernetes 客户报告说,使用 Kubernetes Cluster Autoscaler 配置集群 Auto Scaling 具有挑战性和限制性。

根据 AWS,Kubernetes 原生集群自动扩缩器现在可以投入生产。

[图像描述](https://res.cloudinary.com/practicaldev/image/fetch/s--OJLyuyHJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to- uploads.s3.amazonaws.com/uploads/articles/976reljw8imknistt2r7.png)

那么 Karpenter 是如何工作的,它与集群自动扩缩器有何不同?

木匠

  • 如果您熟悉 GKE Autopilot 的动态节点配置流程,您可以将 Karpenter 视为该工具的开源版本,旨在与任何 Kubernetes 集群一起使用(注意:目前 AWS 是唯一官方支持的云提供商)。

  • 与 GKE Autopilot 类似,Karpenter 观察不可调度 Pod 的 Pod 规格,计算聚合资源请求,并向底层计算服务(例如 Amazon EC2)发送具有运行所有 Pod 所需容量的请求。

  • 在底层,Karpenter 定义了一个名为 Provisioner 的自定义资源,用于指定节点配置配置,包括实例大小/类型、拓扑(例如区域)、架构(例如 arm64、amd64)和生命周期类型(例如现货、按需、抢占式) )。

[图像描述](https://res.cloudinary.com/practicaldev/image/fetch/s--Ij9KkC0O--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to- uploads.s3.amazonaws.com/uploads/articles/rbn48304spqk31n2fhae.png)

  • 另一方面,Karpenter 还可以在不再需要节点时取消配置节点。这可以通过节点到期配置 (ttlSecondsUntilExpired) 或在 Karpenter 配置节点上运行的最后一个工作负载终止时确定。

  • 这两个事件中的任何一个都会触发最终确定,这会封锁节点、耗尽 pod、终止底层计算资源并删除节点对象。此取消配置功能还可用于使节点与最新的 AMI 保持同步。

Carpenter vs Cluster Autoscaler

  • 粗略地看,Karpenter 的工作方式与现有的 Kubernetes 集群自动扩缩器项目类似。毕竟,集群自动扩缩器也与云无关,可以根据 pod 资源请求进行扩展或缩减。

  • 然而,仔细观察,Karpenter 提供了优于集群自动扩缩器的几个优点:

  • Kubernetes 原生扩展: 适用于 AWS 的集群自动扩展程序利用 EC2 Auto Scaling 组来触发扩展事件。由于 ASG 是在 Kubernetes 之前设计的,因此这种集成既笨重又缓慢。例如,托管节点组用户仍然无法将其配置为将节点组扩展到 0,这使得批处理工作负载类型在 EKS 上运行的成本更高。

  • 无需预先配置节点组: 集群自动扩缩器只能根据节点组提供的规范配置节点,这需要工作组具有特定的标签,并且与相似的实例类型配合使用效果最好。这意味着,如果您想运行性能测试,您需要使用更强大的 EC2 机器类型预定义一个节点组,以便集群自动缩放器触发缩放事件。借助 Karpenter,您可以按需使用所有 AWS 实例类型。由于 Karpenter 直接管理每个实例而无需节点组,因此在容量不可用时请求新的计算实例也快得多。

  • 更快的调度: 使用集群自动扩缩器,一旦有新资源可用,Pod 就会依赖 kube-scheduler 为新节点创建 Pod。由于 Karpenter 直接管理节点,它可以立即将 Pod 启动到新节点,而无需等待调度程序。

结论

使用 Karpenter,我们可以卸载节点配置、自动缩放和升级,并专注于运行我们的应用程序。 Karpenter 适用于各种 Kubernetes 应用程序,但对于需要快速配置和快速取消配置大量不同计算资源的用例,它的性能特别好。例如,这包括用于训练机器学习模型、运行模拟或执行复杂财务计算的批处理作业。


在评论部分让我知道您对新 karpenter 服务的想法👇

如果您还没有,请务必在以下句柄上关注我:

👋 与我联系LinkedIn

🤓 **在Twitter上与我联系 **

🐱u200d💻 关注我github

✍️ 结帐我的博客

喜欢,分享和关注我🚀以获取更多内容。

[

aditmodi 图像

](/阿迪莫迪)

阿迪特莫迪关注

云工程师 | AWS 社区生成器 | 9x AWS 认证 | 3x Azure 认证 | Cloud Tech , DailyDevOps & BigDataJournal 作者 |开发版主 | HashiCorp 大使 |电梯“云上尉”


👨u200d💻 加入我们的Cloud Tech Slack 社区

👋 关注我们Linkedin/Twitter了解最新消息

💻 查看我们的Github Repos以了解更多关于我们项目的信息

✍️ 我们的网站

Logo

CI/CD社区为您提供最前沿的新闻资讯和知识内容

更多推荐