本文介绍部署在K8s集群上的应用如何使用虚拟节点(Virtual Node)以及弹性容器实例(ECI)。
前提条件
- 已登录弹性容器实例控制台开通弹性容器实例服务。
- 确认集群所在区域在ECI支持的地域列表内。您可以登录弹性容器实例控制台查看已支持的地域和可用区。
- ACK集群已安装虚拟节点组件。关于安装集群组件,请参见通过部署ACK虚拟节点组件创建ECI Pod。
使用限制
仅适用于容器服务ACK托管版或容器服务ACK专有版集群,且版本大于1.14。
调度EDAS应用到虚拟节点
方式一:配置Pod标签
在EDAS上创建或部署应用时,在应用高级设置页签,将标签(Label)配置的名称设置为alibabacloud.com/eci,值设置为true,应用Pod将会被调度到虚拟节点。
方式二:配置命名空间标签
为K8s集群命名空间增加标签:alibabacloud.com/eci=true
后,新建的Pod将被调度到虚拟节点上,不影响已经运行中的Pod。
方式三:ECI弹性调度
在EDAS上创建或部署应用时,在应用高级设置页签,将注解(Annotation)配置的名称设置为alibabacloud.com/burst-resource,值有如下两种配置。
- eci:当集群普通节点的资源不足时,使用ECI。
- eci_only:只使用ECI。
方式四:自定义弹性资源优先级调度
为应用ID为933ff653-xxxx-xxxx-xxxx-d127a75cxxxx
的EDAS K8s应用配置ECS和ECI混合调度,当普通ECS节点资源不足时,Pod将被调度到虚拟节点上。
apiVersion: scheduling.alibabacloud.com/v1alpha1
kind: ResourcePolicy
metadata:
name: edas-app-name //建议与EDAS应用名相同
namespace: edas-app-namespace //与EDAS应用保持相同命名空间
spec:
selector:
edas.appid: 933ff653-xxxx-xxxx-xxxx-d127a75cxxxx
strategy: prefer
units:
- resource: ecs
- resource: eci
更多内容,请参见自定义弹性资源优先级调度。
方式五:使用virtual-kubelet-autoscaler组件调度Pod到ECI
virtual-kubelet-autoscaler是阿里云提供的Kubernetes Autoscaler插件。在Pod进行调度时,如果没有匹配的Node节点(例如已有的ECS work节点资源不足),那么将会由virtual-kubelet-autoscaler接管,把调度失败的Pod重新调度到ECI(虚拟节点)上。
安装组件,请参见安装virtual-kubelet-autoscaler。
方式六:配置ECI Profile
修改K8s集群kube-system命名空间下名为eci-profile的ConfigMap。
为应用ID为933ff653-xxxx-xxxx-xxxx-d127a75cxxxx
的EDAS K8s应用配置ECI Profile。该配置会将应用的Pod调度到ECI实例上,并且自动开启镜像缓存功能,增加created-by-eci=true
的标签。
apiVersion: v1
kind: ConfigMap
metadata:
name: eci-profile
namespace: kube-system
data:
vpcId: "vpc-xxx"
securityGroupId: "sg-xxx"
vswitchIds: "vsw-111,vsw-222"
enableClusterIp: "true"
enableHybridMode: "false"
enablePrivateZone: "false"
selectors: |
[
{
"name":"for-edas-app-1",
"objectSelector":{
"matchLabels":{
"edas.appid": 933ff653-xxxx-xxxx-xxxx-d127a75cxxxx
}
},
"effect":{ #需要动态追加的Annotation和Label
"annotations":{
"k8s.aliyun.com/eci-image-cache": "true"
},
"labels":{
"created-by-eci":"true"
}
}
}
]
更多内容,请参见配置ECI Profile。