基于 Kubernetes 的 Mutating Webhook机制实现了eci-profile,支持为调度到虚拟节点上的 Pod 自动追加Annotations、Labels、Tolerations等,实现自动修改Pod 的规格、镜像缓存、安全组等配置,降低您对业务 Pod 配置的维护成本。本文介绍如何配置eci-profile。
功能介绍
对于ECI的一些功能特性,例如指定ECI实例规格,启用镜像缓存等,需要在Pod中追加Annotation或者Label来实现。更多信息,请参见ECI Pod Annotation。
对于上述情况,eci-profile实现了自动追加Annotation和Label的功能。在eci-profile中,您可以自定义selector,在selector中同时指定筛选条件和要追加的Annotation和Label,满足selector筛选条件的Pod会自动追加指定的Annotation和Label。
前提条件
确保您已经创建Serverless集群,具体操作请参阅创建Serverless集群。
已在插件市场安装插件eci-profile,且插件正常运行。
确保kubectl工具已经连接目标集群。
selectors配置
创建Pod时,系统会按照selectors去匹配Pod,对于Label能够匹配上的Pod,会自动追加Annotation和Label,以便生效ECI的功能特性。
Selector 支持两种匹配方式:
命名空间标签匹配。
Pod标签匹配。
可以分别通过 namespaceLabels 和 objectLabels 字段来指定匹配的 Namespace 和 Pod 标签。通过 effect 字段配置的 Annotation 和 Label 会自动追加到匹配的 Pod 上。
说明
要了解 Selector 的生效情况,可以通过查看 Pod 上的 k8s.ctyun.cn/matched-selector 标签来判断。
新增的 Selector 不会应用于存量 Pod,仅对新创建的 Pod 生效,若需要对现有工作负载生效,请重新部署工作负载。
在一个 Selector 中,建议您至少配置 namespaceLabels 和 objectLabels 中的一个。如果两者同时配置了,则Pod需要同时匹配两者;如果两者均未配置或者为空对象,且配置了 effect,则 effect 对所有 Pod 均生效。
命名空间标签匹配。
假设想让集群中新创建的所有Pod都默认使用1C1G的规格,Selector配置模板如下:
apiVersion: eci.ctyun.cn/v1
kind: Selector
metadata:
name: 1c1g-global
spec:
namespaceLabels:
{} # 空对象,表示匹配所有Namespace
effect:
annotations:
k8s.ctyun.cn/eci-use-specs: s7.small.1
labels:
eci-schedulable: "true"
policy:
virtualNodeOnly: {}
priority: 1 # 优先级在创建Selector后,所有新创建的Pod都会调度到虚拟节点,并自动追加effect字段中配置的Annotation和Label,在这里annotations的效果是设置Pod的规格为s7.small.1(1C1G)。
说明
如果配置了大于规格的资源请求,则 Pod 创建会失败。如果不需要修改ECI Pod的配置,则可以不配置annotations。
此外,还可以为不同的命名空间创建不同的Selector,可批量对不同命名空间下的Pod配置不同的ECI功能特性。
例如,可以创建如下Selector启用镜像缓存:
apiVersion: eci.ctyun.cn/v1
kind: Selector
metadata:
name: enable-image-cache
spec:
namespaceLabels:
matchLabels:
namespace: image-cache # 指定命名空间
effect:
annotations:
k8s.ctyun.cn/eci-image-cache: "true" # 设置Pod启用镜像缓存
labels:
eci-schedulable: "true"
policy:
virtualNodeOnly: {}
priority: 1上述Selector创建后,只有命名空间为image-cache的Pod才会自动追加effect字段中配置的Annotation和Label,在这里annotations的效果是设置Pod启用镜像缓存。
2、Pod标签匹配
假设想让带有指定标签的Pod使用1C1G的规格,则可以创建如下Selector:
apiVersion: eci.ctyun.cn/v1
kind: Selector
metadata:
name: 1c1g-match-labels
spec:
objectLabels:
matchLabels:
app: nginx # 指定标签
effect:
annotations:
k8s.ctyun.cn/eci-use-specs: s7.small.1
labels:
eci-schedulable: "true"
policy:
virtualNodeOnly: {}
priority: 1上述Selector创建后,带有app: nginx标签的Pod都会调度到虚拟节点,并自动追加effect字段中配置的Annotation和Label,在这里annotations的效果是设置Pod的规格为1C1G。
优先级
Selector 支持通过priority字段指定优先级,优先级数值越大,优先级越高。如果某个 Pod 同时匹配多个 Selector,则优先级最高的 Selector 生效。
说明
若不配置priority字段,则默认优先级为0。