我有一个3个节点的裸机K3s集群,其中一个节点安装失败,而另一个没有。
我猜是部署失败的节点上的Kubernetes映像存储库处于坏状态。我不知道如何证明,或者如何修正它。
我昨天做了一个helm安装,失败了,有以下错误:
Apr 14 14:28:41 clstr2n1 k3s[18777]: E0414 14:28:41.878018 18777 remote_image.go:114] "PullImage from image service failed" err="rpc error: code = NotFound desc = failed to pull and unpack image "docker.ssgh.com/device-api:1.2.0-SNAPSHOT": failed to copy: httpReadSeeker: failed open: could not fetch content descriptor sha256:cd5b8d67fe0f3675553921aeb4310503a746c0bb8db237be6ad5160575a133f9 (application/vnd.docker.image.rootfs.diff.tar.gzip) from remote: not found" image="docker.ssgh.com/device-api:1.2.0-SNAPSHOT"
我验证了我可以在我的开发VM上使用docker pull docker.ssgh.com/device-api:1.2.0-SNAPSHOT
从存储库中提取映像,并且它像预期的那样工作。
然后为pod规范设置nodeName
属性,将其强制到其他节点之一,并且部署按预期工作。
此外,我还使用cURL来获取内容描述符,这与预期的一样。
编辑以获取更多细节。我最初的安装包括6个不同的图表。最初,6个中只有2个安装正确,其余4个报告图像提取错误。我删除了失败的4个并再次尝试,这次4个中有2个失败了。我删除了失败的2,然后再试一次。这两个继续失败,除非我指定一个不同的节点,它们在其中工作。我再次删除了它们,等了一个小时,看看Kubernetes是否会清理这些混乱。当我再次尝试时,其中一个成功了,但另一个继续失败。我把它放了一夜,今天早上它还是坏。除非我把力移到另一个节点上。
值得注意的是,有问题的节点可以从同一个私有repo下载其他映像,而不会出现问题。
您的pod没有在特定节点上拉取图像可能有多种原因:
非工作节点上的Docker不信任镜像库
Docker没有验证repo的CA颁发者
防火墙未打开以在非工作节点上进行镜像备份
使用以下选项进行故障排除以查找问题原因:
检查与非工作节点上的映像库的连通性
检查非工作节点上的docker配置是否允许镜像回购在非工作节点上进行docker pull