使用 Helm 管理应用的一些 Tips

背景
Helm 是一个 Kubernetes 的包管理工具,有点类似于 Mac 上的 brew,Python 中的 PIP;可以很方便的帮我们直接在 kubernetes 中安装某个应用。
比如我们可以直接使用以下命令方便的在 k8s 集群安装和卸载 MySQL:
helm install my-sql oci://registry-1.docker.io/bitnamicharts/mysql -n mysql
helm uninstall my-mysql -n mysql
对于一些复杂的应用使用 Helm 一键安装会更简单,以 Pulsar 举例:

它有着多个组件,比如 bookkeeper、zookeeper、broker、proxy 等,各个组件还有着依赖关系。
如果我们手动安装流程会比较繁琐,而使用 Helm 时便非常简单:
helm repo add apache https://pulsar.apache.org/charts
helm install my-pulsar apache/pulsar --version 3.0.0 -n pulsar
当然他也只是帮我们生成了部署所需要的 yaml 文件,也没有太多黑科技。
升级
看似简单的工具我在实际线上使用的时候也踩过一个坑,最大的一个问题就是某次升级 Pulsar 的时候生成的 yaml 文件是空的,导致整个集群被删除了。
还好最后使用 helm rollback version 将集群恢复过来了,我们的持久化数据也还在。
而出现这个问题的原因是我执行了下面这个命令:
helm upgrade pulsar ./charts/pulsar --version 2.9.2 -f charts/pulsar/values-2.10.3.yaml -n pulsar
我们是将 pulsar 的 Helm-Chart 源码下载到本地,然后修改 value.yaml 的方式执行升级的。
当时执行命令的时候没有注意,在一个没有 values-2.10.3.yaml 文件的目录下执行的,导致生成的 yaml 文件是空的,也就导致 k8s 在 pulsar 这个 namespace 下删除了所有的资源。
模拟升级
为了避免今后再次出现类似的问题,需要在升级前先模拟升级:
helm upgrade pulsar ./charts/pulsar --version 2.9.2 -f charts/pulsar/values-2.10.3.yaml -n pulsar --dry-run --debug > debug.yaml
其中关键的 dry-run 和 debug 参数可以指定模拟升级和输出详细的内容。
这样我们就可以在升级前先查看 debug.yaml 里的内容是不是符合我们的预期。
对比升级
但这样并不能直观的看出哪些地方是我们修改的,还好社区已经有了相关的插件,可以帮我们高亮显示修改的地方。
helm plugin install https://github.com/databus23/helm-diff
我们先安装好这个 helm 插件。
然后在升级前先使用该插件:
helm diff upgrade pulsar ./charts/pulsar --version 2.9.2 -f charts/pulsar/values-2.10.3.yaml -n pulsar

这样就可以高亮显示出修改的内容。
不用担心这个命令会直接升级,它会自动加上 --dry-run --debug 参数。
更多命令可以参考官方文档:
https://github.com/databus23/helm-diff
Helm 功能很强,在操作生产环境的时候必须得谨慎,都是血淋淋的教训啊。
使用 Helm 管理应用的一些 Tips的更多相关文章
- 如何使用vs将asp.net core项目添加容器支持并发布docker镜像到私有dockerhub和添加k8s/helm管理
这篇文章介绍一下,如何使用VS2017给asp.net core添加容器支持,并发布镜像到私有docker hub,然后用chart管理容器镜像的操作流程. 话不多说,just do it. 新建项目 ...
- 使用helm管理复杂kubernetes应用
1. 查看仓库: $ helm repo list NAME URL stable https://aliacs-app-catalog.oss-cn-hangzhou.aliyuncs.com/ch ...
- Helm神器,让管理Kubernetes像yum安装包一样简单
目录 一.什么是Helm 二.安装 1.安装helm客户端 2.安装Tiller 3.创建服务端 4.给Tiller授权 5.为 Tiller 设置帐号 6.验证Tiller是否安装成功 三.Helm ...
- Helm包管理
Helm Kubernetes 包管理工具 Helm 可以帮助我们管理 Kubernetes 应用程序 - Helm Charts 可以定义.安装和升级复杂的 Kubernetes 应用程序,Char ...
- Helm学习笔记
Helm学习笔记 Helm 是 Kubernetes 生态系统中的一个软件包管理工具.本文将介绍 Helm 中的相关概念和基本工作原理,并通过一个具体的示例学习如何使用 Helm 打包.分发.安装.升 ...
- kubernetes学习笔记之十四:helm入门
1.Helm的简介 Helm是Kubernetes的一个包管理工具,用来简化Kubernetes应用的部署和管理.可以把Helm比作CentOS的yum工具. Helm有如下几个基本概念: Chart ...
- helm 部署
Helm 基本概念 Helm 可以理解为 Kubernetes 的包管理工具,可以方便地发现.共享和使用为Kubernetes构建的应用,它包含几个基本概念 Chart:一个 Helm 包,其中包含了 ...
- 如何在Ubuntu里安装Helm
Helm是什么?在战网上玩过暗黑破坏神2代的程序员们应该还记得,Helm是国度的意思. 而在计算机领域,Helm是什么? Helm是Kubernetes的一个包管理工具,有点像nodejs的npm,U ...
- kubernetes实战篇之helm完整示例
系列目录 构建一个 Helm Chart 下面我们通过一个完整的示例来学习如何使用 Helm 创建.打包.分发.安装.升级及回退Kubernetes应用. 创建一个名为 mychart 的 Chart ...
- helm chart应用使用示例
有两种方法 一是按照正常流程直接用yaml文件的形式发布应用到k8s集群上 二是把生成好的yaml文件发布到kubeapps应用商店,在应用商店中操作发布应用到k8s集群中 这里采用第二种方式的变种方 ...
随机推荐
- AI室内设计:提升效率、消除沟通障碍,满足客户需求
前言 免费AI绘图工具:https://www.topgpt.one 随着人工智能(AI)技术的不断发展,室内设计行业也开始受益于这一技术的应用.其中,AI绘画工具在室内设计中的应用正日益受到关注.这 ...
- 使@schedule支持多线程的配置类
package com.longshine.goverquartz.core.config;import org.springframework.boot.autoconfigure.batch.Ba ...
- 【IDEA】 远程调试
远程调试 使用特定JVM参数运行服务端代码 要让远程服务器运行的代码支持远程调试,则启动的时候必须加上特定的JVM参数,这些参数是: -Xdebug -Xrunjdwp:transport=dt_so ...
- 【Java 新的选择】,Solon v2.3.8 发布
Solon 是什么开源项目? 一个,Java 新的生态型应用开发框架.它从零开始构建,有自己的标准规范与开放生态(历时五年,已有全球第二级别的生态规模).与其他框架相比,它解决了两个重要的痛点:启动慢 ...
- 面试官:一个 SpringBoot 项目能处理多少请求?(小心有坑)
你好呀,我是歪歪. 这篇文章带大家盘一个读者遇到的面试题哈. 根据读者转述,面试官的原问题就是:一个 SpringBoot 项目能同时处理多少请求? 不知道你听到这个问题之后的第一反应是什么. 我大概 ...
- 基于Avalonia 11.0.0+ReactiveUI 的跨平台项目开发2-功能开发
基于Avalonia 11.0.0+ReactiveUI 的跨平台项目开发2-功能开发 项目简介:目标是开发一个跨平台的AI聊天和其他功能的客户端平台.目的来学习和了解Avalonia.将这个项目部署 ...
- EasyExcel · 填充Excel
原文地址 Demo地址 最简单的填充 模版 效果 对象 @Getter @Setter @EqualsAndHashCode public class FillData { private Strin ...
- minipc安装与设置Ubuntu
此文章是对刚刚在某宝买的minipc进行的Ubuntu server安装,以及部分应用过程 安装Ubuntu server22 参考一文搞懂Ubuntu Server 22.04.2安装 问题记录 开 ...
- Linux 概念:存储
块存储 (略) 文件存储 基于文件系统的本地文件存储: 基于网络的共享文件存储:NFS.Samba.Windows文件共享: 基于网络的分布式文件存储:HDFS... 对象存储 一种Key(对象ID) ...
- Linux 下的 OpenGL 之路(九):天空盒、反射和折射
前言 搞定了天空盒,才算是真正完成了场景的搭建,以后再要进行什么样的图形学测试,都可以在这个场景下进行.比如后面的反射.折射就是这样的例子. 写完这篇,我决定暂时结束这个系列.主要是因为我太懒了,居然 ...