设置BCI Pod的故障处理策略
更新时间:2025-03-05
默认情况下,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快速交付,有完善的失败处理逻辑。 | 
配置示例
                YAML
                
            
            1apiVersion: apps/v1
2kind: Deployment
3metadata:
4  name: nginx
5  labels:
6    app: nginx
7spec:
8  replicas: 1
9  selector:
10    matchLabels:
11      app: nginx
12  template:
13    metadata:
14      name: nginx
15      labels:
16        app: nginx
17      annotations:
18        bci.virtual-kubelet.io/bci-fail-strategy: "fail-fast"  #设置Pod故障处理策略,不再重新创建
19    spec:
20      containers:
21      - name: nginx
22        image: nginx:1.7.9
23        ports:
24        - containerPort: 80
25        resources:
26          limits:
27            cpu: "1"
28            memory: "2Gi"
29      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确定当前调度周期内调度失败的原因。
                Plain Text
                
            
            1{
2    "conditions": [
3        {
4            "lastProbeTime": "2025-03-04T15:13:26Z",
5            "lastTransitionTime": "2025-03-04T15:13:26Z",
6            "message": "Create BCI failed because the specified instance is out of stock",
7            "reason": "NoStock",
8            "status": "False",
9            "type": "ContainerInstanceCreated"
10        }
11    ],
12    "message": "Create BCI failed because the specified instance is out of stock",
13    "reason":"ContainerInstanceScheduleFailed",
14    "phase": "Pending"
15}