尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

helm学习

helm学习 Helm 知识点总结一、Helm 是什么Helm 是Kubernetes 的包管理工具类比apt/yum/pip。Helm 可以把 K8s 的一堆 yamlDeployment、Service、Ingress、ConfigMap、Secret打包成一个应用包一键部署、升级、回滚、卸载。Helm3 vs Helm2 核心区别重点面试特性Helm2Helm3Tiller 服务端组件有集群内部运行 tiller移除 Tiller纯客户端Release 存储ConfigMap 存Secret 默认存储 release 版本记录CRD 安装helm init初始化无需 init直接使用本地命令helm init废弃✅现在全部使用 Helm3二、核心概念Chart应用安装包就是一个目录里面包含模板 yaml、values 配置。类似 rpm/deb 包。RepositoryRepo 仓库存放 chart 的远程仓库http/https公共仓库artifacthub国内常用阿里云 helm 镜像。helm repo add添加仓库helm repo update更新仓库索引Release版本实例把一个 Chart 安装到 k8s 集群之后就生成一个 Release。同一个 chart 可以多次安装生成多个 release。release 是 helm 管理的运行实例每个 release 有版本修订号revision回滚用Valuesvalues.yamlchart 的配置文件用来覆盖模板里面变量用户修改 values 来自定义部署参数。关系梳理Chart(包) --(values赋值)-- 渲染yaml -- 生成Release(集群实例)三、Chart 目录结构手写考点mychart/ ├── Chart.yaml # ✅ chart元数据名字、版本、appVersion、描述必填 ├── values.yaml # ✅ 默认变量配置 ├── templates/ # ✅ 存放go template模板yaml文件 │ ├── deployment.yaml │ ├── service.yaml │ ├── ingress.yaml │ └── _helpers.tpl # 公共模板函数定义通用标签、名称 ├── charts/ # 子chart依赖包可选 └── .helmignore # 类似.gitignore打包忽略文件_helpers.tpl下划线开头的模板文件不会直接渲染成 k8s 资源专门用来定义可复用模板片段name、labelsChart.yaml 字段区分versionChart 包本身版本helm 包版本appVersion业务应用镜像版本程序本身版本很多面试坑点四、常用命令高频仓库操作helm repo add [仓库名] [url] # 添加仓库 helm repo list # 查看仓库 helm repo update # 更新仓库索引缓存 helm search repo xxx # 在本地索引搜索chart helm search hub xxx # hub搜索artifacthub安装、升级、卸载# 安装release--values(-f) 指定自定义values--set 命令行覆盖变量 helm install release名 仓库/chart名 -f myvalues.yaml helm install release名 仓库/chart名 --set replicaCount2 # 升级release修改values之后执行升级release名字不变 helm upgrade release名 仓库/chart -f newvalues.yaml # 查看已经部署的release helm list -A # -A 所有命名空间 # 回滚到历史修订版本revision helm rollback release名 revision号 # 卸载release--keep-history保留历史release记录 helm uninstall release名 helm uninstall release名 --keep-history调试命令非常实用写 chart 必用# 本地渲染模板输出最终yaml**不提交到k8s本地预览调试** helm template ./mychart -f values.yaml # 查看release历史修订记录 helm history release名称 # 查看release实际使用的values helm get values release名 # 获取helm生成出来的最终manifest yaml helm get manifest release名 # 本地创建空白chart骨架 helm create mychart # 打包chart为tgz压缩包 helm package mychartrevision 注意install 生成 revision1第一次 upgrade 之后 revision2rollback 回去 revision 会继续 1旧版本 revision 号保留不会被覆盖五、Helm Go Template 模板语法基础helm 底层使用Go text/template增加 helm 专属的 Sprig 函数库。取值语法{{ .Values.xxx }}读取 values.yaml 变量内置对象.Values来自 values.yaml 以及 --set 传入的值.Releaserelease 信息.Release.Name、.Release.Namespace、.Release.Revision.Chart读取 Chart.yaml 元数据.Chart.Name.Template模板文件相关信息判断语法{{- if .Values.ingress.enabled }} # ingress资源内容 {{- end }}-代表去除换行空白{{-去掉左边空白-}}去掉右边空白消除多余空行循环 range{{- range .Values.resources.limits }} # 循环内容 {{ end }}调用_helpers.tpl 定义的命名模板{{ include mychart.labels . }}include函数用来引入公共片段和 template 区别include 可以管道传参template 不行。优先用 include六、依赖管理Chart 依赖Chart.yaml 中 dependencies 字段声明依赖其他 chartdependencies: - name: mariadb version: 10.x.x repository: https://xxxhelm dependency update # 更新下载依赖到charts目录 helm dependency build子 chart 有独立 values父 chart 可以在 values 里面覆盖子 chart 的值mariadb: xxx七、钩子 Helm Hooks面试重点Helm Hooks可以在 helm install/upgrade/rollback/uninstall 的生命周期各个阶段执行额外 k8s Job/Pod。 annotations 声明钩子annotations: helm.sh/hook: pre-install常见 hook 类型pre-installchart 模板渲染完成之后在资源创建之前运行 jobpost-install所有资源部署完成之后执行pre-upgrade升级开始前执行post-upgrade升级完成后pre-delete卸载资源删除之前post-delete卸载之后钩子额外注解helm.sh/hook-weight: 5 # 权重数字越小越先执行 helm.sh/hook-delete-policy: hook-succeeded # job执行成功之后自动删除钩子pod⚠️注意Hook 资源本身不计入 Release 管理卸载 release 默认不会清理 hook 创建的资源需要设置 delete-policy八、常用排错 面试重点总结高频面试问题helm install 和 helm upgrade 的区别install全新部署生成 revision1release 名称不能已经存在upgrade对已经存在 release 更新配置revision 递增helm rollback 原理 helm3 release 元数据存在 Secret保存每一次 revision 渲染时全部 values回滚就是取出旧 revision 的 values重新执行一次 upgraderevision 号继续增大。不是回到旧 revision 编号而是新建修订版本。helm template 作用 本地渲染模板输出最终 yaml不访问 k8s api用于调试模板是否正确。Chart.yaml version vs appVersion 区别versionhelm chart 包的版本appVersion内部业务镜像版本。helm hooks 的使用场景 数据库初始化 Job升级前数据备份部署完成初始化配置。helm --dry-runhelm install xxx --dry-run # 模拟安装访问apiserver做校验helm template纯本地不访问apidry‑run会请求k8s做校验helm template本地helm install --dry-run会连接 k8s 校验 schema。易错点修改 templates 下 yaml 直接改不会生效必须 helm upgrade 重新渲染helm 不监听本地文件变化。values.yaml 修改之后本地文件改完一定要执行 helm upgrade 才会重新渲染集群资源。_helpers.tpl 是命名模板不会直接生成资源只能 include 引入。helm3 不再有 tiller权限直接使用执行 helm 命令当前用户的 kubeconfig 权限。九、helm 私有仓库补充可以用 chartmuseum 搭建私有 helm 仓库harbor 也内置 helm 仓库。十、helm 工作流程helm 读取本地 chart读取 values-f /--set/ 默认 values.yamlgo template 渲染 templates 下面所有模板替换变量生成完整 k8s yaml 清单通过 kubeconfig 连接 k8s api提交资源到集群同时把 release 状态写入 Secret 保存版本历史。如果你需要我可以再给你一份 helm 面试题选择 简答或者 helm 的实验练习清单。
返回列表