在ACK集群中创建的Pod默认会调度到真实节点(即ECS节点)上,当ECS节点的计算资源不足时,Pod会调度失败。基于该场景,您可以在ACK集群中部署virtual-kubelet-autoscaler插件,该插件会自动将因为资源不足而调度失败的Pod二次调度到虚拟节点上,以ECI来运行,从而提升业务的弹性能力。
背景信息
virtual-kubelet-autoscaler是阿里云提供的Kubernetes Autoscaler插件,在Pod调度时,如果没有匹配的ECS节点,会由virtual-kubelet-autoscaler进行接管,把调度失败的Pod重新调度到ECI上。
前提条件
已创建ACK集群,且已在集群中部署虚拟节点。具体操作,请参见创建Kubernetes托管版集群和通过虚拟节点将Pod调度到ECI上运行。
部署virtual-kubelet-autoscaler
登录容器服务管理控制台。
在左侧导航栏,选择市场>应用市场。
找到ack-virtual-kubelet-autoscaler应用,然后单击该应用。
在应用详情页面,单击右上角的一键部署。
在创建面板,完成基本信息和参数配置。
选择目标集群、命名空间和发布名称,然后单击下一步。
根据需要配置参数,然后单击确定。
部署后,在集群管理页的左侧导航栏,选择应用>Helm,可以查看应用发布状态,当状态为已部署时,表示部署完成。
测试virtual-kubelet-autoscaler的效果
确认节点资源使用情况
当ECS节点的计算资源不足时,virtual-kubelet-autoscaler插件才会将调度失败的Pod自动调度到虚拟节点上。测试virtual-kubelet-autoscaler的效果前,您可以在集群管理页的节点页面查看节点资源使用情况。
在容器服务管理控制台的集群页面,单击目标集群ID,进入集群管理页面。
在左侧导航栏选择节点管理>节点。
查看节点资源使用情况。
本文采用的示例环境如下,您可以根据自身集群情况进行模拟。
真实节点:1个ECS节点,规格为ecs.c7.xlarge(4 vCPU 8 GiB内存),已部署1个Deployment,CPU请求接近100%。
虚拟节点:1个,名称为virtual-kubelet-cn-beijing-g,未部署工作负载。
部署Deployment确认Pod调度情况
准备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
创建Deployment。
kubectl create -f deployment-autoscaler.yaml
确认Pod调度情况。
查看Pod运行情况。
kubectl get pods -o wide
返回示例如下,可以看到用于测试的Deployment对应的Pod均运行在虚拟节点上。
查看Pod的事件信息,确认调度情况。
kubectl describe pod <pod-name>
返回示例如下,在Events中可以看到由于真实节点计算资源不足,kube-scheduler通过virtual-kubelet-autoscaler把Pod调度到了虚拟节点上。
- 本页导读 (1)