大数跨境

Karpenter生态持续扩展:TKE Provider发布,多云支持再升级

Karpenter生态持续扩展:TKE Provider发布,多云支持再升级 Karpenter
2025-04-27
2
导读:Karpenter TKE Provider 发布,多云支持重要升级。

 

Karpenter 开源地址: 

https://github.com/kubernetes-sigs/karpenter


随着云原生技术的普及,企业对集群弹性和资源利用率的要求越来越高。

作为云原生弹性领域的重要项目,Karpenter以其极致的弹性扩缩能力受到全球开发者的广泛关注。

去年 11 月阿里云 Provider 开源后,Karpenter 社区迎来了对腾讯云 TKE 的支持,进一步丰富了接入 Karpenter 生态的中国公有云。

这一进展得益于腾讯云团队在开源社区中的积极贡献,标志着 Karpenter 在中国开发者群体中的影响力持续扩大,也进一步丰富了其多云适配能力,为更多用户带来了智能、快速、高效的弹性扩缩容体验。

开源地址:
https://github.com/TencentCloud/karpenter-provider-tke

对 Karpenter 感兴趣的小伙伴,欢迎扫描下方二维码加群交流 ✨

为什么选择Karpenter?

Karpenter 是一个专为 Kubernetes 集群设计的开源集群扩缩容项目,旨在提供高效的节点生命周期管理,帮助企业优化集群的的资源利用率和成本,同时提升集群数据面节点的运维效率

相比传统的 Cluster Autoscaler,它拥有以下优势:

  • • 更快的响应速度Pod Pending 后,几秒内即可触发节点创建。
  • • 按需节点定制:每次扩容都可以根据 Pod 需求动态生成节点,避免资源浪费。
  • • 灵活的实例选择:支持按成本、性能、容量等多维度优化节点选择。

关于 Karpenter vs Cluster Autoscaler 更多维度的对比信息,欢迎点击下方卡片,回复关键词【对比】获取 PDF

功能亮点

karpenter-provider-tke作为 TKE 的官方 Provider,覆盖了 TKE 环境下 Karpenter 所需的关键能力,包括:

  1. 1. 原生适配 TKE,快速响应扩容需求
    通过腾讯云 TKE Provider,Karpenter 能够根据集群负载的变化,智能地在 TKE 中创建、管理和回收节点,大幅提升了资源利用率和成本效率。

  2. 2. 支持丰富的节点配置策略
    基于 TKE 的灵活实例规格选择,用户可以自定义节点池、指定可用区、选择不同计费模式(如按需、Spot 实例等),让扩容策略更加细粒度、贴合业务需求。

  3. 3. 无需预先定义节点组,极简运维体验
    Karpenter 动态调度的特性,在 TKE 上得到了完整发挥。无需繁琐配置,即可根据实际需求即时生成最合适的节点,极大简化了节点管理。

  4. 4. 支持 TKE 特有能力
    如安全组管理、节点标签设置、实例生命周期控制等功能,帮助用户在使用 Karpenter 时,依然能够无缝对接 TKE 的平台特性。

上手安装

前提条件

  • • 一个可用的 Tencent Cloud TKE 集群
  • • 集群版本 ≥ 1.20
  • • 已安装并配置好:
    • • kubectl
    • • helm(可选,用于其他组件)
  • • 有腾讯云 API 访问凭证(SecretId、SecretKey)

Step 1:创建集群密钥

访问:https://console.cloud.tencent.com/cam/capi 获取 secretID 和 secretKey,并在 K8s 集群中创建密钥(secret)。

kubectl create namespace karpenterkubectl -n karpenter create secret generic apisecret --from-file=./secretID --from-file=./secretKey

Step 2:安装或升级 TKE Provider

使用 Helm Chart 进行安装或升级:

# replace your TKE cluster ID and the region where your TKE cluster is located helm upgrade --install karpenter https://github.com/tencentcloud/karpenter-provider-tke/raw/refs/heads/main/charts/karpenter-0.1.7.tgz --namespace "karpenter" --create-namespace \  --set "settings.clusterID=cls-xxxx" \  --set "settings.region=ap-singapore" \  --set controller.resources.requests.cpu=0.1 \  --set controller.resources.requests.memory=100Mi \  --set controller.resources.limits.cpu=1 \  --set controller.resources.limits.memory=1Gi \  --set replicas=1 \  --wait

注意:如果你的版本低于0.16,在升级前需要先升级 CRD:

kubectl apply -f https://github.com/tencentcloud/karpenter-provider-tke/raw/refs/heads/main/charts/karpenter/crds/karpenter.sh_nodepools.yamlkubectl apply -f https://github.com/tencentcloud/karpenter-provider-tke/raw/refs/heads/main/charts/karpenter/crds/karpenter.sh_nodeclaims.yamlkubectl apply -f https://github.com/tencentcloud/karpenter-provider-tke/raw/refs/heads/main/charts/karpenter/crds/karpenter.k8s.tke_tkemachinenodeclasses.yaml

Step 3:创建 NodeClass 和 NodePool

Karpenter 需要用 NodeClass 和 NodePool 来定义资源规则。以下是示例 YAML 文件,你可以稍作修改以应用至自己的集群中:

---apiVersion: karpenter.sh/v1kind: NodePoolmetadata:  name: test  annotations:    kubernetes.io/description: "NodePool to restrict the number of cpus provisioned to 10"spec:  disruption:    consolidationPolicy: WhenEmptyOrUnderutilized    consolidateAfter: 5m    budgets:    - nodes: 10%  template:    spec:      requirements:        - key: kubernetes.io/arch          operator: In          values: ["amd64"]        - key: kubernetes.io/os          operator: In          values: ["linux"]        - key: karpenter.k8s.tke/instance-family          operator: In          values: ["S5","SA2"]        - key: karpenter.sh/capacity-type          operator: In          values: ["on-demand"]        # - key: node.kubernetes.io/instance-type        #   operator: In        #   values: ["S5.MEDIUM2", "S5.MEDIUM4"]        - key: "karpenter.k8s.tke/instance-cpu"          operator: Gt          values: ["1"]        # - key: "karpenter.k8s.tke/instance-memory-gb"        #   operator: Gt        #   values: ["3"]      nodeClassRef:        group: karpenter.k8s.tke        kind: TKEMachineNodeClass        name: default  limits:    cpu: 10---apiVersion: karpenter.k8s.tke/v1beta1kind: TKEMachineNodeClassmetadata:  name: default  annotations:    kubernetes.io/description: "General purpose TKEMachineNodeClass"spec:  ## using kubectl explain tmnc.spec.internetAccessible to check how to use internetAccessible field.  # internetAccessible:  #   chargeType: TrafficPostpaidByHour  #   maxBandwidthOut: 2  ## using kubectl explain tmnc.spec.systemDisk to check how to use systemDisk field.  # systemDisk:  #   size: 60  #   type: CloudSSD  ## using kubectl explain tmnc.spec.dataDisks to check how to use systemDisk field.  # dataDisks:  # - mountTarget: /var/lib/container  #   size: 100  #   type: CloudPremium  #   fileSystem: ext4  subnetSelectorTerms:    # replace your tag which is already existed in https://console.cloud.tencent.com/tag/taglist    - tags:        karpenter.sh/discovery: cls-xxx    # - id: subnet-xxx  securityGroupSelectorTerms:    - tags:        karpenter.sh/discovery: cls-xxx    # - id: sg-xxx  sshKeySelectorTerms:    - tags:        karpenter.sh/discovery: cls-xxx    # - id: skey-xxx

Step 4:验证云资源是否与 NodeClass 同步

kubectl describe tmnc defaultStatus:  Conditions:    Last Transition Time:  2024-08-21T09:17:26Z    Message:                   Reason:                Ready    Status:                True    Type:                  Ready  Security Groups:    Id:  sg-xxx  Ssh Keys:    Id:  skey-xxx    Id:  skey-xxx    Id:  skey-xxx  Subnets:    Id:       subnet-xxx    Zone:     ap-singapore-1    Zone ID:  900001    Id:       subnet-xxx    Zone:     ap-singapore-4    Zone ID:  900004


💡注意:

出于稳定性考虑,TKE Provider 没有实现 Drift 相关机制,以避免在生产环境中因节点标签或实例配置变动而导致的不必要节点重建。


因此,当修改 NodeClass 时,已有节点不会受到影响,修改仅作用于新创建的节点;而修改 NodePool 时,如果现有节点与新规则不兼容,则仍会触发节点替换。

开源社区的贡献与支持

本次 Karpenter TKE Provider 的发布,离不开腾讯云团队在开源社区中的深度参与和贡献。

通过这一扩展,腾讯云环境中的 Kubernetes 集群可以更加智能、灵活地自动调整节点资源,帮助企业实现按需资源供应,显著提升集群的可扩展性和资源优化效率。这也是 Karpenter 在多云支持上的一次重要升级。

目前,TKE Provider 已在 GitHub 上正式开源,欢迎所有开发者、用户和社区成员一同参与使用、反馈和共建:https://github.com/TencentCloud/karpenter-provider-tke

未来,随着更多功能完善,如跨地域扩缩容等,TKE Provider 将持续提升在复杂场景下的弹性扩容能力。

值得关注的是,针对谷歌云 GCP 的支持已经在路上了,敬请期待!

 

推荐阅读

打卡是免费的,AWS可不是:多邻国如何靠“抠”省下20%成本?

MCP Server实践,轻松搞定AWS云成本分析

流量翻倍成本反降86%:PBS 如何打造弹性架构支撑《芝麻街》高效交付

图片

项目介绍

Karpenter 于2021年11月推出并开源,是一款开源的Kubernetes集群自动扩缩容工具,专为优化 Kubernetes 集群的工作负载设计,旨在以灵活、高性能和简洁的方式实现节点的弹性扩展。今年9月已发布1.0版本。目前,Karpenter 已为全球超500家知名企业在生产环境中提供服务,包括阿迪达斯、Anthropic、Slack、Figma等。

Karpenter项目地址:
https://github.com/kubernetes-sigs/karpenter

【声明】内容源于网络
0
0
Karpenter
Karpenter is a Kubernetes Node Autoscaler built for flexibility, performance, and simplicity.
内容 51
粉丝 0
Karpenter Karpenter is a Kubernetes Node Autoscaler built for flexibility, performance, and simplicity.
总阅读49
粉丝0
内容51