Helm — Chart Hooks

615 阅读1分钟

Helm 提供一个hook机制,允许我们在发布一个版本的生命周期的某个点进行干预,做一些特殊的操作。比如:

  • 在安装过程中对任务进行优先排序,如:加载其它组件前加载ConfigMap或Secret.
  • 在安装/升级前备份数据库,在升级后恢复数据库。
  • 在删除一个版本之前运行一个作业,以便在删除一个服务之前优雅地使其退出。

hook

hook的工作方式和普通模板是一样,只是它有特殊的注释(annotations)。一个有hook的模板会是这样的:

apiVersion: v1  
kind: ConfigMap  
metadata:  
    name: test  
    labels:  
        app: webserver  
    annotations:  
        "helm.sh/hook": pre-install  
        "helm.sh/hook-weight": "5"  
        "helm.sh/hook-delete-policy": before-hook-creation

这意义着ConfigMap会在其它安装之前被加载。可以使用的hook有:

pre-install 
post-install 
pre-delete 
post-delete
pre-upgrade
post-upgrade 
pre-rollback 
post-rollback
test

详细可查看:helm.sh/docs/topics…

也可以将多个hook一起使用

annotations: 
   "helm.sh/hook": pre-install, pre-delete, post-rollback

hook-weight

为了建立一个确认性的执行顺序,需要为hook定义一个hook-weight( 默认将权重指定为0 ).

annotations:
  "helm.sh/hook-weight": "5"

按照权重对hook进行排序,先加载最小权重的钩子(从负到正)

例如:

# hooks1.yaml
annotations:
  "helm.sh/hook": pre-install
  "helm.sh/hook-weight": "-1" 
---
# hooks2.yaml
annotations:
  "helm.sh/hook": pre-install
  "helm.sh/hook-weight": "-5" 

"helm.sh/hook-weight": "-5" 会第一个被执行。

hook-delete-policy

有三种删除策略可以使用


|`before-hook-creation`  | 新hook启动前删除之前的资源 (默认) |
| `hook-succeeded`       | hook成功执行之后删除资源         |
| `hook-failed`          | 如果hook执行失败,删除资源       |

hook-test

只有当我们使用helm test命令才会触发hook

如果我们卸载了之前的安装,此测试pod并不会删除,可以在模板文件中添加helm.sh/hook-delete-policy: hook-succeeded来删除。