0. 前言

玩转 Helm 一文中,简略提到了 Helm upgrade 的策略。

在实际项目开发上,upgrade 多是调研的重点。基于此,这里对 upgrade 继续展开。

1. basic helm upgrade

升级 Release 查看升级情况:

1.1 helm install 部署 Release

$ helm list
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
lubanseven ci1 1 2022-04-26 14:32:08.74504337 +0000 UTC deployed lubanseven-0.1.0 0.1.0

查看 manifest:

spec:
replicas: 1

1.2 helm upgrade lubanseven

// 更新 values.yaml replicas: 2

$ helm upgrade -f values.yaml lubanseven .

查看 manifest:

spec:
replicas: 2

1.3 helm rollback lubanseven

$ helm list
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
lubanseven ci1 2 2022-04-26 14:39:17.027072285 +0000 UTC deployed lubanseven-0.1.0 0.1.0 $ helm rollback lubanseven 1

注意:

  • 这里 revision id 是对 lubanseven 的记录,每执行一次 lubanseven,id 会自增 1。
  • 除了对 values.yaml 改动的升级,也可以对 chart 的改动做升级。helm upgrade 背后是解析,比对 manifest 查看资源更新情况,并将更新情况发给 kubernetes 处理。

2. 三路升级策略

基本的升级场景看完,继续看 helm upgrade 的三路升级策略。

如果 manifest 前后不变,helm 在做升降级的时候会对 Release 做改动吗?这在 helm2 答案是不会,在 helm3 中引入了三路策略,可以通过补丁的方式实现升级。

场景如下(该场景引自 这里):

  1. 部署 Release
  2. scale pod 数为 0。(这里 manifest 前后未改动)
  3. helm rollback Release

在 helm2 中,当第二步 scale pod 时,manifest 并未改动,此时 pod 为 0,当 rollback 时,由于 manifest 并未改动,pod 数还是保持为 0,而不是回到原来的 pod 数。

helm3 使用三路升级策略对此进行了改进,我们根据这里做了测试,验证了这一策略的有效性。具体不展开了,更多可参考 这里

3. configmap 改动升级

试想一种场景,升级时 configmap 改动的情况。如果升级的时候 configmap 改动了,那升级后 pod 内使用的是原有的 configmap 还是旧的 configmap 呢。

我们做了简单的测试,发现当改动 configmap 时,pod 内的内容会相应改动,意味着升级回滚都会用改动的 configmap,为什么会这样呢?

configmap 以 volume 的形式挂载到 pod 内,挂载是以 联合文件系统 的方式挂载的。对 volume 的改动会同步反映到 pod 内,

这一过程解析了为什么 configmap 对升级无影响,无影响指的是升级前后都用最新的改动 configmap。

4. 总结

对于升级场景的调研是复杂的,它不仅涉及到应用内部的处理,也涉及到外部资源,升级流程。

对升级流程简单给了一个场景,重点是想说明升级前后 manifest 的变化。

对外部资源,讨论了 configmap 改动对升级的影响,当然影响不止于这一点还有 labels 等资源,这里不一一讨论,有需要再谈。


玩转 Helm 之 upgrade的更多相关文章

  1. Helm介绍

    1.为什么要用Helm? 首先在原来项目中都是基于yaml文件来进行部署发布的,而目前项目大部分微服务化或者模块化,会分成很多个组件来部署,每个组件可能对应一个deployment.yaml,一个se ...

  2. 使用 Helm 包管理工具简化 Kubernetes 应用部署

    当在 Kubernetes 中已经部署很多应用时,后续需要对每个应用的 yaml 文件进行维护操作,这个过程会变的很繁琐,我们可以使用 Helm 来简化这些工作.Helm 是 Kubernetes 的 ...

  3. Helm简介及安装

    前提条件 一个kubernetes集群 安装和配置集群端服务Helm和Tiller 确定要应用于安装的安全配置(如果有) 1.安装HELM 每一个版本HELM提供多种操作系统的二进制版本.可以手动下载 ...

  4. 在kubernetes集群上用helm安装Datadog(Monitoring)

    Datadog is a monitoring service that gathers monitoring data from your containers within your Azure ...

  5. 基于Helm和Operator的K8S应用管理的分享

    一.为啥要用helm 对于一些微服务架构来说,会有不同的服务在上面运行,你可能要管理诸如deployment.service.有状态的Statefulset.权限的控制等等.你会发现,部署应用后还会有 ...

  6. helm 更改为国内源

     helm init --upgrade -i slpcat/tiller:v2.8.2 --stable-repo-url https://kubernetes.oss-cn-hangzhou.al ...

  7. helm的安装于与简单使用

    根据 csdn 博客整理学习 原始博客地址: https://blog.csdn.net/weiguang1017/article/details/78045013 1. 下载所需要的文件: 客户端文 ...

  8. Helm二:安装

    目录 Helm安装 Helm client安装 Helm tiller安装 Chart仓库配置 私有chart仓库 chart仓库的组成 创建本地仓库 chart仓库基本管理 Helm安装 Helm ...

  9. Helm 入门安装指南

    Helm 是 Kubernetes 生态系统中的一个软件包管理工具.本文将介绍 Helm 中的相关概念和基本工作原理,并通过一个具体的示例学习如何使用 Helm 打包.分发.安装.升级及回退 Kube ...

  10. helm 安装prometheus operator 并监控ingress

    1.helm安装 curl https://raw.githubusercontent.com/helm/helm/master/scripts/get > get_helm.shchmod 7 ...

随机推荐

  1. beanshell导入java文件

    beanshell导入java文件 beanshell可以读取class格式的文件 步骤: a.添加BeanShell预处理程序 b.请求调用 beanshell可以读取java格式的文件 步骤: a ...

  2. 第三方登录--QQ登录--单体应用

    从零玩转第三方QQ登录 下面有源码 前后端分离版本 一样的思路 https://www.cnblogs.com/Yangbuyi/p/13194007.html 第三方GITEE登录 https:// ...

  3. MySQL运维实战(1.3)安装部署:源码编译安装

    作者:俊达 引言 在大多数情况下,我们不需要自己编译MySQL源码,因为编译的MySQL和二进制包的内容基本一致.然而,有些特殊情况可能需要我们采用源码编译的方式安装MySQL: 安装非标准版本的My ...

  4. Linux 中查看文件系统的块大小

    有时可能需要查看 Unix 操作系统中有关于文件基本单元的块大小,以便对有的系统进行适当的优化(如 MySQL),本文将介绍几种在 Unix 上以及类 Unix 操作系统上可行的查看方式 检查文件系统 ...

  5. 【scikit-learn基础】--『监督学习』之 决策树分类

    决策树分类算法是一种监督学习算法,它的基本原理是将数据集通过一系列的问题进行拆分,这些问题被视为决策树的叶子节点和内部节点.决策树的每个分支代表一个可能的决策结果,而每个叶子节点代表一个最终的分类结果 ...

  6. VsCode如何配置C语言环境?

    以前学校上C语言课程都是使用VC++6.0上课,这个学期为了复习一遍C语言,而且自己经常使用VSCode开发前端项目,所以为了方便.这里把需要的环境和插件配置在这里介绍一下. Windows环境下安装 ...

  7. 文心一言 VS 讯飞星火 VS chatgpt (178)-- 算法导论13.4 1题

    一.用go语言,在执行 RB-DELETE-FIXUP 之后,证明:树根一定是黑色的. 文心一言: 在证明 RB-DELETE-FIXUP 之后,树根一定是黑色的的过程中,我们首先需要理解红黑树的性质 ...

  8. 文心一言 VS 讯飞星火 VS chatgpt (62)-- 算法导论6.5 1题

    文心一言 VS 讯飞星火 VS chatgpt (62)-- 算法导论6.5 1题 一.试说明 HEAP-EXTRACT-MAX在堆A=(15,13,9,5,12,8,7,4,0,6,2,1)上的操作 ...

  9. 28、Flutter Key详解

    在Flutter中,Key是不能重复使用的,所以Key一般用来做唯一标识.组件在更新的时候,其状态的保 存主要是通过判断组件的类型或者key值是否一致.因此,当各组件的类型不同的时候,类型已经足够 用 ...

  10. Spring系列:基于Spring-Jdbc实现事务

    目录 一.事务基本概念 二.编程式事务 三.声明式事务 前期准备 四.基于注解的声明式事务 @Transactional注解标识的位置 事务属性:只读 事务属性:超时 事务属性:回滚策略 事务属性:隔 ...