由于ECI Pod和负责同步Service的组件是并行启动运行的,当集群中存在大量Service和Endpoint时,可能会出现因ClusterIp未同步而导致Pod访问超时的情况。本文介绍如何配置ECI Pod在ClusterIP同步后再创建,确保Pod中的容器在访问Service时,不会因为ClusterIp还未同步而导致访问超时。
功能说明
在ACK+ECI的场景下,ECI Pod和负责同步Service的组件是并行启动运行的。当集群中存在大量Service和Endpoint时,同步Service需要一定时间。此时,如果Pod中的容器访问了未同步ClusterIp的Service,则会造成访问超时。
例如:在Spark等大数据场景下,Pod创建后需要立即访问Driver或者其他服务的Service,如果此时CoreDNS的ClusterIp未同步完成,那么就会造成Pod访问超时而导致任务结束。
针对上述问题,ECI支持了等待ClusterIP同步完成后再开始创建Pod的功能,以此来确保Pod中的容器在访问Service时,不会因为ClusterIp还未同步而导致访问超时。
启用此功能时,如果集群中的Service和Endpoint规模较大,会影响Pod的启动时间。
配置说明
您可以在Pod metadata中添加Annotation来配置ECI Pod在ClusterIP同步后再开始创建,对应的Annotation为k8s.aliyun.com/eci-wait-clusterip-ready
。取值为*
时表示等待ClusterIP同步完成再开始创建Pod。
Annotation请添加在Pod的metadata下,例如:创建Deployment时,Annotation需添加在spec>template>metadata下。
仅支持在创建ECI Pod时添加ECI相关Annotation来生效ECI功能,更新ECI Pod时添加或者修改ECI相关Annotation均不会生效。
配置示例
apiVersion: apps/v1
kind: Deployment
metadata:
name: test
labels:
app: test
spec:
replicas: 2
selector:
matchLabels:
app: nginx
template:
metadata:
name: nginx-test
labels:
app: nginx
annotations:
k8s.aliyun.com/eci-wait-clusterip-ready: "*" # 等待ClusterIP同步完成再启动Pod
spec:
containers:
- name: nginx
image: registry.cn-shanghai.aliyuncs.com/eci_open/nginx:1.14.2
ports:
- containerPort: 80