继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

从EKS节点恢复删除的镜像并重新推送到ECR仓库

qq_遁去的一_1
关注TA
已关注
手记 227
粉丝 7
获赞 23

如何从EKS节点将应用程序镜像重新推送到ECR,以及如何解决“FATA[0000] 无法创建临时单平台镜像,内容摘要未找到”的错误。

介绍

在这篇文章里,你会学会如何从EKS节点恢复或推送一个图像到ECR。

最近,我发现一个问题,有一个在ECR仓库中被使用的图片被删除了。那个特定的图片无法通过构建管道重建,因为它已经太旧了,它唯一存在的地方是仍然运行着该pod的EKS节点上。

你将学会如何使用 nerdctl 来从节点恢复你的镜像,以及可能遇到的问题。还会解决“FATA[0000] 创建单平台临时镜像失败”错误。

我的配置
  • EKS 集群版本 - 1.30.3
  • Kubectl - 1.30.1
  • Containerd - 1.7.11
  • Runc - 1.1.11

从 EKS 节点恢复镜像到私有 ECR 将会在下一节中使用 nerdctl 来完成。

康复

要访问我的Amazon EKS节点,我使用AWS Session Manager。这在控制台中很简单,只需进入实例并点击“连接”按钮。

一旦你在节点上,你可以通过运行以下命令来查找你的镜像:

    sudo -s # 切换到 root 用户权限  
    nerdctl images # 查看节点上的所有镜像

现在,你可以找到你的镜像。在我的情况下,我使用的是 0123456789.dkr.ecr.eu-west-2.amazonaws.com/frontend-prod:v1.0.0,并想将其推送回我的 ECR 仓库中。

nerdctl push 0123456789.dkr.ecr.eu-west-2.amazonaws.com/frontend-prod:v1.0.0  
错误[0000] 尝试创建临时单平台镜像“0123456789.dkr.ecr.eu-west-2.amazonaws.com/frontend-prod:v1.0.0-tmp-reduced-platform”失败:内容摘要为 sha256:96526aa774ef0126ad0fe9e9a95764c5fc37f409ab9e97021e7b4775d82bf6fa 未发现

正如你所见,出现了“无法创建临时文件”这样的错误。要解决这个问题,你需要在推送命令时添加额外的标志 — all-platforms。

nerdctl push 0123456789.dkr.ecr.eu-west-2.amazonaws.com/frontend-prod:v1.0.0 --all-platforms

将所有平台的 frontend-prod:v1.0.0 推送到指定的 Docker 注册表。

这将导致另一个错误“401 未授权”。这仅仅意味着你没有使用你的ECR进行身份验证。要解决这个问题,你可以运行以下命令:

执行以下命令来获取登录密码并登录:
aws ecr get-login-password -region eu-west-2 | nerdctl login -username AWS -password-stdin 0123456789.dkr.ecr.eu-west-2.amazonaws.com

现在,再次运行“nerdctl push…”命令时,会返回另一个错误,即 “403 Forbidden”。这个错误表明,与您的EKS节点关联的IAM角色没有权限将图像推送到ECR。为了解决这个问题,您可以临时在IAM角色策略中添加“ecr:PutImage”权限。

到了这一步,当你运行“nerdctl push…”命令时,一切都会顺利进行,你的镜像就会回到你的ECR仓库里。

希望这能帮助你在需要的时候快速恢复图片。

在这个过程中用到的命令:

    nerdctl images  
    nerdctl push 0123456789.dkr.ecr.eu-west-2.amazonaws.com/frontend-prod:v1.0.0 --all-platforms  
    aws ecr get-login-password --region eu-west-2 | nerdctl login --username AWS --password-stdin 0123456789.dkr.ecr.eu-west-2.amazonaws.com # 使用管道传输密码
瑞典帮我一把
[在 GitHub Sponsors 上支持 @marcincuber

大家好,我是 Marcin,我是一名技术主管,专注于 DevOps 领域。我也是 AWS 认证专家……](https://github.com/sponsors/marcincuber?source=post_page-----15e37b661733--------------------------------)

和我在Medium上发表的其他故事一样,我在文中提到的任务都完成了。这是我自己的研究和遇到的一些问题之类的。

谢谢大家的阅读,Marcin Cuber

打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP