默认情况下,ECI Pod创建失败后,系统会自动重试尝试创建。如果您希望尽快得到创建结果以便及时处理故障,可以修改ECI Pod的故障处理策略。
配置说明
在虚拟节点上创建ECI Pod时,可能会因为库存不足等原因导致Pod创建失败,默认情况下,系统会自动进行重调度,尝试重新创建Pod。您可以通过添加k8s.aliyun.com/eci-fail-strategy
的Annotation来修改ECI Pod的故障处理策略,设置ECI Pod创建失败后是否尝试重新创建。
Annotation请添加在Pod的metadata下,例如:创建Deployment时,Annotation需添加在spec>template>metadata下。
仅支持在创建ECI Pod时添加ECI相关Annotation来生效ECI功能,更新ECI Pod时添加或者修改ECI相关Annotation均不会生效。
k8s.aliyun.com/eci-fail-strategy
的取值说明如下:
取值 | 说明 | 场景 |
fail-back | 失败自动恢复。即Pod创建失败后自动尝试重新创建。此时,Pod会保持Pending状态,直到创建成功变为Running状态。 | 侧重成功率,能够接受Pod延迟交付。 |
fail-over | 失败转移。效果等同于fail-back。 | |
fail-fast | 快速失败。Pod创建失败后直接报错。Pod显示为ProviderFailed状态,由上层编排决定是否重试,或者把Pod创建调度到普通节点。 | 侧重效率,希望Pod快速交付,有完善的失败处理逻辑。 |
不推荐通过k8s.aliyun.com/eci-reschedule-enable
设置重调度。
配置示例
apiVersion: apps/v1
kind: Deployment
metadata:
name: test
labels:
app: test
spec:
replicas: 1
selector:
matchLabels:
app: nginx
template:
metadata:
name: nginx-test
labels:
app: nginx
alibabacloud.com/eci: "true"
annotations:
k8s.aliyun.com/eci-fail-strategy: "fail-fast" #设置Pod创建失败后直接报错,不再重新创建
k8s.aliyun.com/eci-use-specs: "ecs.c6.large"
spec:
containers:
- name: nginx
image: registry.cn-shanghai.aliyuncs.com/eci_open/nginx:1.14.2
ports:
- containerPort: 80
以上YAML示例中,ECI Pod的故障处理策略为fail-fast。如果Pod长时间Pending,您可以查看Pod status.reason。
如果Pod status.reason为ContainerInstanceScheduleFailed,则表示ECI调度失败。此时查看Pod status condition,通过ContainerInstanceCreated的reason和message可以确定具体原因,进而采取相应措施,例如修改指定的规格,设置多可用区等。更多信息,请参见ContainerInstanceCreated。
如果Pod status.reason为空(fail-fast一般不会出现该情况),可以查看Pod status condition,通过ContainerInstanceCreated的status确认调度状态。
如果ContainerInstanceCreated为True,则表示ECI调度成功,是Sandbox创建异常。
如果ContainerInstanceCreated为False,且reason不是Creating,则表示ECI调度还未成功,需要继续等待。
以库存不足创建ECI Pod失败为例,当Pod的故障处理策略为fail-fast时,Pod status condition为ContainerInstanceCreated的示例如下:
如果Pod的故障处理策略为fail-back,Pod创建失败后系统会自动尝试重调度。此时,Pod status.reason不会显示ContainerInstanceScheduleFailed,您也可以查看Pod status condition,通过ContainerInstanceCreated的reason和message确定当前调度周期内调度失败的原因。
{
"conditions": [
{
"lastProbeTime": "2023-03-30T18:11:31Z",
"lastTransitionTime": "2023-03-30T18:11:31Z",
"message": "Create ECI failed because the specified instance is out of stock. %s",
"reason": "ContainerGroup.NoStock",
"status": "False",
"type": "ContainerInstanceCreated"
}
],
"Reason":"ContainerInstanceScheduleFailed",
"phase": "Pending"
}