由于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