默認情況下,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"
}