记录一次k8s集群镜像恢复到harbor的过程

之前由于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 的。

记录一次k8s集群镜像恢复到harbor的过程_第1张图片

这里发现一个问题,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

发现报错

记录一次k8s集群镜像恢复到harbor的过程_第2张图片

于是尝试从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。

这里记录下过程。

你可能感兴趣的:(kubernetes,容器,云原生)