如何在kubeadm搭建的高可用Kubernetes集群中使用本地构建的Docker镜像
kubeadm集群使用本地构建Docker镜像方案说明
kubeadm搭建的Kubernetes集群可以直接使用本地构建的Docker镜像,不过绝大多数场景下更推荐先推送至私有镜像仓库再从集群拉取使用,两种方案的具体说明如下:
直接使用本地镜像的方案
适用场景
仅适合单节点kubeadm集群,或者临时测试的小型多节点集群。
操作方法
- 单节点集群:本地完成镜像构建后,在工作负载YAML中设置
imagePullPolicy为IfNotPresent或者Never即可,kubelet会优先使用节点本地已存在的镜像,不会尝试到远程仓库拉取。 - 多节点集群:需要将本地构建的镜像手动分发到所有可能调度该工作负载的节点上:
- 本地执行
docker save -o <自定义包名>.tar <镜像名>:<版本号>导出镜像包 - 将导出的tar包传输到所有目标节点
- 各目标节点执行
docker load -i <自定义包名>.tar导入镜像 - 工作负载配置同上设置镜像拉取策略
- 本地执行
劣势
多节点场景下操作繁琐,镜像版本无法统一管理,无版本追溯能力,不适用于多人协作、生产环境等场景。
推送私有镜像仓库的方案(绝大多数场景推荐)
适用场景
所有开发、测试、生产场景,尤其是多节点kubeadm集群。
操作方法
- 部署私有镜像仓库,轻量场景可直接使用官方
registry镜像搭建,企业级场景可选择Harbor等带完整管理能力的仓库产品 - 本地构建镜像后,将镜像重新tag为
私有仓库地址/镜像名:版本号格式 - 执行
docker push将镜像推送到私有仓库 - 提前为所有kubeadm集群节点配置私有仓库的信任规则(如果是HTTP协议的私有仓库,需要在容器运行时配置中添加 insecure-registry 规则)
- 工作负载YAML中直接填写私有仓库的完整镜像地址即可
优势
适配任意规模的集群,镜像版本统一管理,支持权限控制、镜像安全扫描等扩展能力,维护成本极低,是行业通用的落地方案。
内容的提问来源于stack exchange,提问作者andreas.teich
相关产品推荐
相关产品推荐

