typora/daliy_note/9月归档/9.20/helm-hook.md

257 lines
8.5 KiB
Markdown
Raw Normal View History

2024-12-11 21:48:55 -05:00
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 资源可以在安装之前创建:
```yaml
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 资源。
示例:
```yaml
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 的注解。具体内容如下:
```yaml
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/v1``kind: 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 时:
```sh
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 的注解。具体内容如下:
```yaml
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/v1``kind: 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 时:
```sh
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/