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

EKS部署Pod报错MountVolume挂载失败kube-root-ca.crt未注册

问题描述

在AWS EKS集群部署简单批处理任务Pod时,遇到存储卷挂载报错,核心报错信息如下:

MountVolume.SetUp failed for volume "kube-api-access-cvwdt" : object "default"/"kube-root-ca.crt" not registered

异常Pod事件信息

对异常Pod执行kubectl describe pod获取的事件日志如下:

Normal   Scheduled    59s                default-scheduler  Successfully assigned default/stock-api to ip-192-168-63-5.us-west-2.compute.internal
  Normal   Pulling      58s                kubelet            Pulling image "mpriv32/stockapi:latest"
  Normal   Pulled       38s                kubelet            Successfully pulled image "mpriv32/stockapi:latest" in 19.862095063s
  Normal   Created      35s                kubelet            Created container stock-api
  Normal   Started      35s                kubelet            Started container stock-api
  Warning  FailedMount  33s (x3 over 34s)  kubelet            MountVolume.SetUp failed for volume "kube-api-access-cvwdt" : object "default"/"kube-root-ca.crt" not registered

Pod部署配置

使用的Pod YAML配置如下:

apiVersion: v1
kind: Pod
metadata:
  name: stock-api
  labels:
    app: stock-api

spec:
  containers:
  - name: stock-api
    image: mpriv32/stock-api:latest
    envFrom:
    - secretRef:
        name: api-credentials
  restartPolicy: Never

报错根因

该报错由Kubernetes默认自动注入的服务账号投影卷挂载失败触发:

  • 所有未显式指定ServiceAccount的Pod,启动时会自动绑定所在命名空间的default服务账号,Kubernetes会同步注入名为kube-api-access-<随机后缀>的临时卷,用来挂载集群根CA证书kube-root-ca.crt,供Pod内进程访问Kubernetes API时做证书校验。
  • 报错明确提示default命名空间下不存在kube-root-ca.crt ConfigMap,这类问题在EKS集群上通常是集群初始化流程异常、或命名空间手动创建/修改时,没有自动生成该集群根CA对应的ConfigMap资源导致。
  • 从事件日志可以看到容器已经成功启动,说明该挂载失败处于重试状态,不会直接导致Pod退出,但会持续上报FailedMount告警,如果工作负载本身需要调用Kubernetes API,会出现证书校验失败的功能异常。

修复方案

方案1:补全缺失的kube-root-ca.crt ConfigMap (推荐)

直接在对应命名空间下补全缺失的ConfigMap即可彻底解决问题,操作步骤如下:

  1. 从EKS集群默认存在根CA配置的kube-system命名空间导出证书内容:
    kubectl -n kube-system get configmap kube-root-ca.crt -o jsonpath='{.data.ca\.crt}' > ca.crt
    
  2. 在default命名空间下创建缺失的ConfigMap:
    kubectl -n default create configmap kube-root-ca.crt --from-file=ca.crt=ca.crt
    
  3. 等待1-2分钟kubelet自动重试挂载,报错会自动消失,无需重建已有Pod。

如果集群内其他命名空间也出现同类报错,重复上述操作,将命令中-n default替换为对应命名空间名称即可。

方案2:关闭服务账号令牌自动投影 (仅适用于无需访问K8S API的工作负载)

如果部署的批处理任务完全不需要和Kubernetes API交互,可以在Pod配置中关闭自动注入逻辑,从根源上避免该卷的挂载动作:
在Pod的spec层级添加automountServiceAccountToken: false配置,修改后的配置片段如下:

spec:
  automountServiceAccountToken: false
  containers:
  - name: stock-api
    image: mpriv32/stock-api:latest
    envFrom:
    - secretRef:
        name: api-credentials
  # 其余原有配置保持不变

配置修改后重建Pod即可生效,不会再自动注入kube-api-access-xxx类型的临时卷,也就不会触发对应的挂载报错。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 00:31:08