CloudPilot AI携手阿里云发布Karpenter阿里云 Provider,优化ACK集群主动扩
去年7月,Kubernetes 告竣十万星标的里程碑,彰显其作为云计算领域核心容器编排工具的广泛应用与认可。Kubernetes 的普及加速了企业的上云进程,使云计算成为数字化转型的主流选择。随着越来越多企业依赖 Kubernetes 提供机动的基础设施扩展,云支出管理需求也愈发紧迫。根据 Flexera 发布的《2023年云计算现状陈诉》,超过 80% 的受访企业已将云支出管理视为首要任务。在这种配景下,专为 Kubernetes 设计的开源主动扩缩容项目 Karpenter 应运而生。Karpenter 于 2021 年 11 月首次发布并开源,并在 2023 年进入 beta 阶段后贡献给云原生计算基金会(CNCF)。今年8月,Karpenter 推出 1.0 版本,标志着该项目迈向成熟,自发布以来已被 Slack、阿迪达斯、奥迪等行业向导者应用于生产情况。
然而,Karpenter 恒久以来仅支持 AWS,难以满足许多企业的多云与混淆云 IT 策略。为响应开源社区用户的需求,CloudPilot AI 携手阿里云容器服务和弹性计算团队联合开发了 karpenter-provider-alibabacloud,将 Karpenter 的机动多策略集群弹性带给阿里云用户。
经过数月紧锣密鼓的开发,今天,我们很高兴地公布 karpenter-provider-alibabacloud 已正式发布。
开源地址:
https://github.com/cloudpilot-ai/karpenter-provider-alibabacloud
文档地址:
https://docs.cloudpilot.ai/karpenter/alibabacloud/
Karpenter 如何工作?
Karpenter 是一个专为 Kubernetes 集群设计的开源集群扩缩容项目,旨在提供高效的节点生命周期管理,资助企业优化集群的的资源利用率和本钱,同时提拔集群数据面节点的运维效率。
通过主动监控和分析集群中 pending 的工作负载,Karpenter 能快速创建合适的计算节点,以确保工作负载始终有足够的资源承载,保障服务持续稳定运行。而在资源需求淘汰时,它会主动释放多余节点,资助企业按需缩减资源,从而降低云计算支出。
https://img2024.cnblogs.com/blog/3543217/202411/3543217-20241125140204952-1040367770.png
Karpenter 的独特优势还在于它能够识别和优化资源利用率低节点,而且可以对接按需和 Spot 等多种计费模式的节点,通过节点整合(binpack)和节点更换功能,将业务从低利用率/本钱更高的节点迁徙到能够提拔利用率/更具本钱效益的节点实例上。
相较于另一款开源弹性伸缩工具 Cluster Autoscaler,Karpenter 没有节点组的概念,通过动态计算资源分配以及直接对接阿里云的弹性供应组,淘汰多层API交互,使得分配资源最优、缩短API调用耗时、降低配置复杂性;同时在连续多次弹性扩容等场景下,能够实现更高成功率的弹性资源交付。
Karpenter 可以为阿里云的客户带来什么?
阿里云 Provider 的发布为 Karpenter 提供了对阿里云情况的原生支持。使用阿里云的企业可以在 Kubernetes 集群中充分利用 Karpenter 的主动扩缩容和资源优化功能,以更高效地管理计算资源。这不仅节省了企业的管理时间和精力,还实现了更智能、更机动的集群管理,从而降低总体云本钱,助力企业将更多预算投入到业务增长中。
对于企业而言,这一扩展带来的价值远超资源调理的简朴主动化。通过阿里云 Provider,Karpenter 能根据工作负载需求实时调整节点数目,同时结合阿里云的订价模式(按需/Spot 等)和资源特性,选择最具性价比的实例类型。这不仅资助企业充分利用阿里云的弹性伸缩能力,轻松应对突发流量需求,还能最大化资源利用率,以最低本钱完成节点扩缩,明显淘汰空闲资源的浪费。
Karpenter 如何高效主动扩展 ACK 集群?
本章节将详细先容 Karpenter 如安在 ACK 上实现从安装到主动扩缩容的完整流程,并资助您掌握如何利用 Karpenter 最大化 ACK 集群的资源利用效率。
Step 1:前期准备
在阿里云 ACK 集群上安装 Karpenter 首先必要配置阿里云的 API 权限,以便 Karpenter 能够主动创建、管理和释放节点。目前,Karpenter 临时使用 AK/SK 凭证,未来将会切换至 RRSA 来增强安全性。
在开始安装 Karpenter 之前,请准备:
[*]阿里云 CLI
[*]Kubectl
[*]Helm
运行以下命令,以配置带有 AK/SK 凭证的阿里云 CLI:
aliyun configureStep 2:准备阿里云 ACK 集群
如果您已经有一个 ACK 集群,可忽略此步调。
本步调主要用于创建一个用于演示目标的 ACK 集群。除了上述组件外,还需安装 Terraform。
配置阿里云凭据情况变量:
export ALICLOUD_ACCESS_KEY=<aliyun access key>
export ALICLOUD_SECRET_KEY=<aliyun secret key>
export ALICLOUD_REGION="cn-shenzhen" 下载 repo:
git clone https://github.com/cloudpilot-ai/examples.git
cd examples/clusters/ack-spot-flannel执行以下命令创建 ACK 集群:
export TF_VAR_CLUSTER_NAME=<your_cluster_name>
terraform init
terraform apply --auto-approve运行以下命令获取 kubeconfig:
export CLUSTER_NAME=<your_cluster_name>
export KUBECONFIG=~/.kube/demo
export CLUSTER_ID=$(aliyun cs GET /clusters | jq -r --arg CLUSTER_NAME "$CLUSTER_NAME" '.[] | select(.name == $CLUSTER_NAME) | .cluster_id')
aliyun cs GET /k8s/$CLUSTER_ID/user_config | jq -r '.config' > $KUBECONFIG测试集群能否正常运行:
kubectl get nodes集群到此创建完毕。
Step 3:配置情况变量
运行下方命令,设置相应的情况变量:
export CLUSTER_NAME=<your_cluster_name> # Config your cluster name
export CLUSTER_REGION=<your_cluster_region> # Config the alibabacloud region
export ALIBABACLOUD_AK=<alibaba_cloud_access_key> # Config the alibabacloud AK
export ALIBABACLOUD_SK=<alibaba_cloud_secret_key> # Config the alibabacloud SK
export CLUSTER_ID=$(aliyun cs GET /clusters | jq -r --arg CLUSTER_NAME "$CLUSTER_NAME" '.[] | select(.name == $CLUSTER_NAME) | .cluster_id')
export VSWITCH_IDS=$(aliyun cs GET /api/v1/clusters --header "Content-Type=application/json;" | jq -r --arg CLUSTER_NAME "$CLUSTER_NAME" '.clusters[] | select(.name == $CLUSTER_NAME) | .vswitch_ids[]')
export SECURITYGROUP_ID=$(aliyun cs GET /api/v1/clusters --header "Content-Type=application/json;" | jq -r --arg CLUSTER_NAME "$CLUSTER_NAME" '.clusters[] | select(.name == $CLUSTER_NAME) | .security_group_id')Step 4:给相关的资源打标签
Karpenter 通过 Tag 找到相应的安全组和 vSwitch,运行以下命令对其进行标志:
# Tag the security groupaliyun tag TagResources --region ${CLUSTER_REGION} --RegionId ${CLUSTER_REGION} --ResourceARN.1 "acs:ecs:*:*:securitygroup/${SECURITYGROUP_ID}" --Tags "{\"karpenter.sh/discovery\": \"$CLUSTER_NAME\"}"# Tag the vswitchIFS=' 'while IFS= read -r vs_id; doaliyun tag TagResources --region ${CLUSTER_REGION} --RegionId ${CLUSTER_REGION} --ResourceARN.1 "acs:vpc:*:*:vswitch/${vs_id}" --Tags "{\"karpenter.sh/discovery\": \"$CLUSTER_NAME\"}"done
页:
[1]