使用部署 YAML 文件从 Helm Chart 访问的 Dockerhub 注册表映像

Jac*_*cob 4 kubernetes kubernetes-helm

我正在尝试使用 Jenkins、Kubernetes 和 Kubernetes Helm 为我的微服务实现 CI/CD 管道。在这里,我使用 Helm chart 打包 YAML 文件并部署到 Kubernetes 集群中。我现在正在学习 Helm chart 的实现和部署。学习的时候,在部署YAML文件中找到了镜像名称定义。

我有两个问题:

  1. 如果我们只定义镜像名称,那么它会自动从Docker Hub中拉取吗?或者我们是否需要在部署图表 YAML 文件中额外定义任何内容以进行拉取?
  2. Helm Tiller 如何与 Docker Hub 注册表通信?

Dav*_*aze 6

Kubernetes 清单中的 Docker 镜像名称遵循与其他地方相同的规则。如果你有一个像postgres:9.6或的图像名称myname/myimage:foo,它们将像往常一样在 Docker Hub 上查找。如果您使用第三方存储库(Google GCR、Amazon ECR、quay.io 等),您需要在映像名称中包含存储库名称。它与您提供给docker runor 的字符串完全相同docker build -t

Helm 不直接与 Docker 注册表对话。这里的 Helm 流程是:

  1. 本地 Helm 客户端将图表发送到 Helm Tiller。
  2. Tiller 应用图表中的任何模板,并将其发送到 Kubernetes API。
  3. 这将创建一个带有嵌入式 Pod 规范的 Deployment 对象。
  4. Kubernetes 从 Deployment 创建 Pod,这些 Pod 具有映像名称引用。

因此,如果您的 Helm 图表命名了一个不存在的图像,则所有这些流程都将正常运行,直到它创建结束ImagePullBackOff状态的Pod 。

PS:如果你还没有这样做,你应该在你的 Helm 图表中配置图像标签(冒号后面的部分),并将你的图像名称声明为类似myregistry.io/myname/myimage:{{ .Values.tag }}. 然后,您的 CD 系统可以给每个构建一个不同的标记并将其传递到helm install. 这使得可以相当无缝地回滚。