文档

将调度失败的Pod调度到ECI

更新时间:

在ACK集群中创建的Pod默认会调度到真实节点(即ECS节点)上,当ECS节点的计算资源不足时,Pod会调度失败。基于该场景,您可以在ACK集群中部署virtual-kubelet-autoscaler插件,该插件会自动将因为资源不足而调度失败的Pod二次调度到虚拟节点上,以ECI来运行,从而提升业务的弹性能力。

背景信息

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

autoscaler

前提条件

已创建ACK集群,且已在集群中部署虚拟节点。具体操作,请参见创建Kubernetes托管版集群通过虚拟节点将Pod调度到ECI上运行

部署virtual-kubelet-autoscaler

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

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

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

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

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

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

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

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

测试virtual-kubelet-autoscaler的效果

确认节点资源使用情况

当ECS节点的计算资源不足时,virtual-kubelet-autoscaler插件才会将调度失败的Pod自动调度到虚拟节点上。测试virtual-kubelet-autoscaler的效果前,您可以在集群管理页的节点页面查看节点资源使用情况。

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

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

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

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

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

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

    节点调度.png

部署Deployment确认Pod调度情况

  1. 准备YAML文件。

    vim deployment-autoscaler.yaml

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

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: nginx-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
  2. 创建Deployment。

    kubectl create -f deployment-autoscaler.yaml
  3. 确认Pod调度情况。

    1. 查看Pod运行情况。

      kubectl get pods -o wide

      返回示例如下,可以看到用于测试的Deployment对应的Pod均运行在虚拟节点上。

      autoscaler2

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

      kubectl describe pod <pod-name>

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

      autoscaler3

  • 本页导读 (1)
文档反馈