全部产品
Search
文档中心

弹性容器实例:通过virtual-kubelet-autoscaler将Pod自动调度到ECI

更新时间:Sep 22, 2022

本文介绍当ACK集群中真实节点(即ECS节点)计算资源不足时,如何通过virtual-kubelet-autoscaler插件将Pod调度到虚拟节点(VK),为您的业务提高海量弹性能力。

背景信息

virtual-kubelet-autoscaler是阿里云提供的Kubernetes Autoscaler插件,在Pod调度时,如果没有匹配的node节点,会由virtual-kubelet-autoscaler进行接管,把调度失败的Pod重新调度到ECI上。

autoscaler

前提条件

已创建ACK集群,且已在集群中部署虚拟节点(VK)。更多信息,请参见ACK使用ECI

步骤一:安装virtual-kubelet-autoscaler

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

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

  3. 应用市场页面,找到ack-virtual-kubelet-autoscaler应用,然后单击该应用。

  4. 在应用详情页面,单击右上角的一键部署

  5. 创建面板,完成基本信息和参数配置。

    1. 选择目标集群、命名空间和发布名称,然后单击下一步

    2. 根据需要配置参数,然后单击确定

安装后,在集群管理页的左侧导航栏,选择应用>Helm,可以查看ack-virtual-kubelet-autoscaler的状态,当状态为已部署时,表示安装完成。

步骤二:确认节点资源使用情况

当真实节点计算资源不足时,virtual-kubelet-autoscaler插件才会将创建失败的Pod自动调度到虚拟节点(VK)上。验证virtual-kubelet-autoscaler的效果前,您可以集群管理页的节点页面查看节点资源使用情况。

  1. 在容器服务管理控制台,单击目标集群ID,进入集群管理页面。

  2. 在左侧导航栏选择节点管理>节点

  3. 查看节点资源使用情况。

    本文采用的示例环境如下,您可以根据自身集群情况进行模拟。

    • 真实节点:1台ECS,规格为ecs.c6e.xlarge(4 vCPU 8 GiB内存),已部署1个deployment,CPU请求接近100%。

    • 虚拟节点:1个,名称为virtual-kubelet-cn-beijing-k,未部署工作负载。

    autoscaler1

步骤三:部署deployment

下文以命令行的形式部署deployment,您也可以在容器服务管理控制台的集群管理页,选择工作负载>无状态来部署deployment。

  1. 连接集群。具体操作,请参见在CloudShell上通过kubectl管理Kubernetes集群

  2. 准备YAML文件。

    vim deployment-autoscaler.yaml

    deployment-autoscaler.yaml的内容示例如下,配置副本数(replicas)为4,每个副本的容器声明了2 vCPU 4 GiB的计算资源。

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: nginx-deployment-autoscaler
      labels:
        app: nginx
    spec:
      replicas: 4
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          labels:
            app: nginx
        spec:
          containers:
          - name: nginx
            image: registry-vpc.cn-beijing.aliyuncs.com/eci_open/nginx:1.14.2
            ports:
            - containerPort: 80
            resources:
              requests:
                cpu: 2
                memory: 4Gi
  3. 创建deployment。

    kubectl create -f deployment-autoscaler.yaml

步骤四:确认Pod调度情况

  1. 查看Pod运行情况。

    kubectl get pods -o wide

    返回示例如下,可以看到步骤三创建的Pod均运行在虚拟节点上。

    autoscaler2
  2. 查看Pod的事件信息,确认调度情况。

    示例查看名为nginx-deployment-autoscaler-54bbf8898-7fdrl的Pod的信息,命令如下:

    kubectl describe pod nginx-deployment-autoscaler-54bbf8898-7fdrl

    返回示例如下,在Events中可以看到由于真实节点计算资源不足,kube-scheduler通过virtual-kubelet-autoscaler把Pod调度到了虚拟节点上。

    autoscaler3