当前位置:首页 > 其他 > 正文内容

CloudPilot AI携手阿里云发布Karpenter阿里云 Provider,优化ACK集群主动扩展

邻居的猫1个月前 (12-09)其他1741

上一年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 能快速创立适宜的核算节点,以保证作业负载一直有满意的资源承载,保证服务继续安稳运转。而在资源需求削减时,它会主动开释剩余节点,协助企业按需减缩资源,然后下降云核算开销

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 configure

Step 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 group
aliyun tag TagResources --region ${CLUSTER_REGION} --RegionId ${CLUSTER_REGION} --ResourceARN.1 "acs:ecs:*:*:securitygroup/${SECURITYGROUP_ID}" --Tags "{\"karpenter.sh/discovery\": \"$CLUSTER_NAME\"}"

# Tag the vswitch
IFS=' '
while IFS= read -r vs_id; do
  aliyun tag TagResources --region ${CLUSTER_REGION} --RegionId ${CLUSTER_REGION} --ResourceARN.1 "acs:vpc:*:*:vswitch/${vs_id}" --Tags "{\"karpenter.sh/discovery\": \"$CLUSTER_NAME\"}"
done <<< $VSWITCH_IDS

Step 5:装置 Karpenter

运转以下指令即可装置最新版别的 karpenter-provider-alibabacloud

helm repo add karpenter-provider-alibabacloud https://cloudpilot-ai.github.io/karpenter-provider-alibabacloud

helm upgrade karpenter karpenter-provider-alibabacloud/karpenter --install --version 0.1.0 \
  --namespace karpenter-system --create-namespace \
  --set "alibabacloud.access_key_id"=${ALIBABACLOUD_AK} \
  --set "alibabacloud.access_key_secret"=${ALIBABACLOUD_SK} \
  --set "alibabacloud.region_id"=${CLUSTER_REGION} \
  --set controller.settings.clusterID=${CLUSTER_ID} \
  --wait

Step 6:

创立 NodePool/ECSNodeClass

Karpenter 经过 YAML 文件装备其扩缩容战略,包含节点类型、扩容触发条件等,详细而言,是经过运用自定义的 Kubernetes 资源——NodePool 和 NodeClass 来办理。

NodePool 是 Karpenter 在 Kubernetes 集群中装备节点时的一项重要特性。每个 NodePool 代表一组具有相同装备要求的节点,用户能够经过装备 NodePool 来设定集群中节点的详细要求和资源约束,包含实例类型、可用区、架构(例如 AMD64 或 ARM64)、容量类型(竞价或按需)等。

每个 NodePool 能够引证一个 NodeClass,然后确认由 Karpenter 供给的节点的详细装备。经过 NodeClass,用户能够定制与云环境相关的节点特点,保证在主动扩缩容时能够满意特定的云基础设施需求。

以下是 NodePool 和 NodeClass 创立示例:

cat > nodeclass.yaml <<EOF
apiVersion: karpenter.k8s.alibabacloud/v1alpha1
kind: ECSNodeClass
metadata:
  name: defaultnodeclass
spec:
  vSwitchSelectorTerms:
    - tags:
        karpenter.sh/discovery: "${CLUSTER_NAME}" # replace with your cluster name
  securityGroupSelectorTerms:
    - tags:
        karpenter.sh/discovery: "${CLUSTER_NAME}" # replace with your cluster name
  imageSelectorTerms:
    # ContainerOS only support x86_64 linux nodes, and it's faster to initialize
    - alias: ContainerOS
EOF

kubectl apply -f nodeclass.yaml


cat > nodepool.yaml <<EOF
apiVersion: karpenter.sh/v1
kind: NodePool
metadata:
  name: ecsnodepool
spec:
  disruption:
    budgets:
      - nodes: 95%
    consolidationPolicy: WhenEmptyOrUnderutilized
    consolidateAfter: 1m
  template:
    spec:
      requirements:
        - key: kubernetes.io/arch
          operator: In
          values: [ "amd64" ]
        - key: kubernetes.io/os
          operator: In
          values: ["linux"]
        - key: karpenter.sh/capacity-type
          operator: In
          values: ["spot"]
      nodeClassRef:
        group: "karpenter.k8s.alibabacloud"
        kind: ECSNodeClass
        name: defaultnodeclass
EOF

kubectl apply -f nodepool.yaml

Step 7:弹性弹性 ACK 布置

运用以下指令测验节点扩展才能:

cat > deployment.yaml <<EOF
apiVersion: apps/v1
kind: Deployment
metadata:
  name: inflate
spec:
  replicas: 1
  selector:
    matchLabels:
      app: inflate
  template:
    metadata:
      labels:
        app: inflate
    spec:
      affinity:
        nodeAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
            nodeSelectorTerms:
              - matchExpressions:
                  - key: karpenter.sh/capacity-type
                    operator: Exists
      securityContext:
        runAsUser: 1000
        runAsGroup: 3000
        fsGroup: 2000
      containers:
      - image: public.ecr.aws/eks-distro/kubernetes/pause:3.2
        name: inflate
        resources:
          requests:
            cpu: 250m
            memory: 250Mi
        securityContext:
          allowPrivilegeEscalation: false
EOF

kubectl apply -f deployment.yaml

布置完结大约一分钟后,您会看到创立了一个新节点,而且 pod 被调度到新节点上:

$ kubectl get nodes
NAME                       STATUS   ROLES    AGE   VERSION
cn-shenzhen.172.16.1.58    Ready    <none>   22m   v1.31.1-aliyun.1
cn-shenzhen.172.16.2.142   Ready    <none>   22m   v1.31.1-aliyun.1
cn-shenzhen.172.16.5.18    Ready    <none>   43s   v1.31.1-aliyun.1

$ kubectl get po -l app=inflate -owide
NAME                       READY   STATUS    RESTARTS   AGE     IP           NODE                      NOMINATED NODE   READINESS GATES
inflate-7758687f95-5r42m   1/1     Running   0          3m14s   10.169.2.2   cn-shenzhen.172.16.5.18   <none>           <none>

接下来测验减缩布置,运转以下指令:

kubectl scale deployment/inflate --replicas=0

布置减缩后,您会看到节点被删去:

$ kubectl get nodes
NAME                       STATUS   ROLES    AGE   VERSION
cn-shenzhen.172.16.1.58    Ready    <none>   22m   v1.31.1-aliyun.1
cn-shenzhen.172.16.2.142   Ready    <none>   22m   v1.31.1-aliyun.1

经过 Karpenter 的主动扩缩容功用,ACK 用户能够大幅削减手动资源办理的作业量,并经过主动节点调度和资源优化明显下降云核算本钱。Karpenter 为 ACK 供给了多种优化资源运用率和本钱操控的战略。经过集成阿里云的计费模型,Karpenter 能够辨认并挑选本钱最优的 ECS 实例类型,乃至能够依据作业负载的需求运用贱价的抢占式实例。在负载下降或任务完结后,Karpenter 将主动开释不再需求的节点,完结灵敏的资源办理。

此外,Karpenter 的 binpack 和 drift 功用能够进一步优化节点费用和主动完结节点晋级。binpack 功用会主动将低效运用的 Node 替换为低标准节点,以提高集群运用率。而 drift 功用会替换掉状况违背预期的节点,保证 ACK 集群节点在长时间运转中一直维持在预期的状况,能够完结主动节点晋级等。

总  结

karpenter-provider-alibabacloud 的发布将 Karpenter 强壮的主动扩展才能带给阿里云用户,并为其供给了一种完好的端到端解决方案。经过这一扩展,阿里云环境中的 Kubernetes 集群能够愈加智能、灵敏地主动调整节点资源,协助企业完结按需资源供给,明显提高集群的可扩展性和资源优化功率。

此次,CloudPilot AI 与阿里云在开源社区的协作不只为阿里云用户带来了先进的技能解决方案,也进一步推动了 Karpenter 项意图开展,一同展示了两家企业同享与协作的开源精力。咱们信任,Karpenter 的继续立异将招引更多开发者和企业用户的重视与参加,咱们也欢迎更多的贡献者参加到 Karpenter 社区中,一同探究阿里云场景下 Karpenter 的新玩法。

曩昔十年,阿里云协助客户“上好云”,未来十年,CloudPilot AI 将携手阿里云,协助客户“用好云”!

最终,感谢以下初期贡献者(Github ID),他们不只经过提交高质量的代码为项目做出了重要贡献,还在项意图前期阶段供给了名贵的支撑和协助:

  • @daimaxiaxie

  • @jwcesign

  • @jxs1211

  • @helen-frank

  • @Vacant2333

  • @peng19940915

  • @B1F030

  • @ringtail

  • @IrisIris

  • @songkang7

公司介绍

云奇谋(CloudPilot.ai)是一家全球抢先的 Karpenter 保管云服务供给商,致力于经过智能化、主动化的云资源调度和编列技能,协助企业最大化云资源运用率。咱们秉持“让客户在云中花费的每一分钱都物超所值”的任务,为客户提高10倍的资源功率,一同将云本钱下降50%以上。

现在,开源K8s弹性弹性器 Karpenter 已为全球超500家知名企业在出产环境中供给服务,包含阿迪达斯、Anthropic、Slack、Figma等。云奇谋已为数十家全球顶尖科技公司供给服务,累计为客户节约超越30万美金,均匀节约67%。 挑选云奇谋,让每一笔开销都更才智。

免费试用,2步5分钟,下降50%云本钱:

cloudpilot.ai

扫描二维码推送至手机访问。

版权声明:本文由51Blog发布,如需转载请注明出处。

本文链接:https://www.51blog.vip/?id=748

分享给朋友:

“CloudPilot AI携手阿里云发布Karpenter阿里云 Provider,优化ACK集群主动扩展” 的相关文章

Java 面试用什么项目?满是商场秒杀 RPC,我吐了

Java 面试用什么项目?满是商场秒杀 RPC,我吐了

看了几百份简历,真的超越 90% 的小伙伴的项目是商城、RPC、秒杀、论坛、外卖、点评等等烂大街的项目,人人都知道这些项目烂大街了,但大部分同学仍是得硬着头皮做,没办法,网络上能找到的、教程比较完善的就这些项目了,做的话好歹有个项目,不做那就真能写校园做的废物学生办理体系了。 我深刻了解小伙伴的痛点...

开源关系型数据库,构建高效数据管理平台的关键

开源关系型数据库,构建高效数据管理平台的关键

开源关系型数据库(Open Source Relational Database Management System, OSRDBMS)是指遵循某种开源协议,允许用户自由使用、修改和分发的关系型数据库管理系统。它们通常由一个或多个社区、公司或个人开发和维护,并提供多种功能和工具,以满足不同的数据存储...

区块链 微信群,交流、学习与投资的桥梁

如果你想加入区块链相关的微信群,可以参考以下推荐:1. 磨链mochain社区 这是一个专注于区块链技术讨论和交流的社区,不定期进行线上技术交流学习和技术分享。群内成员主要分布在北京、上海、浙江、广东等地。 加入方式:扫码加微信xiongda_do,暗号:学习2. 区块链技术交流群...

大数据与云计算论文,融合与创新的时代浪潮

大数据与云计算论文,融合与创新的时代浪潮

1. 大数据与云计算 豆丁网 这篇文章介绍了大数据的特征、作用以及对大数据分析的方法理论。文章还分析了大数据的两种处理模式、处理流程以及关键技术,并提出了MapReduce与关系数据库融合技术,为未来大数据的工作提供了一个参考。2. 云计算和大数据技术发展现状与趋势 百度学术 本文主...

开源节流的意思, 开源节流

开源节流的意思, 开源节流

“开源节流”是一个成语,意思是指开辟财源,增加收入;节省开支,减少消耗。这个成语通常用来形容在财务或资源管理方面采取的措施,目的是在保持或增加收入的同时,减少不必要的支出,从而实现财务的稳定或增长。在日常生活中,人们常常会提到“开源节流”来鼓励节约和合理使用资源,以达到更好的经济效果。根据您提供的参...

区块链游戏平台,引领游戏行业新变革

区块链游戏平台,引领游戏行业新变革

1. DappRadar 简介:DappRadar是全球最大的Dapp市场数据和Dapp分发平台,提供基于以太坊、EOS和TRON的Dapp数据信息。 目标:展示整个Dapp生态系统的市场数据、统计数据图表和分析见解。 商业模式:应用市场广告收入。 主要用户群:DApp开发者...