Kubernetes 部署 - 为图像拉取指定多个选项作为后备?

Joh*_*0te 3 registry containers image docker kubernetes

我们所有可能的 docker 注册表(包括 Artifactory、AWS ECR 和 GitLab)都曾一度遇到过镜像拉取问题。即使 DockerHub 偶尔也会出现问题。

Kubernetes 部署中是否有一种方法可以指定 pod 可以从多个不同的存储库获取映像,以便在其中一个存储库出现故障时可以回退?

如果没有,还有哪些其他解决方案来保持稳定?我见过像 Harbor 和 Trow 这样的东西,但这似乎是对一个简单问题的严厉解决方案。

Ric*_*ico 10

\n

Kubernetes 部署中是否有一种方法可以指定 pod 可以从多个不同的存储库获取映像,以便在其中一个存储库出现故障时可以回退?

\n
\n

不是真的,不是天生的。如果您将它们放置在诸如将流量定向到多个注册表的 TCP 负载均衡器之类的东西之后,您可能会欺骗 K8s 节点从不同的映像注册表中提取映像(一次一个)。但这可能需要大量的测试和工作。

\n
\n

如果没有,还有哪些其他解决方案来保持稳定?我见过像 Harbor 和 Trow 这样的东西,但这似乎是对一个简单问题的严厉解决方案。

\n
\n

我想说,如果你想要更多冗余的东西, HarborQuayTrow都是不错的选择。

\n

Kubernetes 具有设置功能ImagePullPolicy,您可以设置它,例如Never,如果您想在所有 K8s 节点上预拉取所有关键映像。您可以将其与一些自动化结合起来,以跨集群和节点预先拉取映像。

\n

我实际上已经提出了一个 K8s功能请求,看看这个想法是否会受到关注。

\n

更新:

\n

如果您使用的是containerdcri-o(甚至Docker有注册表镜像)。您可以配置镜像注册表:

\n

containerd.toml例子

\n
...\n    [plugins.cri.registry]\n      [plugins.cri.registry.mirrors]\n        [plugins.cri.registry.mirrors."docker.io"]\n          endpoint = ["https://registry-1.docker.io"]\n        [plugins.cri.registry.mirrors."local.insecure-registry.io"]\n          endpoint = ["http://localhost:32000"]\n        [plugins.cri.registry.mirrors."gcr.io"]\n          endpoint = ["https://gcr.io"]\n      [plugins.cri.registry.configs]\n        [plugins.cri.registry.configs.auths]\n          [plugins.cri.registry.configs.auths."https://gcr.io"]\n            auth = "xxxxx...."\n...\n
Run Code Online (Sandbox Code Playgroud)\n

cri-o.conf例子

\n
...\n# registries is used to specify a comma separated list of registries to be used\n# when pulling an unqualified image (e.g. fedora:rawhide).\nregistries = [\n\xe2\x80\x9cregistry.example.xyz\xe2\x80\x9d,\n\xe2\x80\x9cregistry.fedoraproject.org\xe2\x80\x9d\n]\n...\n
Run Code Online (Sandbox Code Playgroud)\n

\xe2\x9c\x8c\xef\xb8\x8f

\n