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

Minikube部署Kubevirt时virt-api出现ImagePullBackOff问题求助

Kubevirt virt-api Pod ImagePullBackOff 问题排查与解决

问题场景

在minikube中部署Kubevirt时,最初kubevirt-operator.yaml出现ImagePullBackOff错误,添加以下镜像拉取密钥配置后,virt-operator相关Pod恢复正常运行,但virt-api相关Pod仍显示ImagePullBackOff:

imagePullSecrets:
  - name: regcred
containers:

virt-api Pod的错误事件信息:

Events:
  Type     Reason     Age                    From               Message
  ----     ------     ----                   ----               -------
  Normal   Scheduled  27m                    default-scheduler  Successfully assigned kubevirt/virt-api-787487d9cd-t68qf to minikube
  Normal   Pulling    25m (x4 over 27m)      kubelet            Pulling image "us-ashburn-1.ocir.io/xxx/virt-api:v0.54.0"
  Warning  Failed     25m (x4 over 27m)      kubelet            Failed to pull image "us-ashburn-1.ocir.io/xxx/virt-api:v0.54.0": rpc error: code = Unknown desc = Error response from daemon: pull access denied for us-ashburn-1.ocir.io/xxx/virt-api, repository does not exist or may require 'docker login': denied: Anonymous users are only allowed read access on public repos
  Warning  Failed     25m (x4 over 27m)      kubelet            Error: ErrImagePull
  Warning  Failed     25m (x6 over 27m)      kubelet            Error: ImagePullBackOff
  Normal   BackOff    2m26s (x106 over 27m)  kubelet            Back-off pulling image "us-ashburn-1.ocir.io/xxx/virt-api:v0.54.0" 

已确认:通过docker login手动可以拉取该镜像

排查与解决步骤

1. 检查virt-api Deployment的ImagePullSecrets配置

virt-api由virt-operator管理部署,仅修改operator的yaml不会自动同步到virt-api的Deployment。执行以下命令查看virt-api的配置:

kubectl get deployment virt-api -n kubevirt -o yaml | grep -A3 imagePullSecrets

如果输出中没有regcred,需要通过以下方式添加:

  • 方式一:修改Kubevirt CR(推荐)
    编辑Kubevirt自定义资源,让operator在创建virt-api时自动注入镜像拉取密钥:

    kubectl edit kubevirt kubevirt -n kubevirt
    

    在spec字段下添加:

    spec:
      imagePullSecrets:
        - name: regcred
    
  • 方式二:直接更新virt-api Deployment
    执行patch命令直接添加密钥配置:

    kubectl patch deployment virt-api -n kubevirt --patch '{"spec": {"template": {"spec": {"imagePullSecrets": [{"name": "regcred"}]}}}}'
    

2. 确认regcred密钥存在于kubevirt命名空间

镜像拉取密钥必须与virt-api Pod处于同一命名空间(kubevirt),执行命令检查:

kubectl get secret regcred -n kubevirt

如果密钥不存在,在kubevirt命名空间重新创建:

kubectl create secret docker-registry regcred -n kubevirt \
  --docker-server=us-ashburn-1.ocir.io \
  --docker-username=<你的OCIR用户名(格式:租户名/用户名)> \
  --docker-password=<你的OCIR认证令牌> \
  --docker-email=<你的邮箱>

注:OCIR认证令牌需从OCI控制台生成,不能使用OCI账户密码

3. 验证密钥有效性

创建测试Pod验证密钥是否能正常拉取目标镜像:

apiVersion: v1
kind: Pod
metadata:
  name: test-pull
  namespace: kubevirt
spec:
  containers:
  - name: test-container
    image: us-ashburn-1.ocir.io/xxx/virt-api:v0.54.0
  imagePullSecrets:
  - name: regcred

应用Pod后查看状态:

kubectl get pod test-pull -n kubevirt

若测试Pod能正常启动,说明密钥无问题,需重点检查virt-api的配置同步情况。

4. 同步minikube节点的镜像拉取配置(临时方案)

若手动在宿主机器能拉取镜像,但minikube节点无法拉取,可将宿主的docker配置同步到minikube:

# 加载minikube docker环境变量
eval $(minikube docker-env)
# 拉取镜像
docker pull us-ashburn-1.ocir.io/xxx/virt-api:v0.54.0

或直接在minikube节点内登录镜像仓库:

minikube ssh
docker login us-ashburn-1.ocir.io
# 输入用户名和认证令牌后退出
exit

此为临时方案,长期解决仍需依赖ImagePullSecrets配置


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 11:54:04