详情页标题前

阿里云容器服务ACK使用ack-autoscaling-placeholder实现容器秒级伸缩-云淘科技

详情页1

ack-autoscaling-placeholder为集群的自动扩展提供了缓冲区,它适用于工作负载需要快速启动而无需考虑节点资源不足的使用场景。本文介绍如何使用ack-autoscaling-placeholder实现容器秒级伸缩

前提条件

您已为ACK集群开通自动伸缩。关于开通自动伸缩的操作步骤,请参见节点自动伸缩。

操作步骤

  1. 登录容器服务管理控制台。

  2. 在控制台左侧导航栏,选择市场 > 应用市场

  3. 应用目录页签,搜索ack-autoscaling-placeholder,然后单击ack-autoscaling-placeholder

  4. ack-autoscaling-placeholder页面,单击一键部署

  5. 创建面板,选择集群命名空间,然后单击下一步。选择Chart版本,编辑参数,然后单击确定

    创建成功后,在应用 > Helm页面,可查看到该应用状态为已部署

  6. 在集群管理页左侧导航栏,选择应用 > Helm

  7. Helm页面,单击ack-autoscaling-placeholder操作列的更新。然后在更新发布面板中,更新YAML,然后单击确定

    nameOverride: ""
    fullnameOverride: ""
    ##
    priorityClassDefault:
      enabled: true
      name: default-priority-class
      value: -1
    
    ##
    deployments:
       - name: ack-place-holder
         replicaCount: 1
         containers:
           - name: placeholder
             image: registry-vpc.cn-shenzhen.aliyuncs.com/acs/pause:3.1
             pullPolicy: IfNotPresent
             resources:
               requests:
                 cpu: 4                  #资源占位4C8G
                 memory: 8               
         imagePullSecrets: {}
         annotations: {}
         nodeSelector:                   #节点选择
           demo: "yes"  
         tolerations: []
         affinity: {}
         labels: {}
  8. 部署工作负载的PriorityClass。

    本文示例定义一个优先级较高的PriorityClass。

    kubectl apply -f priorityClass.yaml
    apiVersion: scheduling.k8s.io/v1
    kind: PriorityClass
    metadata:
      name: high-priority
    value: 1000000              #配置优先级。
    globalDefault: false
    description: "This priority class should be used for XYZ service pods only."
  9. 部署实际的工作负载。

    kubectl apply -f workload.yaml
    apiVersion: apps/v1 
    kind: Deployment
    metadata:
      name: placeholder-test
      labels:
        app: nginx
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          labels:
            app: nginx
        spec:
          nodeSelector:                        #节点选择。
            demo: "yes"
          priorityClassName: high-priority     #这里写入第8步配置的PriorityClass名称。
          containers:
          - name: nginx
            image: nginx:1.7.9 
            ports:
            - containerPort: 80
            resources:       
              requests:      
                cpu: 3                         #实际负载的资源需求。
                memory: 5

    从下图可以看到,实际工作负载由于Pod配置了高优先级的PriorityClass。当节点资源不足时,会将占位容器placeHolder进行驱逐,此时占位容器placeHolder处于Pending状态。由于集群开通了自动伸缩,此状态会触发ACK集群进行扩容。实现了工作负载的秒级弹出阿里云容器服务ACK使用ack-autoscaling-placeholder实现容器秒级伸缩-云淘科技阿里云容器服务ACK使用ack-autoscaling-placeholder实现容器秒级伸缩-云淘科技

实现原理

使用优先级非常低(负数)的占位容器来超额配置,以保留其他Pod可以使用的资源。如果集群没有可用的资源,真正的工作负载也会将占位容器所占用的资源抢占,实现快速启动,然后结合同时使用Cluster-Autoscaler,迫使集群进行节点维度的扩展。

内容没看懂? 不太想学习?想快速解决? 有偿解决: 联系专家

阿里云企业补贴进行中: 马上申请

腾讯云限时活动1折起,即将结束: 马上收藏

同尘科技为腾讯云授权服务中心。

购买腾讯云产品享受折上折,更有现金返利:同意关联,立享优惠

转转请注明出处:https://www.yunxiaoer.com/156954.html

(0)
上一篇 2023年12月10日 上午12:46
下一篇 2023年12月10日 上午12:47
详情页2

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信
本站为广大会员提供阿里云、腾讯云、华为云、百度云等一线大厂的购买,续费优惠,保证底价,买贵退差。