You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

K8s v1.28启用SidecarContainers后Pod仍Pending问题求助

Kubernetes v1.28 SidecarContainers特性启用后Pod Pending问题排查

问题描述

使用Kubernetes v1.28版本尝试启用SidecarContainers alpha特性,已在API Server配置文件/etc/kubernetes/manifests/kube-apiserver.yaml中添加--feature-gates=SidecarContainers=true,但部署的Pod始终处于Pending状态。

执行kubectl describe po sidecar-demo后,事件中出现如下警告:

Events:
  Type     Reason            Age   From               Message
  ----     ------            ----  ----               -------
  Warning  FailedScheduling  40s   default-scheduler  0/2 nodes are available: 2 Pod has a restartable init container and the SidecarContainers feature is disabled. preemption: 0/2 nodes are available: 2 Preemption is not helpful for scheduling..

相关配置文件

Deployment配置

apiVersion: apps/v1
kind: Deployment
metadata:
  creationTimestamp: null
  labels:
    app: sidecar-demo
  name: sidecar-demo
spec:
  replicas: 1
  selector:
    matchLabels:
      app: sidecar-demo
  strategy: {}
  template:
    metadata:
      creationTimestamp: null
      labels:
        app: sidecar-demo
    spec:
      containers:
      - image: alpine:latest
        name: main
        command: ['sh', '-c', 'while true; do echo "logging" >> /opt/logs.txt; sleep 1; done']
        volumeMounts:
          - name: data
            mountPath: /opt
      initContainers:
      - image: alpine:latest
        name: sidecar
        restartPolicy: Always
        command: ['sh', '-c', 'tail -F /opt/logs.txt']
        volumeMounts:
          - name: data
            mountPath: /opt
      volumes:
        - name: data
          emptyDir: {}

API Server配置(关键部分)

apiVersion: v1
kind: Pod
metadata:
  namespace: kube-system
  name: kube-apiserver
spec:
  containers:
  - command:
    - kube-apiserver
    # 省略其他参数
    - --feature-gates=SidecarContainers=true
    image: registry.k8s.io/kube-apiserver:v1.28.1

问题根源

SidecarContainers作为alpha特性,仅在API Server开启特性门控是不够的,必须同时在调度器(Scheduler)和所有节点的Kubelet上开启该特性门控。当前仅API Server启用了特性,调度器未识别到特性开启,因此判定Pod的可重启init容器配置不合法,拒绝调度。

解决步骤

1. 启用调度器的SidecarContainers特性

编辑调度器配置文件/etc/kubernetes/manifests/kube-scheduler.yaml,在command字段中添加--feature-gates=SidecarContainers=true:

apiVersion: v1
kind: Pod
metadata:
  namespace: kube-system
  name: kube-scheduler
spec:
  containers:
  - command:
    - kube-scheduler
    # 省略其他参数
    - --feature-gates=SidecarContainers=true
    image: registry.k8s.io/kube-scheduler:v1.28.1

保存后,kubelet会自动重启调度器Pod,等待其进入Running状态。

2. 启用所有节点Kubelet的SidecarContainers特性

在每个节点上执行以下操作:

  • 编辑Kubelet配置文件/var/lib/kubelet/config.yaml,添加或修改featureGates字段:
    featureGates:
      SidecarContainers: true
    
  • 重启Kubelet服务:
    systemctl restart kubelet
    

3. 验证特性启用状态

  • 检查API Server:
    kubectl get pods -n kube-system kube-apiserver-<节点名称> -o yaml | grep -A5 "feature-gates"
    
  • 检查调度器:
    kubectl get pods -n kube-system kube-scheduler-<节点名称> -o yaml | grep -A5 "feature-gates"
    
  • 检查节点Kubelet:
    kubectl get node <节点名称> -o yaml | grep -A5 "featureGates"
    

确保所有组件的特性门控均已设置为SidecarContainers=true。

4. 重新部署Pod

删除现有Deployment并重新应用配置:

kubectl delete deployment sidecar-demo
kubectl apply -f <你的Deployment文件路径>

此时Pod应能正常调度并进入Running状态。

内容的提问来源于stack exchange,提问作者chadmcrowell

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 23:58:10