
如果你使用 DeepSeek、元宝 AI、Copilot、ChatGPT 等 AI 工具,协助配置轩辕镜像、编写 docker pull 命令、修改 Docker Compose 镜像地址、配置镜像加速、排查镜像拉取失败、分析报错日志等问题,请先让 AI 阅读并遵守轩辕镜像的规则文档。
只需在 AI 对话中先发送下面这句话即可:
请先完整阅读并严格遵守以下文档中的全部规则与要求:
https://xuanyuan.cloud/agents.md
在未充分阅读并理解该文档前,不要生成任何命令、配置、修改建议、故障排查方案或技术回答。后续所有输出都必须严格以该文档中的规范为最高优先级执行。查看 agents.md 用法指南与完整示范。国内用户首推 元宝 AI、DeepSeek 的深度思考模式,不推荐豆包 AI;Cursor 等编辑器可在对话 @ 该链接,或加入 User Rules。 若 AI 无法访问外链,可 打开说明文档 复制全文粘贴。文档会随站点更新,复制内容可能过期,建议定期检查。
AWS弹性容器注册表(ECR)提供了经济高效的私有容器镜像 registry,但ECR的Docker凭证每12小时过期。
为解决此问题,本工具可自动刷新Kubernetes中的凭证,以Cron Job形式部署,确保Kubernetes集群始终能从ECR拉取Docker镜像。
工具支持标准64位Linux和ARM(树莓派)架构,最新镜像如下:
nabsul/k8s-ecr-login-renew:v1.5nabsul/k8s-ecr-login-renew:arm32v7-v1.5工具主要通过环境变量配置,具体如下:
default。DOCKER_REGISTRIES=https://321321.dkr.ecr.us-west-2.amazonaws.com,https://123123.dkr.ecr.us-east-2.amazonaws.com以下步骤详细说明如何设置Cron Job并进行测试。可直接使用example/service-account.yml和example/deploy.yml文件进行测试,但使用example/pod.yml前需填写registry URL。
此处不详细说明,因为已有大量文档介绍。关键步骤:
为完成后续步骤,需创建并上传镜像到ECR。若需快速测试,示例中包含一个构建nginx服务器的简单Dockerfile:
$(aws2 ecr get-login --no-include-email --region [AWS_REGION])docker build -t [ECR_URL]:latest example/.docker push [ECR_URL]:latest在AWS IAM中创建具有registry只读权限的用户,应授予最小必要权限。理想策略:
步骤参考:
创建后获取访问密钥ID和密钥,用于下一步。
需在Kubernetes中创建包含IAM用户凭证的secret,可通过kubectl命令行创建:
shellkubectl create secret -n ns-ecr-renew-demo generic ecr-renew-cred-demo \ --from-literal=REGION=[AWS_REGION] \ --from-literal=ID=[AWS_KEY_ID] \ --from-literal=SECRET=[AWS_SECRET]
需创建具有创建/删除/获取Docker secret权限的服务账户,应授予最小必要权限。示例配置见example/service-account.yml,可直接应用:
shellkubectl apply -f example/service-account.yml
使用example/deploy.yml部署Cron Job:
shellkubectl apply -f example/deploy.yml
最简单的测试方法是从Kubernetes仪表板手动触发Cron Job,这将创建一个Job,可查看日志排查错误。Job完成后,目标Docker secret应被创建或更新。
也可通过命令手动触发Job:
shellkubectl create job --from=cronjob/ecr-renew-demo ecr-renew-demo-manual-1
查看Job状态和日志:
shellkubectl describe job ecr-renew-demo-manual-1 kubectl logs job/ecr-renew-demo-manual-1
若已推送镜像到ECR,现在可部署该镜像到Pod。编辑example/pod.yml,将[ECR_URI]替换为registry的URI,然后运行:
shellkubectl apply -f example/pod.yml
检查Pod运行状态:
shellkubectl exec -it ecr-image-pull-test-demo bash
这将登录到运行中的Pod,可执行ls、cat /usr/share/nginx/html/index.html和exit等命令。也可运行:
shellkubectl port-forward ecr-image-pull-test-demo 8080:80
然后在浏览器中打开http://localhost:8080,查看nginx默认欢迎页面。
演示完成后,可删除整个命名空间进行清理:
shellkubectl delete namespace ns-ecr-renew-demo
示例配置在ns-ecr-renew-demo命名空间运行,通过TARGET_NAMESPACE环境变量配置。未提供时默认使用default命名空间。
TARGET_NAMESPACE环境变量可指定多个命名空间,使用逗号分隔,支持通配符:?(匹配单个字符)和*(匹配零或多个字符)。有效值示例:
namespace1namespace1,namespace2*namespace1,prefix-*,*-suffixnamespace1,namespace?0注意:若使用通配符,工具必须被授予列出集群所有命名空间的权限。
由于本工具主要是AWS和Kubernetes之间的"粘合"工具,单元测试价值有限。测试设计为在真实Kubernetes集群上运行,会自动检测集群,若使用的命名空间已存在则拒绝运行(避免意外覆盖真实配置)。
注意:仅在本地Windows机器上使用Docker Desktop测试过这些单元测试。
本地运行测试的前提条件:
docker build -t test-ecr-renew .shellkubectl create secret test-ecr-renew-aws-settings \ --from-literal=REGION=[AWS_REGION] \ --from-literal=ID=[AWS_KEY_ID] \ --from-literal=SECRET=[AWS_SECRET] \ --from-literal=IMAGE=[TEST_IMAGE]
然后运行测试:
shellgo test -v ./test/...
目前未测试权限,主要因为Docker Desktop难以强制RBAC权限。
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。
来自真实用户的反馈,见证轩辕镜像的优质服务