舵图部署和私有docker存储库

时间:2018-04-05 09:40:13

标签: docker kubernetes kubernetes-helm

我有一堆带有图片的私人Docker仓库。我正在使用Helm将它们部署到Kubernetes集群。

Helm values.yaml包含存储库凭据:

image:
  repository: <repo>
  tag: <version tag>
  pullPolicy: IfNotPresent
  imageCredentials:
    registry: <repo>
    username: <username>
    password: <pw>

执行掌舵安装后

  

helm install myhelmchart --values values.yaml --version

pod的状态为Init:ErrImagePull。 kubectl describe pods给出了这个错误:

  

无法提取图像&#34;图像:标记&#34;:rpc错误:代码=未知desc =   来自守护程序的错误响应:获取[image] / manifests / [version]:   未经授权:需要身份验证

2 个答案:

答案 0 :(得分:3)

这取决于掌舵图的输出。您可以使用helm template查看生成的kubernetes资源,而无需实际部署它。使用私有docker注册表中的映像分为两个步骤:

  1. 确保私有存储库有secret resource。请注意,此处的类型为kubernetes.io/dockerconfigjsonkubernetes.io/dockercfg

    如何使用helm中的模板创建此文件,请参阅here

  2. 请参阅使用该私有存储库中的映像的pod中的秘密,如下所示:
  3. Pod资源/模板:

    spec:
      containers:
      - name: some-pod
        image: <image>
      imagePullSecrets:
      - name: <name-of your secret>
    

    您可以先手动构建资源而无需掌舵。这有助于验证资源本身是否正确。然后,您可以调整helm模板,以根据您的值输出正确的资源。

答案 1 :(得分:2)

imageCredentials需要处于根级别,如下所示:

image:
  repository: <repo>
  tag: <version tag>
  pullPolicy: IfNotPresent
imageCredentials:
  registry: <repo>
  username: <username>
  password: <pw>

,因为

{{- define "imagePullSecret" }}
{{- printf "{\"auths\": {\"%s\": {\"auth\": \"%s\"}}}" .Values.imageCredentials.registry (printf "%s:%s" .Values.imageCredentials.username .Values.imageCredentials.password | b64enc) | b64enc }}
{{- end }}

引用.Values.imageCredentials。*而不是.Values.image.imageCredentials。*。

此外,您还需要添加

imagePullSecrets:
- name: {{ .Values.imageCredentials.name }}

到从私有注册表中提取图像的模板(例如pod或部署)。因为它引用了.Values.imageCredentials.name,它没有在你的代码片段中定义,你需要添加它,如下所示:

image:
  repository: <repo>
  tag: <version tag>
  pullPolicy: IfNotPresent
imageCredentials:
  name: <registry_name>_credentials
  registry: <repo>
  username: <username>
  password: <pw>