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