舵图部署和私有Docker存储库

Jay*_*ayp 4 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>
Run Code Online (Sandbox Code Playgroud)

完成头盔安装后

掌舵安装myhelmchart --values values.yaml --version

窗格的状态为Init:ErrImagePull。kubectl describe pods出现此错误:

无法提取图像“ image:tag”:rpc错误:代码=未知desc =来自守护程序的错误响应:获取[image] /清单/ [版本]:未授权:需要身份验证

小智 8

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

image:
  repository: <repo>
  tag: <version tag>
  pullPolicy: IfNotPresent
imageCredentials:
  registry: <repo>
  username: <username>
  password: <pw>
Run Code Online (Sandbox Code Playgroud)

因为

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

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

此外,您还需要添加

imagePullSecrets:
- name: {{ .Values.imageCredentials.name }}
Run Code Online (Sandbox Code Playgroud)

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

image:
  repository: <repo>
  tag: <version tag>
  pullPolicy: IfNotPresent
imageCredentials:
  name: <registry_name>_credentials
  registry: <repo>
  username: <username>
  password: <pw>
Run Code Online (Sandbox Code Playgroud)


小智 6

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

  1. 请确保您有一个secret资源为私有资源库。请注意,此处的类型为kubernetes.io/dockerconfigjsonkubernetes.io/dockercfg

    这里描述如何使用掌舵模板来创建它。

  2. 请参考使用该私有存储库中的映像的pod中的那个秘密,如下所示:

Pod资源/模板:

spec:
  containers:
  - name: some-pod
    image: <image>
  imagePullSecrets:
  - name: <name-of your secret>
Run Code Online (Sandbox Code Playgroud)

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