【笔记】Helm-3 主题-2 Chart Hook

Chart Hook

Helm提供了一个hook机制允许开发者在发布声明周期的某些点进行干预。比如您可以使用hook用于:

1、安装时在加载其他chart之前加载配置映射或密钥

2、安装新chart之前执行备份数据库的任务,然后在升级之后执行第二个任务用于存储数据。

3、在删除发布之前执行一个任务以便在删除服务之前退出滚动。

钩子的工作方式与常规模板类似,但因为Helm对其不同的使用方式,会有一些特殊的注释。这部分会讲述钩子的基本使用模式。

可用的钩子

定义了以下钩子:

注释值 描述

pre-install 在模板渲染之后,Kubernetes资源创建之前执行

post-install 在所有资源加载到Kubernetes之后执行

pre-delete 在Kubernetes删除之前,执行删除请求

post-delete 在所有的版本资源删除之后执行删除请求

pre-upgrade 在模板渲染之后,资源更新之前执行一个升级请求

pre-rollback 在模板渲染之后,资源回滚之前,执行一个回滚请求

post-rollback 在所有资源被修改之后执行一个回滚请求

test 调用Helm test子命令时执行( test文档 )

Helm | Chart Test

注意 crd-install 钩子已被移除以支持Helm 3的crds目录。

注释值描述
pre-install在模板渲染之后,Kubernetes资源创建之前执行
post-install在所有资源加载到Kubernetes之后执行
pre-delete在Kubernetes删除之前,执行删除请求
post-delete在所有的版本资源删除之后执行删除请求
pre-upgrade在模板渲染之后,资源更新之前执行一个升级请求
post-upgrade所有资源升级之后执行一个升级请求
pre-rollback在模板渲染之后,资源回滚之前,执行一个回滚请求
post-rollback在所有资源被修改之后执行一个回滚请求
test调用Helm test子命令时执行 ( test文档)

钩子和发布生命周期

钩子允许您在发布声明周期的关键节点上有机会执行操作。比如,考虑helm install的生命周期。默认的,生命周期开起来时这样:

1.用户执行helm install foo

2.Helm库调用安装API

3.在一些验证之后,库会渲染foo模板

4.库会加载结果资源到Kubernetes

5.库会返回发布对象(和其他数据)给客户端

6.客户端退出

Helm为install周期定义了两个钩子:pre-install和post-install。如果foo chart的开发者两个钩子都执行,周期会被修改为这样:

1.用户返回helm install foo

2.Helm库调用安装API

3.在crds/目录中的CRD会被安装

4.在一些验证之后,库会渲染foo模板

5.库准备执行pre-install钩子(将hook资源加载到Kubernetes中)

6.库按照权重对钩子排序(默认将权重指定为0),然后在资源种类排序,最后按名称正序排列。

7.库先加载最小权重的钩子(从负到正)

8.库会等到钩子是“Ready”状态(CRD除外)

9.库将生成的资源加载到Kubernetes中。注意如果设置了--wait参数,库会等所有资源是ready状态,且所有资源准备就绪后才会执行post-install钩子。

10.库执行post-install钩子(加载钩子资源)。

11.库会等到钩子是“ready”状态

12.库会返回发布对象(和其他数据)给客户端

13.客户端退出

等钩子准备好是什么意思?这取决于钩子声明的资源。如果资源是Job或Pod类型。Helm会等到直到他成功运行完成。如果钩子失败,发布就会失败。这是一个阻塞操作,所以Helm客户端会在这个任务执行时暂停。

针对其他种类,一旦Kubernetes将资源标记为已加载(已添加或已更新),资源会被认为是”Ready“。当一个钩子中声明了很多资源时,资源回串行执行。如果有钩子权重,会按照权重顺序执行。从Helm3.2.0开始,具有相同权重的钩子资源会和普通非钩子资源以相同的顺序安装。否则,顺序就无法保证。(Helm2.3.0及之后,它们按照字母排序。不过该行为并不会绑定,将来可能会改变。)增加钩子权重被认为是很好的做法,如果权重不重要,可以设置为0.

钩子资源不适用对应版本管理

钩子创建的资源无法作为发布的一部分进行跟踪和管理。一旦Helm验证hook达到ready状态,将不使用钩子资源。当对应发布删除后,钩子资源的垃圾回收会在将来添加到Helm 3中,因此不能被删除的钩子资源应该添加注释:helm.sh/resource-policy: keep。

实际上,如果您在钩子中创建了资源,不能依靠helm uninstall去删除资源。要删除这些资源,要么在钩子模板文件中 添加一个自定义的 helm.sh/hook-delete-policy 注释,要么 设置任务资源的生存时间(TTL)字段 。

Helm | Chart Hook

Automatic Cleanup for Finished Jobs | Kubernetes

编写一个钩子

钩子就是在metadate部分指定了特殊注释的Kubernetes清单文件。因为是模板文件,您可以使用所有的普通模板特性,包括读取 .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 ths release.

    "helm.sh/hook": port-install

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

    "helm.sh/hook-delete-policy": hook-succeed

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 }}"]

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"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: Nevercontainers:- name: post-install-jobimage: "alpine:3.3"command: ["/bin/sleep","{{ default "10" .Values.sleepyTime }}"]

使模板成为钩子的是注释:

annotations:

  "helm.sh/hook": post-install

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

一个资源可以实现多个钩子:

annotations:

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

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

类似的,执行一个给定钩子的不同资源的数量也没有限制。比如,一个pre-install钩子可以同时声明密钥和配置映射。

当子chart声明钩子时,这些也会被评估。顶级chart无法禁用子chart声明的钩子。

可以为钩子定义权重,这有助于建立一个确定性的执行顺序。权重使用以下注释定义:

annotations:

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

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

钩子权重可以正数也可以是负数,但一定要是字符串。Helm开始执行特定种类的钩子时,会正序排列这些钩子。

Hook deletion policies

可以定义策略来决定何时删除对应的钩子资源。钩子的删除策略使用以下注释定义:

annotations:

  "helm.sh/hook-delete-policy": before-hook-creation,hook-succeeded

annotations:"helm.sh/hook-delete-policy": before-hook-creation,hook-succeeded

可以选择一个或多个定义的注释值:

注释值 描述

before-hook-creation 新钩子启动前删除之前的资源(默认)

hook-succeeded 钩子成功执行之后删除资源

hook-failed 如果钩子执行失败,删除资源

注释值描述
before-hook-creation新钩子启动前删除之前的资源 (默认)
hook-succeeded钩子成功执行之后删除资源
hook-failed如果钩子执行失败,删除资源

如果没有指定钩子删除策略的注释,默认使用before-hook-creation。

————————————

仅用于本人学习

来源:Helm | Docs

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/614667.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql的gtid主从复制,从库误操作更新操作,

一:查看mysql的从库,发现sql进程状态 “no”.提示执行传输过来的binlog日志,执行失败, 二:查看主库对应的二进制日志的gtid地方。插入一些数据。 # mysqlbinlog --base64-outputdecode-rows -v mysql-bin.000001 |gre…

2019年认证杯SPSSPRO杯数学建模C题(第一阶段)保险业的数字化变革全过程文档及程序

2019年认证杯SPSSPRO杯数学建模 基于 CART 决策树和 SVR 的客户续保概率预测 C题 保险业的数字化变革 原题再现: 车险,即机动车辆保险。保险自身是一种分散风险、消化损失的经济补偿制度,车险即为分散机动车辆在行驶过程中可能发作的未知风…

21道Java Spring MVC综合面试题详解含答案(值得珍藏)

1.概述 1.1 什么是Spring MVC?简单介绍下你对Spring MVC的理解? Spring MVC是一个基于Java的实现了MVC设计模式的请求驱动类型的轻量级Web框架,通过把模型-视图-控制器分离,将web层进行职责解耦,把复杂的web应用分成…

CMake入门教程【高级篇】文件操作(file)

😈「CSDN主页」:传送门 😈「Bilibil首页」:传送门 😈「动动你的小手」:点赞👍收藏⭐️评论📝 文章目录 1.概述2.使用说明3.完整代码示例4.实际使用中的技巧1.概述 在 CMake 项目中,file 命令是一个多功能工具,用于执行各种文件操作,如读写文件、复制和重命名文…

Docker介绍安装及使用

目录 引言一、什么是Docker?二、Docker的优势三、Docker的架构四、Docker的安装五、Docker的基本使用六、Docker与传统虚拟化的比较七、Docker的应用场景八、总结 引言 在现代的软件开发和部署中,容器化技术已经成为了一种趋势。Docker作为容器化技术的领先者&…

N-137基于springboot,vue运动会报名管理系统

开发工具:IDEA 服务器:Tomcat9.0, jdk1.8 项目构建:maven 数据库:mysql5.7 系统分前后台,项目采用前后端分离 前端技术:vueAvueElementUI 服务端技术:springbootmybatis 本项…

Elasticsearch聚合优化 | 聚合速度提升5倍!

1、聚合为什么慢? 大多数时候对单个字段的聚合查询还是非常快的, 但是当需要同时聚合多个字段时,就可能会产生大量的分组,最终结果就是占用 Elasticsearch大量内存,从而导致 OOM 的情况发生。 实践应用发现&#xff0…

Java电影购票小程序在线选座订票电影

Java电影购票小程序 功能:注册用户可已查看电影场次评价选座订票退票,影院管理员可以排片退款在线卖票和管理演播室等。超级管理员可管理电影排片电影院用户管理等。 演示视频 小程序: https://www.bilibili.com/video/BV11W4y1A7mK/?shar…

深度剖析缓存相关问题:雪崩、穿透、预热、更新、降级

目录 引言 1. 缓存雪崩 1.1 问题描述 1.2 解决方案 1.2.1 加锁防止并发重建缓存 2. 缓存穿透 2.1 问题描述 2.2 解决方案 2.2.1 布隆过滤器防止无效请求 3. 缓存预热 3.1 问题描述 3.2 分析与解决方案 3.2.1 定时任务预热缓存 4. 缓存更新 4.1 问题描述 4.2 分析…

华为端口安全常用3种方法配置案例

安全动态mac地址学习功能 [Huawei]int g0/0/01 interface GigabitEthernet0/0/1 port-security enable //开启安全 port-security max-mac-num 2 //最多为2个mac地址学习 port-security protect-action restrict //丢包带警告 port-security aging-time 1 //mac地址的老化时间…

C/C++ 堆排序

个人主页:仍有未知等待探索-CSDN博客 专题分栏:数据结构_仍有未知等待探索的博客-CSDN博客 欢迎大家来指教! 一、前言 今天要介绍的是堆排序。 首先什么是堆?简而言之,堆就是二叉树的数组形式,用数组来存…

css3边框与圆角

css3边框与圆角 前言边框的三要素边框的三要素小属性 四个方向的边框四个方向边框的三要素小属性 去掉边框利用边框制作三角形圆角 border-radius单独设置四个圆角小属性百分比为单位 盒子阴影阴影延展内阴影多阴影 结语 前言 在网页设计中,边框与圆角不仅仅是简单…

邂逅Node.JS的那一夜

邂逅Node.JS的那一夜🌃 本篇文章,学习记录于:尚硅谷🎢 本篇文章,并不完全适合小白,需要有一定的HTML、CSS、JS、HTTP、Web等知识及基础学习: 🆗,紧接上文,…

uⅤ打印-小理光上海RYPC后台运动系统

uⅤ打印-小理光上海RYPC后台运动系统

ISO 11519-2 开环低速 CAN 网络(10K~125Kbps)

ISO 11519-2 标准的物理框图如下图 可理解为一个低速开环 CAN 总线网络;CAN 开环总线网络允许总线最大长度为 1km;最高速度为 125Kbps;这里的两根线是独立的,每根线上串联一个 2.2kΩ 的电阻;节点就是不同的设备,连接到一个开环总…

【微服务】日志搜集es+kibana+filebeat+redis+logstash(单机)

日志搜集系统搭建 基于7.17.16版本 ps: 项目是toB的,日志量不大 前置准备 软件下载 7.17.16版本。8.x版本需要JDK11 elastic.co/downloads/past-releasesJDK java8 Linux elastic 软件不能以root用户启动,需要创建用户 sudo useradd elastic #给此…

解决:ModuleNotFoundError: No module named ‘pymysql’

解决:ModuleNotFoundError: No module named ‘pymysql’ 文章目录 解决:ModuleNotFoundError: No module named pymysql背景报错问题报错翻译报错位置代码报错原因解决方法方法一,直接安装方法二,手动下载安装方法三,…

云贝教育 |【技术文章】存储对象的LIBRARY CACHE LOCK/PIN实验(一)

注: 本文为云贝教育 刘峰 原创,请尊重知识产权,转发请注明出处,不接受任何抄袭、演绎和未经注明出处的转载。 实验环境 操作系统:Red Hat Enterprise Linux release 8.8 (Ootpa) 数据库:oracle Version 19.3.0.0.0 …

UE 引擎工具笔记

2023虚幻技术分享会视频 1.2023年虚幻引擎最新功能和技巧 [UFSH2023]2023年虚幻引擎最新功能和技巧 | Chris Murphy Epic Games_哔哩哔哩_bilibili 推荐细看下.总结了UE5的功能大概 2.调试技巧 [UFSH2023]总有一个你不知道的虚幻引擎调试技巧 | 陈拓 Epic Games_哔哩哔哩_…

深信服态势感知一体机SIP-1000 Y2100 3.0.1Y升级3.0.3Y步骤

当前版本:3.0.1Y 升级后版本:3.0.3Y PS:3.0.1Y不能直升3.0.3Y,需要先通过升级工具升级到3.0.2Y,再安装前置补丁从3.0.2Y升级到3.0.3Y;每一次升级时间为20-30分钟,设备升级会重启,需提…