Helm 图表部署和私有 docker 存储库
Helm chart deployment and private docker repository
我有一个包含大量图片的私人 Docker 存储库。我正在使用 Helm 将它们部署到 Kubernetes 集群。
Helm values.yaml 包含存储库凭据:
image:
repository: <repo>
tag: <version tag>
pullPolicy: IfNotPresent
imageCredentials:
registry: <repo>
username: <username>
password: <pw>
完成 helm 安装后
helm install myhelmchart --values values.yaml --version
广告连播的状态是 Init:ErrImagePull。
kubectl describe pods 给出了这个错误:
Failed to pull image "image:tag": rpc error: code = Unknown desc =
Error response from daemon: Get [image]/manifests/[version]:
unauthorized: authentication required
这取决于您的 helm chart 的输出。您可以使用 helm template
查看生成的 kubernetes 资源,而无需实际部署它。使用来自私人 docker 注册表的图像归结为两个步骤:
确保您有一个 secret
resource 用于私有存储库。注意这里的类型是kubernetes.io/dockerconfigjson
或者kubernetes.io/dockercfg
.
描述了如何使用来自 helm 的模板创建它 here。
- 在使用该私有存储库中的图像的 pod 中引用该秘密,如下所示:
连播 resource/template:
spec:
containers:
- name: some-pod
image: <image>
imagePullSecrets:
- name: <name-of your secret>
您可以先在没有 helm 的情况下手动构建资源。这有助于验证资源本身是否正确。然后您可以调整 helm 模板以根据您的值输出正确的资源。
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>
我有一个包含大量图片的私人 Docker 存储库。我正在使用 Helm 将它们部署到 Kubernetes 集群。
Helm values.yaml 包含存储库凭据:
image:
repository: <repo>
tag: <version tag>
pullPolicy: IfNotPresent
imageCredentials:
registry: <repo>
username: <username>
password: <pw>
完成 helm 安装后
helm install myhelmchart --values values.yaml --version
广告连播的状态是 Init:ErrImagePull。 kubectl describe pods 给出了这个错误:
Failed to pull image "image:tag": rpc error: code = Unknown desc = Error response from daemon: Get [image]/manifests/[version]: unauthorized: authentication required
这取决于您的 helm chart 的输出。您可以使用 helm template
查看生成的 kubernetes 资源,而无需实际部署它。使用来自私人 docker 注册表的图像归结为两个步骤:
确保您有一个
secret
resource 用于私有存储库。注意这里的类型是kubernetes.io/dockerconfigjson
或者kubernetes.io/dockercfg
.描述了如何使用来自 helm 的模板创建它 here。
- 在使用该私有存储库中的图像的 pod 中引用该秘密,如下所示:
连播 resource/template:
spec:
containers:
- name: some-pod
image: <image>
imagePullSecrets:
- name: <name-of your secret>
您可以先在没有 helm 的情况下手动构建资源。这有助于验证资源本身是否正确。然后您可以调整 helm 模板以根据您的值输出正确的资源。
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>