257 lines
8.5 KiB
Markdown
257 lines
8.5 KiB
Markdown
|
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/
|