
philpep/imagoImago旨在简化Kubernetes集群中Docker镜像的持续交付流程。它能够识别Kubernetes中的Deployments、DaemonSets、StatefulSet和CronJobs配置,从Docker仓库获取最新镜像的SHA256摘要,并更新这些资源以使用最新镜像,或通过重启资源使Pod拉取最新镜像,确保集群中的Pod始终运行最新版本的镜像。
registry/image@sha256:...格式,确保配置文件中记录最新镜像。imagePullPolicy为Always),不修改资源配置中的镜像字段。Imago通过两种方式确保Pod使用最新镜像:
registry/image@sha256:...格式的完整路径。imago-config-spec注解中记录原始镜像规范,便于追溯。-check-pods)。rollout restart),促使Pod重新拉取最新镜像(假设imagePullPolicy配置为Always)。执行imago --help可查看所有参数,主要参数说明如下:
Usage of imago: -A 检查所有命名空间中的部署和守护进程集(简写)(默认false) -all-namespaces 检查所有命名空间中的部署和守护进程集(默认false) -check-pods 检查运行中Pod的镜像摘要(默认false) -docker-config string 用于拉取最新摘要的Docker配置文件(默认~/.docker/config.json) -field-selector string Kubernetes字段选择器 示例:metadata.name=myapp -kubeconfig string kube配置文件(默认"~/.kube/config") -l string Kubernetes标签选择器 警告:仅适用于Deployment、DaemonSet、StatefulSet和CronJob,不适用于Pod! -n value 检查指定命名空间中的部署和守护进程集(默认当前命名空间) -restart 滚动重启部署和守护进程集以使用更新的镜像,隐含-check-pods并假设imagePullPolicy为Always(默认false) -update 更新部署和守护进程集以使用更新的镜像(默认false) -x value 检查除指定命名空间外的所有命名空间中的部署和守护进程集(隐含--all-namespaces)
注意:默认情况下,Imago不会更新资源,需显式指定--update或--restart选项。
bashimago --update
输出示例:
2019/02/11 17:55:21 检查 default/Deployment/aptly: 2019/02/11 17:55:21 aptly ok 2019/02/11 17:55:21 nginx ok 2019/02/11 17:55:22 检查 default/Deployment/kibana: 2019/02/11 17:55:22 kibana ok 2019/02/11 17:55:22 nginx ok 2019/02/11 17:55:22 更新 default/Deployment/philpep.org 2019/02/11 17:55:22 检查 DaemonSet/fluentd: 2019/02/11 17:55:22 fluentd 需要从 r.in.philpep.org/fluentd 更新为 r.in.philpep.org/fluentd@sha256:6a92af8a9db2ca243e0eba8d401cec11b124822e15b558b35ab45825ed4d1f54 2019/02/11 17:55:22 更新 default/DaemonSet/fluentd
app=myapp的资源bashimago --all-namespaces -l "app=myapp" --restart
需安装Go环境:
bashgo get github.com/philpep/imago/... $(go env GOPATH)/bin/imago --help
需挂载本地kubeconfig文件:
bashdocker pull philpep/imago docker run --rm -it -u $(id -u) -v ~/.kube/config:/var/lib/imago/.kube/config philpep/imago --help
从https://github.com/philpep/imago/releases%E4%B8%8B%E8%BD%BD%E5%AF%B9%E5%BA%94%E5%B9%B3%E5%8F%B0%E7%9A%84%E4%BA%8C%E8%BF%9B%E5%88%B6%E6%96%87%E4%BB%B6%EF%BC%8C%E7%9B%B4%E6%8E%A5%E8%BF%90%E8%A1%8C%E3%80%82
可通过CronJob定期执行Imago,需创建ServiceAccount和CronJob资源:
bash# 应用ServiceAccount(包含必要权限) kubectl apply -f https://raw.githubusercontent.com/philpep/imago/master/deploy/serviceaccount.yaml # 应用CronJob(默认每天运行一次) kubectl apply -f https://raw.githubusercontent.com/philpep/imago/master/deploy/cronjob.yaml
Imago会从~/.docker/config.json(Docker镜像中路径为/var/lib/imago/.docker/config.json)读取Docker仓库凭证。若集群中资源使用imagePullSecrets拉取私有镜像,需将对应的secret挂载到Imago的运行环境中(如在Pod中挂载secret到/var/lib/imago/.docker/config.json路径)。

探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 Docker 登录认证访问私有仓库
无需登录使用专属域名
Kubernetes 集群配置 Containerd
K3s 轻量级 Kubernetes 镜像加速
VS Code Dev Containers 配置
Podman 容器引擎配置
HPC 科学计算容器配置
ghcr、Quay、nvcr 等镜像仓库
Harbor Proxy Repository 对接专属域名
Portainer Registries 加速拉取
Nexus3 Docker Proxy 内网缓存
需要其他帮助?请查看我们的 常见问题Docker 镜像访问常见问题解答 或 提交工单
manifest unknown
no matching manifest(架构)
invalid tar header(解压)
TLS 证书失败
DNS 超时
410 Gone 排查
402 与流量用尽
401 认证失败
429 限流
D-Bus 凭证提示
413 与超大单层
来自真实用户的反馈,见证轩辕镜像的优质服务