helm的hook

1、hook概念

HOOK技术即钩子函数,钩子函数是Windows消息处理机制的一部分,通过设置“钩子”,应用程序可以在系统级对所有消息、事件进行过滤,访问在正常情况下无法访问的消息。
钩子的本质是一段用以处理系统消息的程序,通过系统调用,把它挂入系统。每当特定的消息发出,在没有到达目的窗口前,钩子程序就先捕获该消息,亦即钩子函数先得到控制权。这时钩子函数即可以加工处理(改变)该消息,也可以不作处理而继续传递该消息,还可以强制结束消息的传递。

2、helm中hook

官网直通车

在简化Kubernetes应用部署工具-Helm之应用部署文章中,展示了采用Helm的一次应用release的生命周期过程,涵盖了发布(helm install)、更新(helm upgrade)、回滚(helm rollback)与删除(helm delete)等部分。为了允许chart开发者在应用release的生命周期中某些关键的时间点上,执行一些操作来更好的服务于release的需求,为此Helm提供了hook机制。
举例说明什么是一个Helm hook,比如ConfigMap或Secret要先于其他chart被加载,或希望在更新/回滚/删除一个release之前能够安全的关闭服务,都可以通过Helm hook实现。
Hook和普通模板文件基本相同,但其可以通过加入一些特殊的注释(annotation)与普通模板文件加以区分,下文会介绍hook的基本格式和用法。

hook 作用
pre-install 在渲染模板之后,在Kubernetes中创建任何资源之前执行
post-install 将所有资源加载到Kubernetes之后执行
pre-delete 在从Kubernetes删除任何资源之前对删除请求执行
post-delete 删除所有发行版资源后,对删除请求执行
pre-upgrade 在呈现模板之后但在更新任何资源之前,对升级请求执行
post-upgrade 升级所有资源后执行升级
pre-rollback 在呈现模板之后但在回滚任何资源之前,对回滚请求执行
post-rollback 修改所有资源后,对回滚请求执行
test 在调用Helm test子命令时执行( 查看测试文档)
注释值 描述
before-hook-creation 在启动新的挂钩之前删除先前的资源(默认)
hook-succeeded 挂钩成功执行后删除资源
hook-failed 如果挂钩在执行期间失败,则删除资源

3、举例

hook只是在metadata节中带有特殊注释的Kubernetes清单文件 。因为他们是模板文件,可以使用所有的Normal模板的功能,包括获取.Values,.Release和 .Template。例如,存储在模板templates/post-install-job.yaml声明要在上运行的任务post-install:

apiVersion: batch/v1
kind: Job
metadata:
  name: "{
    
    { .Release.Name }}"
  labels:
    app.kubernetes.io/managed-by: {
    
    {
    
     .Release.Service | quote }}
    app.kubernetes.io/instance: {
    
    {
    
     .Release.Name | quote }}
    app.kubernetes.io/version: {
    
    {
    
     .Chart.AppVersion }}
    helm.sh/chart: "{
    
    { .Chart.Name }}-{
    
    { .Chart.Version }}"
  annotations:
    # This is what defines this resource as a hook. Without this line, the
    # job is considered part of the release.
    "helm.sh/hook": post-install #在所有k8s任务执行之后执行post-install
    "helm.sh/hook-weight": "-5" #设置权重系数
    "helm.sh/hook-delete-policy": hook-succeeded #注释
spec:
  template:
    metadata:
      name: "{
    
    { .Release.Name }}"
      labels:
        app.kubernetes.io/managed-by: {
    
    {
    
     .Release.Service | quote }}
        app.kubernetes.io/instance: {
    
    {
    
     .Release.Name | quote }}
        helm.sh/chart: "{
    
    { .Chart.Name }}-{
    
    { .Chart.Version }}"
    spec:
      restartPolicy: Never
      containers:
      - name: post-install-job
        image: "alpine:3.3"
        command: ["/bin/sleep","{
    
    {
    
     default "10" .Values.sleepyTime }}"]

1、 也可以同时实现多个挂钩

annotations:
  "helm.sh/hook": post-install,post-upgrade

2、 挂钩权重可以为正数或负数,但必须表示为字符串。当Helm开始执行特定种类的钩子的执行周期时,它将以升序对这些钩子进行排序。

猜你喜欢

转载自blog.csdn.net/qq_26884501/article/details/108207950
今日推荐