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

如何在K3D中无需推送镜像至仓库部署本地镜像及本地升级Helm部署

K3D与Helm部署本地K8s集群问题解答

问题1:设置imagePullPolicy: Never后出现ErrImageNeverPull错误

出现该错误的核心原因是:宿主机本地构建的Docker镜像并未存在于K3D集群的节点容器内部。K3D集群节点本身是运行在宿主机Docker中的容器,默认无法直接访问宿主机本地镜像。

解决方法有两种:

  • 方法一:手动将本地镜像导入K3D集群节点
    本地构建镜像完成后,执行以下命令将镜像导入目标集群:

    k3d image import <你的镜像名:标签> --cluster c1
    

    导入完成后,设置imagePullPolicy: Never即可正常部署,Kubernetes会直接使用节点内已有的镜像。

  • 方法二:创建集群时挂载宿主机Docker Socket
    若不想每次手动导入镜像,可在创建K3D集群时挂载宿主机的Docker Socket,让集群节点直接复用宿主机本地镜像:

    k3d cluster create c1 --registry-use k3d-registry.localhost:5000 --volume /var/run/docker.sock:/var/run/docker.sock
    

    这种方式下,集群节点可直接访问宿主机上的所有本地镜像,设置imagePullPolicy: Never后即可直接部署,无需推拉镜像至仓库。

问题2:Helm升级后变更未生效、Pod未替换

这种情况不正常,核心原因是Kubernetes Deployment的滚动更新触发条件未满足,常见原因及解决方法如下:

  1. 镜像标签未更新
    若构建新镜像时使用了固定标签(如latest),即使镜像内容更新,Kubernetes和Helm会判定镜像无变化,不会触发Pod重建。

    • 解决:每次构建镜像使用唯一标签(如版本号、Git Commit哈希、时间戳),更新Helm values文件中的镜像标签后再执行helm upgrade。
  2. 强制触发Pod重建
    若必须使用固定标签(如latest),可通过以下方式强制更新:

    • 执行升级时添加--recreate-pods参数,强制重建所有Pod:
      helm upgrade <release名> <chart名> --recreate-pods
      
    • 在Helm模板的Deployment中添加动态注解,示例:
      metadata:
        annotations:
          redeploy.timestamp: "{{ now | unixEpoch }}"
      
      每次执行helm upgrade时,该注解值会自动更新,触发Deployment重建Pod。
  3. 确认imagePullPolicy设置
    若使用固定标签,需确保Deployment的imagePullPolicy设置为Always,让Kubernetes每次尝试拉取最新镜像,避免使用本地缓存的旧镜像。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 16:25:04