我正在创建一个 helm 图表,该图表正在部署来自 aws ecr 的图像。完整代码:https://github.com/rcbandit111/test_helm_chart
每次安装 Helm Chart 时 Kubernetes 都会出错:
Failed to pull image "123456789.dkr.ecr.us-east-1.amazonaws.com/test-gateway:0.0.1": failed to pull and unpack image "123456789.dkr.ecr.us-east-1.amazonaws.com/test-gateway:0.0.1": failed to resolve reference "123456789.dkr.ecr.us-east-1.amazonaws.com/test-gateway:0.0.1": unexpected status from HEAD request to https://123456789.dkr.ecr.us-east-1.amazonaws.com/v2/test-gateway/manifests/0.0.1: 401 Unauthorized
如您所见,我的工作是刷新 aws ecr 的凭证。我应该保留这份工作还是使用其他方法来访问注册表?如何对 Helm Chart 进行属性配置?
您遇到的错误消息“401 Unauthorized”表示对您的 AWS ECR(弹性容器注册表)的身份验证失败。在 Helm 图表中刷新凭据的工作是一个很好的方法,但可能会出现一些配置错误或计时问题。
尝试从本地计算机手动检查 ECR 身份验证(所有相关命令)。确保 IAM、区域、令牌等正确。
时间问题。您是否尝试过确保某些资源以正确的顺序运行?考虑组织内部逻辑并利用 Helm hook 在 Helm 图表生命周期的特定阶段启动操作。这些阶段包括资源安装前或删除后等事件。 Helm 挂钩使您能够执行任务,例如执行作业、创建 ConfigMap 或管理其他 Kubernetes 对象,作为 Helm 部署过程的组成部分
在 Helm 中,有两种方式使用 hook 来管理 Kubernetes 资源:Helm Hook Annotations 和 Helm Hook Manifests。这些方法具有相似的目的,但有一些关键的区别:
Helm Hook Annotations
:
注释:Helm Hook 注释作为注释添加到 Helm 图表模板中的各个 Kubernetes 资源中。您可以直接在资源的元数据中指定挂钩类型(例如,安装前、安装后、升级前或升级后)。
优点:
简单:注释很容易添加到现有资源定义中。
精细控制:您可以将挂钩应用于图表中的特定资源。 缺点 -
紧耦合:钩子信息与单个资源紧密耦合,随着资源数量的增长,其中心化程度较低,且更难管理。
可见性较低:获取图表中使用的所有挂钩的概述可能具有挑战性。 示例:
apiVersion: apps/v1
kind: Deployment
metadata:
annotations:
"helm.sh/hook": pre-install
name: my-deployment
Helm Hook Manifests
:
Manifests:Helm Hook Manifests 是专门为 hooks 定义 Kubernetes 资源的 YAML 文件。这些资源与主图表模板分开,通常存储在 Helm 图表内的 templates/hooks 目录中。
优点:
集中式:挂钩清单提供了一个集中的位置来定义挂钩,使它们更易于管理和维护。 关注点分离:钩子清单将钩子相关的资源与主图表模板分开,使主模板更干净、更集中。 缺点 - 需要额外文件:您需要为挂钩清单创建单独的 YAML 文件,这可能会增加图表中的文件数量。
示例:
挂钩清单文件 templates/hooks/pre-install-job.yaml:
apiVersion: batch/v1
kind: Job
metadata:
name: pre-install-job
# ... job configuration ...
在主图表模板中,您可以引用钩子清单:
{{- include "mychart.hooks.pre-install-job" . | nindent 4 }}
让我们看看会发生什么!