如何使用Helm部署本地文件系统中的Docker镜像?
问题解答
Helm本身不存在直接读取本地文件系统file://格式镜像目录的原生语法,因为Helm的核心能力是渲染并提交Kubernetes资源清单,镜像的拉取/加载逻辑完全由Kubernetes集群节点的容器运行时(CRI)负责,CRI默认无法直接访问你执行Helm命令的主机上的本地文件目录。
你通过docker build -o type=local,dest=mumble/whatever导出的是镜像的解压文件系统分层结构,不是容器运行时可直接识别的镜像格式,需要先做前置处理再配置Helm,具体方案如下:
前置处理步骤
- 先将导出的目录转换为标准镜像包并加载到集群节点可识别的环境中:
# 导入到本地Docker daemon docker import mumble/whatever custom-image:v1.0.0 # 导出为标准tar包(可选,用于集群节点加载) docker save custom-image:v1.0.0 -o custom-image.tar - 将镜像加载到所有可能调度该工作负载的Kubernetes集群节点:
- 如果你用Kind测试集群:
kind load docker-image custom-image:v1.0.0 - 如果你用K3s单节点集群:
ctr -n k8s.io images import custom-image.tar - 普通集群直接登录节点执行
docker load -i custom-image.tar即可
- 如果你用Kind测试集群:
Helm Chart对应配置语法
values.yaml 配置示例
# 镜像相关配置 image: repository: custom-image tag: "v1.0.0" # 必须设置为Never,禁止容器运行时去仓库拉取镜像 pullPolicy: Never
Deployment模板对应配置
# templates/deployment.yaml 容器配置段 containers: - name: {{ .Chart.Name }} image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}" imagePullPolicy: {{ .Values.image.pullPolicy }} # 其余容器配置按需补充
测试场景补充方案
如果需要在部署时自动完成镜像加载,可在Helm Chart中添加pre-install钩子Job,配置特权权限访问节点的容器运行时接口执行镜像加载命令,该方案仅适用于本地测试,不推荐生产使用。
内容的提问来源于stack exchange,提问作者agapanthusblue
相关产品推荐
相关产品推荐

