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. 原生适配 TKE,快速响应扩容需求
通过腾讯云 TKE Provider,Karpenter 能够根据集群负载的变化,智能地在 TKE 中创建、管理和回收节点,大幅提升了资源利用率和成本效率。 -
-
2. 支持丰富的节点配置策略
基于 TKE 的灵活实例规格选择,用户可以自定义节点池、指定可用区、选择不同计费模式(如按需、Spot 实例等),让扩容策略更加细粒度、贴合业务需求。 -
-
3. 无需预先定义节点组,极简运维体验
Karpenter 动态调度的特性,在 TKE 上得到了完整发挥。无需繁琐配置,即可根据实际需求即时生成最合适的节点,极大简化了节点管理。 -
-
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 locatedhelm 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: testannotations:kubernetes.io/description: "NodePool to restrict the number of cpus provisioned to 10"spec:disruption:consolidationPolicy: WhenEmptyOrUnderutilizedconsolidateAfter: 5mbudgets:- nodes: 10%template:spec:requirements:- key: kubernetes.io/archoperator: Invalues: ["amd64"]- key: kubernetes.io/osoperator: Invalues: ["linux"]- key: karpenter.k8s.tke/instance-familyoperator: Invalues: ["S5","SA2"]- key: karpenter.sh/capacity-typeoperator: Invalues: ["on-demand"]# - key: node.kubernetes.io/instance-type# operator: In# values: ["S5.MEDIUM2", "S5.MEDIUM4"]- key: "karpenter.k8s.tke/instance-cpu"operator: Gtvalues: ["1"]# - key: "karpenter.k8s.tke/instance-memory-gb"# operator: Gt# values: ["3"]nodeClassRef:group: karpenter.k8s.tkekind: TKEMachineNodeClassname: defaultlimits:cpu: 10---apiVersion: karpenter.k8s.tke/v1beta1kind: TKEMachineNodeClassmetadata:name: defaultannotations: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: ext4subnetSelectorTerms:# replace your tag which is already existed in https://console.cloud.tencent.com/tag/taglist- tags:karpenter.sh/discovery: cls-xxx# - id: subnet-xxxsecurityGroupSelectorTerms:- tags:karpenter.sh/discovery: cls-xxx# - id: sg-xxxsshKeySelectorTerms:- tags:karpenter.sh/discovery: cls-xxx# - id: skey-xxx
Step 4:验证云资源是否与 NodeClass 同步
kubectl describe tmnc defaultStatus:Conditions:Last Transition Time: 2024-08-21T09:17:26ZMessage:Reason: ReadyStatus: TrueType: ReadySecurity Groups:Id: sg-xxxSsh Keys:Id: skey-xxxId: skey-xxxId: skey-xxxSubnets:Id: subnet-xxxZone: ap-singapore-1Zone ID: 900001Id: subnet-xxxZone: ap-singapore-4Zone ID: 900004
开源社区的贡献与支持
本次 Karpenter TKE Provider 的发布,离不开腾讯云团队在开源社区中的深度参与和贡献。
通过这一扩展,腾讯云环境中的 Kubernetes 集群可以更加智能、灵活地自动调整节点资源,帮助企业实现按需资源供应,显著提升集群的可扩展性和资源优化效率。这也是 Karpenter 在多云支持上的一次重要升级。
目前,TKE Provider 已在 GitHub 上正式开源,欢迎所有开发者、用户和社区成员一同参与使用、反馈和共建:https://github.com/TencentCloud/karpenter-provider-tke
未来,随着更多功能完善,如跨地域扩缩容等,TKE Provider 将持续提升在复杂场景下的弹性扩容能力。
值得关注的是,针对谷歌云 GCP 的支持已经在路上了,敬请期待!
推荐阅读
打卡是免费的,AWS可不是:多邻国如何靠“抠”省下20%成本?
流量翻倍成本反降86%:PBS 如何打造弹性架构支撑《芝麻街》高效交付
项目介绍
Karpenter 于2021年11月推出并开源,是一款开源的Kubernetes集群自动扩缩容工具,专为优化 Kubernetes 集群的工作负载设计,旨在以灵活、高性能和简洁的方式实现节点的弹性扩展。今年9月已发布1.0版本。目前,Karpenter 已为全球超500家知名企业在生产环境中提供服务,包括阿迪达斯、Anthropic、Slack、Figma等。
Karpenter项目地址:
https://github.com/kubernetes-sigs/karpenter

