k8s之helm的小知识
现在helm基本已经是k8s应用发布的标配了,下面整理了一些小知识
一、v2和v3有什么区别?
1、移除tiller
v2版本: helm通过tiller组件与apiserver去交互的,tiller是需要部署在k8s中的
v3版本: helm直接通过kubeconfig去和apiserver通信了,精简了tiller,稳定性和性能貌似更好了
2、删除一个release的命令改变
v3版本中不需要指定--purge了,默认就自带这个参数了
v2版本: helm delete test_release --purge
v3版本: helm uninstall test_release
3、查看charts信息的命令改变
只是更改了一个单词,结果看起来好像一样
v2版本: helm inspect release-name v3版本: helm show release-name
4、拉取chart包的命令改变
只是改了一个单词,变得和docker类似
v2版本: helm fetch chart-name v3版本: helm pull chart-name
5、可命名相同名称的release
v2版本: release名称具有唯一性,不能存在相同名称的release
v3版本: release名称可以相同,用不同的namespace区分
5、部署release时候需要指定名称
v2版本: 不需要指定
v3版本: helm install test_release ./mychart
6、release信息存储的命名空间改变
v2版本: 存储在tiller命名空间下,所以release名称不能相同
v3版本: 没有tiller,存储在release实例对应的命名空间下,所以在不同命名空间,可能存在相同名称的release
二、使用helm镜像应用升级时,镜像的tag不要用latest
曾经搞过一个第三方的k8s集群,那边规划的应用镜像tag为latest,每次发布的时候会把镜像升级,然后覆盖打上latest标签,然后就开始了入坑之旅
同类应用使用同一模版,用不通的yam来控制变量
1、更新镜像后覆盖latest标签,然后执行应用发布,我这里chart部署是statefulset应用
helm upgrade -f xxx.yaml test_release harbor/mychart -n dev
执行以后,statefulset没什么动静,pod也没有滚动的迹象,k8s竟然没有重新编排!因为helm的配置并没有改动,如果镜像拉取规则是Always,手动进行滚动可以实现,如果是IfNotPresent,那么此方法不能进行升级,且容易受到本地的镜像伪装攻击。
2、尝试加入--set image.tag=latest
helm upgrade -f xxx.yaml --set image.tag=latest test_release harbor/mychart -n dev
奇怪的事情来了,执行以后只会升级标识为0的pod,即使我重新设置了滚动更新策略
updateStrategy: type: RollingUpdate rollingUpdate: partition: 0
最后效果并不管用,k8s编排完全无视了我的这个设置,所以还是无法正常的发布应用的。
3、尝试加入 --set image.tag=2021-04-25-12-00-00 (随便设置了个时间戳)
helm upgrade -f xxx.yaml --set image.tag=2021-04-25-12-00-00 test_release harbor/mychart -n dev
发现应用可以正常滚动升级
建议使用helm进行应用发布时,镜像版本千万不要用latest!
原文地址:https://www.cnblogs.com/opsdemo/p/15038753.html
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Java 新特性前瞻:封印类
- 每天手撕一道算法题-130. 被围绕的区域
- C#实现前向最大匹、字典树(分词、检索)
- Tomcat 中文乱码,设置UTF-8
- 从零搭建Spring Boot脚手架(4):手写Mybatis通用Mapper
- IDEA将Maven项目中指定文件夹下的xml等文件编译进classes
- 数据误操作,教你使用ApexSQLLog工具从 SQLServer日志恢复数据!
- 从零搭建Spring Boot脚手架(5):整合 Mybatis Plus
- SQL Server数据库阻塞,死锁查询
- 如何优雅地写出大规模线性规划的对偶
- 数据库char varchar nchar nvarchar,编码Unicode,UTF8,GBK等,Sql语句中文前为什么加N(一次线上数据存储乱码排查)
- [Maven][maven-shade-plugin]告警[WARNING] maven-shade-plugin has detected that some class files are pre
- asp.net core 3.1多种身份验证方案,cookie和jwt混合认证授权
- 只知道java反射,宁知道内省吗?
- JDK1.8新特性(七):默认方法,真香,开动!接口?我要升级!!