当您需要在短时间内快速创建大量Pod时,ECS节点扩容速度可能无法满足要求,而预留额外的ECS节点又会产生资源浪费。借助ACK虚拟节点,您可以将Pod快速地调度到弹性容器实例ECI上运行,无需购买和管理ECS节点。本文介绍如何在ACK托管集群中将Pod调度到ECI上运行。
适用场景
在ECI上运行Pod适合应对突发流量,也能降低计算成本。典型场景包括:
有明显波峰波谷的在线业务
在线教育、电商等业务的流量通常有明显的波峰波谷,使用ECI Pod可以更快速地应对突发流量,并且能显著减少固定资源池的维护,降低计算成本。
非持续运行的计算任务
使用ECI Pod运行计算任务,无需保留固定节点,仅需为任务执行期间的计算资源付费,降低计算成本,例如Spark、AI任务等。
前提条件
ACK集群的Kubernetes版本为1.16及以上,且集群所在地域支持使用ECI。
您可以参见ECI支持的地域和可用区确认是否支持集群所属地域,然后登录弹性容器实例控制台开通ECI服务。
操作步骤
步骤一:部署ack-virtual-node组件
下文操作以ACK托管集群为例,ACK专有集群需要通过应用市场页面部署ack-virtual-node组件,具体请参见部署ack-virtual-node组件。
登录容器服务管理控制台,在左侧导航栏选择集群列表。
在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择 。
在组件管理页面的核心组件区域,找到ACK Virtual Node,然后单击安装,并按照页面提示完成操作。
安装时,使用集群默认虚拟交换机和安全组作为初始ECI配置参数。如需修改,可通过配置eci-profile更新。
步骤二:将Pod调度到ECI上运行
下文操作以为Pod或Namespace添加Label的方式为例,介绍如何调度Pod到虚拟节点以ECI运行。更多调度方案请参见调度Pod至虚拟节点。
如果您有个别Pod需要调度到ECI上运行,可以直接为Pod添加特定的Label:alibabacloud.com/eci: "true"
,该Pod将被调度到x86架构的虚拟节点上以ECI运行。
使用以下YAML创建Deployment。
kubectl create -f eci-pod.yaml
eci-pod.yaml的内容示例如下:
以下YAML通过
k8s.aliyun.com/eci-use-specs
的Annotation指定ECI Pod的规格,如需了解更多关于ECI Pod规格配置的方式,请参见指定ECI算力规格。apiVersion: apps/v1 kind: Deployment metadata: name: test labels: app: test spec: replicas: 2 selector: matchLabels: app: nginx template: metadata: name: test labels: app: nginx alibabacloud.com/eci: "true" # 添加特定Lable将Pod调度到ECI annotations: k8s.aliyun.com/eci-use-specs: "2-4Gi" # 指定ECI Pod的vCPU为2 vCPU,内存为4 GiB spec: containers: - name: nginx image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6 ports: - containerPort: 80
确认Pod是否运行在虚拟节点上。
kubectl get pod -o wide -l app=nginx
预期返回如下,在
NODE
字段中可以看到Pod已经调度到虚拟节点。NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES test-86f7fbc94f-g5m22 1/1 Running 0 38s 10.16.XX.XX virtual-kubelet-cn-hangzhou-j <none> <none> test-86f7fbc94f-r4wcn 1/1 Running 0 38s 10.16.XX.XX virtual-kubelet-cn-hangzhou-j <none> <none>
查看ECI Pod详情。
kubectl get pod <pod-name> -o yaml
在返回的YAML详情中,您可以通过
k8s.aliyun.com/eci-instance-id
获取对应的ECI实例ID,通过k8s.aliyun.com/eci-instance-spec
确认ECI Pod的实际计费规格。
如果您有一类Pod需要调度到ECI上运行,可以创建一个Namespace并添加特定的Label:alibabacloud.com/eci: "true"
,该Namespace下的所有Pod将被调度到x86架构的虚拟节点上以ECI运行。
创建命名空间
vk
,并为命名空间添加特定的Label。kubectl create ns vk kubectl label namespace vk alibabacloud.com/eci=true
使用以下YAML在命名空间
vk
下创建Deployment。kubectl create -f eci-namespace.yaml
eci-namespace.yaml的内容示例如下:
以下YAML通过
k8s.aliyun.com/eci-use-specs
的Annotation指定ECI Pod的规格,如需了解更多关于ECI Pod规格配置的方式,请参见指定ECI算力规格。apiVersion: apps/v1 kind: Deployment metadata: name: test namespace: vk # 指定添加了特定Label的Namespace,将Pod调度到ECI labels: app: test spec: replicas: 2 selector: matchLabels: app: nginx template: metadata: name: test labels: app: nginx annotations: k8s.aliyun.com/eci-use-specs: "2-4Gi" # 指定ECI Pod的vCPU为2 vCPU,内存为4 GiB spec: containers: - name: nginx image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6 ports: - containerPort: 80
确认Pod是否运行在虚拟节点上。
kubectl get pod -o wide -l app=nginx -n vk
预期返回如下,在
NODE
字段中可以看到Pod已经调度到虚拟节点。NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES test-8f54bcfb5-86pvc 1/1 Running 0 14s 10.16.XX.XX virtual-kubelet-cn-hangzhou-j <none> <none> test-8f54bcfb5-skvkg 1/1 Running 0 14s 10.16.XX.XX virtual-kubelet-cn-hangzhou-j <none> <none>
查看ECI Pod详情。
kubectl get pod <pod-name> -o yaml -n vk
在返回的YAML详情中,您可以通过
k8s.aliyun.com/eci-instance-id
获取对应的ECI实例ID,通过k8s.aliyun.com/eci-instance-spec
确认ECI Pod的实际计费规格。
- 本页导读 (1)
- 适用场景
- 前提条件
- 操作步骤
- 步骤一:部署ack-virtual-node组件
- 步骤二:将Pod调度到ECI上运行
- 相关文档