详情页标题前

阿里云容器服务ACK实现ECI弹性伸缩-云淘科技

详情页1

在ACK集群中部署服务时,您可以使用容忍度和节点亲和性来声明只使用ECS或ECI弹性资源,或者是在ECS资源不足时自动申请ECI资源。通过配置ECI伸缩策略可以满足您在不同工作负载场景下对弹性资源的不同需求。本文介绍如何配置ECI弹性伸缩策略。

相关概念

  • 污点:ACK集群中的Virtual Node默认都会打上污点virtual-kubelet.io/provider=alibabacloud:NoSchedule,以避免您在不知情的情况下使用ECI弹性资源。

  • 容忍度:容忍度(Toleration)应用于Pod上。容忍度允许调度器将该Pod调度到带有对应污点的Node。在ACK集群中,需要配置以下Toleration来容忍污点virtual-kubelet.io/provider=alibabacloud:NoSchedule,才能让Pod使用ECI资源。

          tolerations:
          - key: virtual-kubelet.io/provider
            operator: Equal
            value: alibabacloud
            effect: NoSchedule
  • 节点亲和性:节点亲和性(nodeAffinity)规定了Pod调度时的软需求或者偏好,且在这种偏好不被满足时成功调度该Pod到其他节点。

前提条件

已在ACK集群Pro版中部署ack-virtual-node。具体操作,请参见ACK使用ECI。

操作步骤

下文将介绍如何通过污点、容忍度、节点亲和性完成以下调度策略:

  • 只使用ECI:只使用ECI弹性资源,不使用集群的ECS资源。

  • 优先使用ECS:当前集群ECS资源不足时,使用ECI弹性资源。

  • 只使用ECS:只使用集群现有的ECS资源。

只使用ECI

展开查看YAML文件

apiVersion: apps/v1
kind: Deployment
metadata:
  name: eci-only
spec:
  replicas: 3
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
      tolerations:
      - key: virtual-kubelet.io/provider
        operator: Equal
        value: alibabacloud
        effect: NoSchedule
      affinity:
        nodeAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
            nodeSelectorTerms:
            - matchExpressions:
              - key: type
                operator: In
                values:
                - virtual-kubelet
      containers:
      - name: my-container
        image: nginx
            

优先使用ECS

展开查看YAML文件

apiVersion: apps/v1
kind: Deployment
metadata:
  name: ecs-prefer
spec:
  replicas: 3
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
      tolerations:
      - key: virtual-kubelet.io/provider
        operator: Equal
        value: alibabacloud
        effect: NoSchedule
      affinity:
        nodeAffinity:
          preferredDuringSchedulingIgnoredDuringExecution:
          - weight: 1
            preference:
              matchExpressions:
              - key: type
                operator: NotIn
                values:
                - virtual-kubelet
      containers:
      - name: my-container
        image: nginx

当您希望将负载优先部署在带有标签label_1=key_1的ECS节点池上,且该节点池资源不足时使用virtual-node进行弹性伸缩时,可以通过以下方式部署。

展开查看YAML文件

apiVersion: apps/v1
kind: Deployment
metadata:
  name: some-ecs-prefer
spec:
  replicas: 2
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
      tolerations:
      - key: virtual-kubelet.io/provider
        operator: Equal
        value: alibabacloud
        effect: NoSchedule
      affinity:
        nodeAffinity:
# 指定Pod必须调度到带有label_1:key_1或type:virtual-kubelet标签的节点上。
          requiredDuringSchedulingIgnoredDuringExecution:
            nodeSelectorTerms:
            - matchExpressions:
              - key: label_1
                operator: In
                values:
                - key_1
            - matchExpressions:
              - key: type
                operator: In
                values:
                - virtual-kubelet
# 指定Pod优先调度到带有label_1:key_1标签的节点上。
          preferredDuringSchedulingIgnoredDuringExecution:
          - weight: 100
            preference:
              matchExpressions:
              - key: label_1
                operator: In
                values:
                - key_1
          - weight: 1
            preference:
              matchExpressions:
              - key: type
                operator: In
                values:
                - virtual-kubelet
      containers:
      - name: my-container
        image: nginx

说明

  • 如果您在与nodeAffinity类型关联的nodeSelectorTerms中指定多个条件,只要其中一个nodeSelectorTerms满足(各个条件按逻辑或操作组合)时,Pod就可以被调度到节点上。

  • 如果您在与nodeSelectorTerms中的条件相关联的单个matchExpressions字段中指定多个表达式,则只有当所有表达式都满足(各表达式按逻辑与操作组合)时,Pod才能被调度到节点上。

  • 使用preferredDuringSchedulingIgnoredDuringExecution实现优先ECS调度时,不能保证仅在ECS资源不足时才调度到ECI上。也会存在ECS资源充足的情况下,Pod也会被调度到ECI上的场景。

只使用ECS

为了避免您使用价格较为昂贵的ECI实例,Virtual Node默认有污点(Taints)。

      virtual-kubelet.io/provider=alibabacloud:NoSchedule

因此,只要您未配置对于该污点的容忍度,Pod将只调度到ECS上。

展开查看YAML文件

apiVersion: apps/v1
kind: Deployment
metadata:
  name: ecs-only
spec:
  replicas: 3
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
      containers:
      - name: my-container
        image: nginx

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

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

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

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

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

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

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

相关推荐

  • 阿里云容器服务ACK实现ECI Pod可用区打散以及亲和调度-云淘科技

    高可用以及高性能是分布式任务执行过程中的重要要求。在ACK Pro版集群中,您可以通过Kubernetes原生调度语义实现分布式任务的跨可用区打散,以达到高可用区部署的要求,或者通过Kubernetes原生调度语义实现分布式任务在指定可用区中的亲和性部署,以达到高性能部署的要求。本文介绍如何实现ECI Pod可用区打散以及亲和调度。 说明 本文功能目前处于白…

    阿里云容器服务 2023年12月10日
  • 阿里云容器服务ACK实现ECI Pod可用区打散以及亲和调度-云淘科技

    高可用以及高性能是分布式任务执行过程中的重要要求。在ACK Pro版集群中,您可以通过Kubernetes原生调度语义实现分布式任务的跨可用区打散,以达到高可用区部署的要求,或者通过Kubernetes原生调度语义实现分布式任务在指定可用区中的亲和性部署,以达到高性能部署的要求。本文介绍如何实现ECI Pod可用区打散以及亲和调度。 说明 本文功能目前处于白…

    阿里云容器服务 2023年12月10日
  • 信息流广告,信息流部分建议宽度830px,只针对默认列表样式,顺序随机
  • 阿里云容器服务ACK实现ECI Pod可用区打散以及亲和调度-云淘科技

    高可用以及高性能是分布式任务执行过程中的重要要求。在ACK Serverless集群Pro版中,您可以通过Kubernetes原生调度语义实现分布式任务的跨可用区打散,以达到高可用区部署的要求,或者通过Kubernetes原生调度语义实现分布式任务在指定可用区中的亲和性部署,以达到高性能部署的要求。本文介绍如何实现ECI Pod可用区打散以及亲和调度。 重要…

    2023年12月10日

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

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

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