typora/daliy_note/9月归档/9.20/helm-hook.md
2024-12-12 10:48:55 +08:00

8.5 KiB
Raw Blame History

Helm 的 Hooks 是一种机制,允许用户在 Chart 的生命周期的某些关键点执行自定义操作。Hooks 可以用于执行初始化任务、清理任务、备份操作等。以下是 Helm 支持的一些常用 Hooks 以及它们的触发点:

常用 Hooks

1. pre-install

  • 触发点:在 Helm 安装 Chart 之前执行。
  • 用途:用于初始化或准备操作,如创建必要的资源。

2. post-install

  • 触发点:在 Helm 安装 Chart 之后执行。
  • 用途:用于执行后续操作,如配置或通知。

3. pre-delete

  • 触发点:在 Helm 删除 Chart 之前执行。
  • 用途:用于执行清理操作,确保资源正确释放。

4. post-delete

  • 触发点:在 Helm 删除 Chart 之后执行。
  • 用途:用于执行后续清理任务或通知。

5. pre-upgrade

  • 触发点:在 Helm 升级 Chart 之前执行。
  • 用途:用于准备升级操作,如备份数据。

6. post-upgrade

  • 触发点:在 Helm 升级 Chart 之后执行。
  • 用途:用于执行后续操作或验证升级结果。

7. pre-rollback

  • 触发点:在 Helm 回滚 Chart 之前执行。
  • 用途:用于准备回滚操作。

8. post-rollback

  • 触发点:在 Helm 回滚 Chart 之后执行。
  • 用途:用于执行回滚后的操作。

9. test

  • 触发点:专用于测试操作。
  • 用途:用于运行测试用例,验证 Chart 部署是否成功。

使用 Hook 的示例

在 Helm Chart 的模板文件中,使用注解来定义 Hook。例如一个简单的 ConfigMap 资源可以在安装之前创建:

apiVersion: v1
kind: ConfigMap
metadata:
  name: my-config
  annotations:
    "helm.sh/hook": pre-install
data:
  my-value: "This is a pre-install hook"

Hook 的生命周期

  1. 安装Install

    • pre-install
    • Chart 安装
    • post-install
  2. 升级Upgrade

    • pre-upgrade
    • Chart 升级
    • post-upgrade
  3. 删除Delete

    • pre-delete
    • Chart 删除
    • post-delete
  4. 回滚Rollback

    • pre-rollback
    • Chart 回滚
    • post-rollback

Hook 的策略

你还可以为 Hook 定义策略,以控制它们的行为。这些策略通过注解指定:

  • "helm.sh/hook-delete-policy":定义 Hook 执行完毕后的删除策略。
    • hook-succeeded:当 Hook 成功时删除。
    • hook-failed:当 Hook 失败时删除。
    • before-hook-creation:在创建新的 Hook 资源之前删除旧的 Hook 资源。

示例:

apiVersion: batch/v1
kind: Job
metadata:
  name: test-job
  annotations:
    "helm.sh/hook": test
    "helm.sh/hook-delete-policy": hook-succeeded
spec:
  template:
    spec:
      containers:
      - name: test-container
        image: busybox
        command: ['sh', '-c', 'echo Hello, Helm!']
      restartPolicy: Never

总结

Helm 的 Hooks 提供了在 Chart 生命周期的关键点上执行自定义操作的灵活性,使得 Chart 的管理和部署更加细粒度和可控。掌握和使用这些 Hooks可以让你的 Helm Chart 更加健壮和自动化。


当然,以下是上边例子的详细解释,包括其执行过程和作用:

示例解释

这个示例是一个 Kubernetes Job 资源,带有 Helm Hook 的注解。具体内容如下:

apiVersion: batch/v1
kind: Job
metadata:
  name: test-job
  annotations:
    "helm.sh/hook": test
    "helm.sh/hook-delete-policy": hook-succeeded
spec:
  template:
    spec:
      containers:
      - name: test-container
        image: busybox
        command: ['sh', '-c', 'echo Hello, Helm!']
      restartPolicy: Never

细节解释

  1. 资源类型

    • apiVersion: batch/v1kind: Job 表明这是一个 Kubernetes Job 资源。
    • Job 资源在 Kubernetes 中用于一次性的任务,通常会在完成后自动退出。
  2. 元数据

    • metadata 部分包含了资源的名称 test-job
    • annotations 部分包含了 Helm Hook 的注解:
      • "helm.sh/hook": test 表示这个 Job 是一个测试 Hook。
      • "helm.sh/hook-delete-policy": hook-succeeded 表示当这个 Job 成功完成后Helm 会删除它。
  3. Job 规范

    • spec 部分定义了 Job 的具体行为。
    • template 部分定义了 Pod 模板,这个 Pod 包含一个名为 test-container 的容器。
    • 容器使用 busybox 镜像,并且执行命令 echo Hello, Helm!
    • restartPolicy: Never 表示这个 Pod 在完成任务后不会重新启动。

执行过程

  1. 安装 Chart

    • 当你执行 helm install 命令来安装 Chart 时:
      helm install <release_name> <chart_name>
      
    • Helm 会识别并执行这个 Job,因为它带有 "helm.sh/hook": test 注解。
  2. 执行 Hook

    • Job 资源会被创建并启动。
    • 容器会执行命令 echo Hello, Helm!,将 "Hello, Helm!" 输出到控制台。
  3. 删除 Hook

    • 因为这个 Hook 带有 "helm.sh/hook-delete-policy": hook-succeeded 注解,当 Job 成功完成(即输出 "Hello, Helm!" 并退出Helm 会自动删除这个 Job 资源。

总结

这个示例展示了如何使用 Helm 的 test Hook 来运行一个一次性的任务,并在任务成功完成后自动清理资源。具体流程如下:

  1. Helm 识别到 Job 资源带有 test Hook 注解。
  2. Helm 在安装过程中执行这个 Job
  3. Job 成功完成任务(输出 "Hello, Helm!")。
  4. Helm 根据 hook-delete-policy 注解自动删除 Job 资源。

通过这种方式,你可以在 Helm Chart 中定义各种自定义任务,并确保在任务完成后自动清理资源,从而保持集群的整洁和高效。


多个hook执行顺序

当然,以下是上边例子的详细解释,包括其执行过程和作用:

示例解释

这个示例是一个 Kubernetes Job 资源,带有 Helm Hook 的注解。具体内容如下:

apiVersion: batch/v1
kind: Job
metadata:
  name: test-job
  annotations:
    "helm.sh/hook": test
    "helm.sh/hook-delete-policy": hook-succeeded
spec:
  template:
    spec:
      containers:
      - name: test-container
        image: busybox
        command: ['sh', '-c', 'echo Hello, Helm!']
      restartPolicy: Never

细节解释

  1. 资源类型

    • apiVersion: batch/v1kind: Job 表明这是一个 Kubernetes Job 资源。
    • Job 资源在 Kubernetes 中用于一次性的任务,通常会在完成后自动退出。
  2. 元数据

    • metadata 部分包含了资源的名称 test-job
    • annotations 部分包含了 Helm Hook 的注解:
      • "helm.sh/hook": test 表示这个 Job 是一个测试 Hook。
      • "helm.sh/hook-delete-policy": hook-succeeded 表示当这个 Job 成功完成后Helm 会删除它。
  3. Job 规范

    • spec 部分定义了 Job 的具体行为。
    • template 部分定义了 Pod 模板,这个 Pod 包含一个名为 test-container 的容器。
    • 容器使用 busybox 镜像,并且执行命令 echo Hello, Helm!
    • restartPolicy: Never 表示这个 Pod 在完成任务后不会重新启动。

执行过程

  1. 安装 Chart

    • 当你执行 helm install 命令来安装 Chart 时:
      helm install <release_name> <chart_name>
      
    • Helm 会识别并执行这个 Job,因为它带有 "helm.sh/hook": test 注解。
  2. 执行 Hook

    • Job 资源会被创建并启动。
    • 容器会执行命令 echo Hello, Helm!,将 "Hello, Helm!" 输出到控制台。
  3. 删除 Hook

    • 因为这个 Hook 带有 "helm.sh/hook-delete-policy": hook-succeeded 注解,当 Job 成功完成(即输出 "Hello, Helm!" 并退出Helm 会自动删除这个 Job 资源。

总结

这个示例展示了如何使用 Helm 的 test Hook 来运行一个一次性的任务,并在任务成功完成后自动清理资源。具体流程如下:

  1. Helm 识别到 Job 资源带有 test Hook 注解。
  2. Helm 在安装过程中执行这个 Job
  3. Job 成功完成任务(输出 "Hello, Helm!")。
  4. Helm 根据 hook-delete-policy 注解自动删除 Job 资源。

通过这种方式,你可以在 Helm Chart 中定义各种自定义任务,并确保在任务完成后自动清理资源,从而保持集群的整洁和高效。


https://helm.sh/zh/docs/topics/charts_hooks/