之前由于harbor的存储空间不够了,同事干掉了好多镜像,结果把现网生产的镜像也搞掉了。进行了找回操作,这里做下记录。

环境是k8s集群,容器引擎用的containerd。

最初发现这个问题是在增加节点的时候,发现有的节点主机上,拉取镜像报错。排除了节点网络问题后,才发现是harbor上镜像被删除了。

但是部分主机是可以正常创建节点的,所以考虑部分节点本地有镜像缓存,没有走harbor拉取。

于是一个恢复思路出来了。

上当前运行pod的主机上找到image,然后push到harbor上就行了。

本以为挺简单的事情。结果登陆节点一看。

docker images是空。想起来用的containerd。然后ctr image ls也是空。

额。头大了。想起来还有k8s的crictl命令,尝试crictl images,终于找到了镜像。

具体区别如下:

ctr 是 containerd 的一个客户端工具。
crictl 是 CRI 兼容的容器运行时命令行接口,可以使用它来检查和调试 k8s 节点上的容器运行时和应用程序。
ctr -v 输出的是 containerd 的版本,crictl -v 输出的是当前 k8s 的版本,从结果显而易见你可以认为 crictl 是用于 k8s 的。

这里发现一个问题,crictl没有push命令,没法做推送。。。

然后查资料,ctr需要制定n=k8s.io才能够获取k8s的镜像。

尝试

ctr -n=k8s.io image list

能够找到镜像,于是尝试

ctr -n=k8s.io images push image.sd001.cn:30003/zone/app:2401152907 --user=root:password

发现报错

于是尝试从ctr中export出来,导入docker再push。

ctr -n=k8s.io image export 2401152907.tar image.sd001.cn:30003/zone/app:2401152907

docker load -i 2401152907.tar

然后docker images,终于看到镜像了。

然后docker login,docker push,成功把镜像推送到了harbor。

这里记录下过程。

GitHub 加速计划 / ha / harbor
23.24 K
4.68 K
下载
Harbor 是一个开源的容器镜像仓库,用于存储和管理 Docker 镜像和其他容器镜像。 * 容器镜像仓库、存储和管理 Docker 镜像和其他容器镜像 * 有什么特点:支持多种镜像格式、易于使用、安全性和访问控制
最近提交(Master分支:2 个月前 )
9e55afbb pull image from registry.goharbor.io instead of dockerhub Update testcase to support Docker Image Can Be Pulled With Credential Change gitlab project name when user changed. Update permissions count and permission count total Change webhook_endpoint_ui Signed-off-by: stonezdj <stone.zhang@broadcom.com> Co-authored-by: Wang Yan <wangyan@vmware.com> 9 天前
3dbfd422 Signed-off-by: wang yan <wangyan@vmware.com> 10 天前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐