iis服务器助手广告广告
返回顶部
首页 > 资讯 > 服务器 >K8s-helm简介及基本概念详解
  • 364
分享到

K8s-helm简介及基本概念详解

2024-04-02 19:04:59 364人浏览 薄情痞子
摘要

目录Helm简介一、什么是 Helm(官网:https://helm.sh/)二、Helm中的基本概念Chart三、从Helm2到Helm3的变化四、Helm版本支持策略Helm简介

Helm简介

一、什么是 Helm(官网:Https://helm.sh/)

​在没使用 helm 之前,向 kubernetes 部署应用,我们要依次部署 deployment、svc 等,步骤较繁琐。况且随着很多项目微服务化,复杂的应用在容器中部署以及管理显得较为复杂,helm 通过打包的方式,支持发布的版本管理和控制,很大程度上简化了 Kubernetes 应用的部署和管理,就像 Java 使用 Mavennode 使用 npm;python 使用 pip;linux 使用 yum **

​Helm 本质就是让 k8s 的应用管理(Deployment,Service 等 ) 可配置,能动态生成。通过动态生成 K8s 资源清单文件(deployment.yaml,service.yaml)。然后调用 Kubectl 自动执行 K8s 资源部署**。

helm的主要功能:

#查找要安装和使用的预打包软件
#轻松创建和托管自己的软件包
#将软件包安装到任何 K8S 集群
#查询集群以查看已安装和正在运行的程序包
#更新、删除、回滚或查看已安装软件包的历史记录

二、Helm中的基本概念Chart

​Helm 使用的包格式称为 chart,它是一个描述 Kubernetes 相关资源对象的文件集合。它的技术特点类似 jinja模版,以渲染模版的方式,生成运行一个服务实例所需的一系列资源对象文件,并以此进行服务的发布。通过这种方式,我们也可以十分简单的制作自定义的 chart。

Chart 有自已特定的目录布局,我们以官方提供的 Wordpress为例说明,chart 的文件目录结构如下:

wordpress/
  Chart.yaml                # 包含了chart信息的YAML文件
  LICENSE                   # 可选: 包含chart许可证的纯文本文件
  README.md                 # 可选: 可读的README文件
  values.yaml               # chart 默认的配置值
  values.schema.JSON        # 可选: 一个使用jsON结构的values.yaml文件
  charts/                   # 包含chart依赖的其他chart
  crds/                     # 自定义资源的定义
  templates/                # 模板目录, 当和values 结合时,可生成有效的Kubernetes manifest文件
  templates/NOTES.txt       # 可选: 包含简要使用说明的纯文本文件

  #Helm Chart 基本元素为 charts/、Chart.yaml、templates/、values.yaml,并保留 crds/ ,要正确的使用 chart 进行发布,该元素是必不可少的。

Repo

​Helm chart 可以被存储在专用的 HTTP 服务器上,称为 chart 仓库(repositories),和 yum repository类似,chart 仓库提供了一个 index.yaml 来描述一批 chart,并且提供了每个 chart 的下载地址信息。

​Helm 客户端可以指向多个 chart 仓库,默认情况下是没有配置仓库的,需要使用 helm repo add 来进行添加。helm3 中对于一些常用服务的下载安装,用 bitnami 仓库 取代了原来的stable 仓库,但是仍保留了 stable 仓库的使用

Release

​当 chart 被发布后,Helm 库会创建一个 release 来跟踪这个发布的对象,它的实质是在 Kubernetes 中运行的各种资源,servicedeploymentconfigmapsecret 等,在 K8S 集群中的直接的表现就是一个或多个 pod.

​Helm 的 release 是允许启动多个不同服务的,且每个服务之间遵循依赖关系,这点就比较类似 Docker compose.

三、从Helm2到Helm3的变化

1.Helm3新增的功能

​Helm3新增了许多新功能,以下几个功能需要特别指出:

  • release 的信息以新的形式存储
  • 移除了 Tiller 组件
  • Helm3 包含了对新版本 Helm charts (Charts v2)的支持
  • Helm3 支持 library charts —— 一种作为其他 charts 元素的 charts
  • 将 Chart 推送保存到 OCI 注册中心(类似 DockerReGIStry ),以进行复用
  • 升级Kubernetes资源时将应用向战略合并补丁
  • 支持使用 JSON Schema 对 charts 的 values 进行校验
  • 为了使Helm更安全,可用和健壮,已进行了许多小的改进。

2.重要变化概述

​1)移除Tiller

Tiller 在 Helm2 中是一个重要的组成部分。Helm2 使用它和 grpc 来处理 Helm chart 的安装和管理,呈现 chart 并将其推送到 Kubernetes api Server。Tiller 允许团队共享一个 Kubernetes 集群,多个 operator 可以使用同一组发行版,团队成员通过它就可以在一个共享的 Kubernetes 集群中管理复杂的应用发布。

​但是从 Kubernetes 1.6 开始,考虑到安全性,集群默认会开启角色访问控制(RBAC),这使得管理和配置Tiller会变得非常复杂,因为可能的安全策略数量太多了。为了简化安全模型实现方式,并使管理员/SRE不需要去深入研究 Kubernetes 的安全组件,helm 提供了一个不需要太过关注安全规则的默认配置,但是这又会使得授权变得宽松,这反而会导致安全隐患。

​因此在 Helm3 中干脆移除了 Tiller,而是选择从 Kubernetes API Server 中获取信息来渲染 Charts 客户端,并在 Kubernetes 中存在安装记录,这些过程既没有 Tiller 也可以实现。

​Helm3 可以支持所有的 Kubernetes 认证及鉴权等全部安全特性。Helm和本地的 kubeconfig flie 中的配置使用一致的权限。管理员可以按照自己认为合适的粒度来管理用户权限,下图可详细看出helm2到helm3的改变

​2)Chart仓库升级

​在 Helm3 中,helm search 除了支持本地 repository 搜索外,还支持 helm search hub 搜索 Artifact Hub 中所有公开的 charts。

​3)改进升级策略:使用三路策略合并补丁

​在 Helm2 中,使用了双路策略合并补丁,简单来说就是在使用 helm upgrade 更新过程中,会比对本次发布的 chart manifest 和 最近一次发布的 chart manifest 的差异,以此来决定哪些更改被应用到 Kubernetes 的资源中去。并且,Helm 只会将最后一次应用的 chart manifest 作为 release 的当前状态,如果 chart 状态没有更改,资源的活动状态就不会更改,也就是说使用诸如 kubectl editkubectl scale 这种外部方式进行的修改不会被 Helm 识别的,这种情况下如果发生回滚操作,Helm 会由于 chart 并没有发生变化而导致回滚失败。

​而在 Helm3 中,这种策略被升级成了三路策略合并,Helm 在生成一个补丁时,也会考虑之前老的 manifest 的活动状态。也就是说,在使用老的 chart manifest 生成新的补丁时,Helm 还会考虑当前的活动状态,并将其与之前老的 manifest 进行比对,并再比对新的 manifest 是否有改动,并进行自动补全,以此来生成最终的更新补丁。

​示例说明

用Chart渲染生成的manifest如下

containers:
- name: server
    image: my_app:2.0.0

通过非Helm的方式将应用的活动状态修改如下:

containers:
- name: server
    image: my_app:2.0.0
- name: sidecar
  	image: dump_handler:1.0.0

而现在我们想要将应用的镜像升级到2.1.0,通过chart进行升级操作

在 Helm2 中,由于不会考虑 chart 之外的修改,而是检测 chart 生成的 manifest 之间的区别,因此修改后的状态如下:

containers:
- name: server
    image: my_app:2.1.0

而在 Helm3 中,通过三路合并策略,会检查到除了 chart 的修改外,还多了一个 sidecar 容器,因此会进行补全,最终修改状态如下:

containers:
- name: server
    image: my_app:2.1.0
- name: sidecar
  	image: dump_handler:1.0.0

​4)release名称存储位置改变

​在 Helm2 中,release 的相关信息都被保存在 Tiller 的 namespace下,所以 release 的名称必须是唯一的;而随着 Tiller 组件的移除, Helm3 中release 相关的信息都被保存在了应用自己相对应的 namespace 下,因此根据 namespace 的隔离性质,在不同的 ns 下,release 的名称可以重复。

​Helm3 中,在执行 helm list 时需要添加 --all-namespaces 参数才能获取到 Helm2 中同样的结果

​5)requirements.yaml合并入 Chart.yaml

​动态依赖关系的chart 依赖从 requirements.yamlrequirements.lock 移至 Chart.yamlChart.lock。 推荐在 Helm3 的新 chart 中使用 Chart API v2 的新格式,但是 Helm3 中依然可以识别 v1 版本,并且会自动加载已有的 requirements.yaml 文件。

​在 Helm2 中,requirements.yaml 的表达式类似如下形式:

dependencies:
- name: mariadb
  version: 5.x.x
  repository: https://charts.helm.sh/stable
  condition: mariadb.enabled
  tags:
    - database

​而在 Helm3 中,表达式的形式并没有变化,但是现在需要写在 Chart.yaml 中。Chart 依然会下载和放置在 charts/ 目录,所以 charts/ 目录中的子 chart 不需要做任何修改,可以沿用 Helm2 的。

​6)CLI命令重命名

#删除release
	helm delete ---> helm uninstall
#在 Helm2 中,如果要清楚 release 的各种资源,必须要使用 --purge 参数,Helm3 中默认就会启用次功
#如果要保留历史行为数据,需执行 
	helm uninstall ---> keep-history
	helm inspect ---> helm show
    helm feach ---> helm pull
#这些命令还保留了它们较旧的命令作为别名,因此您可以继续以任何一种形式使用它们。

​7)简化模板对象 .Capabilities

Capabilities 是 Helm 模版可以访问的内置对象之一,其提供了关于 Kubernetes 集群支持的功能的信息,包含以下内容:

对象名称描述
Capabilities.APIVersions集群的版本信息
Capabilities.APIVersions.Has $version说明集群中的版本 (例如, batch/v1) 或是资源 (例如, apps/v1/Deployment) 是否可用
Capabilities.KubeVersion提供了查找 Kubernetes 版本的方法。可以获取到 MajorMinorgitVersionGitCommitGitTreeStateBuildDateGoVersionCompilerPlatfORM
Capabilities.TillerVersion提供了查找Tiller版本的方法。可以获取到SemVerGitCommit, and GitTreeState.

四、Helm版本支持策略

​1、版本形式

​Helm 的版本用 x.y.z 的形式描述,x 是主版本,y 是次版本,z 是补丁版本。当一个 Helm 的新版本发布时,都是针对 Kubernetes 的一个特定版本编译的,比如 3.0.0 基于 Kubernetes 的 1.16.2 的客户端API版本构建,则可以兼容 Kubernetes 1.16。

​2、可支持的版本偏差

​相较于 Helm2 对于 Kubernetes 次版本变更支持的严格(n-1),Helm3 可以向下兼容 n-3 的次版本,比如你使用一个针对 Kubernetes 1.18 客户端 API 版本编译的 Helm3 版本,那么它可以支持的 Kubernetes 版本为 1.18、1.17、1.16、1.15 ;

​如果你使用一个针对 Kubernetes 1.15 客户端 API 版本编译的 Helm2 版本,那么它可以支持的 Kubernetes 版本为 1.15、1.14。

​ Helm 没有向上兼容机制,故按照官方推荐安装即可:

Helm 版本支持的 Kubernetes 版本
3.8.x1.23.x - 1.20.x
3.7.x1.22.x - 1.19.x
3.6.x1.21.x - 1.18.x
3.5.x1.20.x - 1.17.x
3.4.x1.19.x - 1.16.x
3.3.x1.18.x - 1.15.x
3.2.x1.18.x - 1.15.x
3.1.x1.17.x - 1.14.x
3.0.x1.16.x - 1.13.x
2.16.x1.16.x - 1.15.x
2.15.x1.15.x - 1.14.x
2.14.x1.14.x - 1.13.x
2.13.x1.13.x - 1.12.x
2.12.x1.12.x - 1.11.x
2.11.x1.11.x - 1.10.x
2.10.x1.10.x - 1.9.x
2.9.x1.10.x - 1.9.x
2.8.x1.9.x - 1.8.x
2.7.x1.8.x - 1.7.x
2.6.x1.7.x - 1.6.x
2.5.x1.6.x - 1.5.x
2.4.x1.6.x - 1.5.x
2.3.x1.5.x - 1.4.x
2.2.x1.5.x - 1.4.x
2.1.x1.5.x - 1.4.x
2.0.x1.4.x - 1.3.x

到此这篇关于K8s-helm简介的文章就介绍到这了,更多相关K8s-helm简介内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: K8s-helm简介及基本概念详解

本文链接: https://www.lsjlt.com/news/164648.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • K8s-helm简介及基本概念详解
    目录Helm简介一、什么是 Helm(官网:https://helm.sh/)二、Helm中的基本概念Chart三、从Helm2到Helm3的变化四、Helm版本支持策略Helm简介...
    99+
    2024-04-02
  • RocketMQ 介绍及基本概念
    1 介绍 RocketMQ作为一款纯java、分布式、队列模型的开源消息中间件,支持事务消息、顺序消息、批量消息、定时消息、消息回溯等。 1.1 RocketMQ 特点 支持发布/订阅(Pub/Sub)和点对点(P2P)消息模型 在一个...
    99+
    2023-08-19
    rabbitmq kafka java
  • JS 基本概念详细介绍
    目录1、JS的特点1.1 多范式1.2 解释1.3单线程1.4 非阻塞1.5 高级1.6 动态类型2、学习策略3、基础知识许多人在深入研究 Javascript 之前忽略了 Java...
    99+
    2024-04-02
  • JAVA基本概念详解
    目录一、java发展史二、Java跨平台二、JRE和JDK三、下载JDK四、常用的DOS命令五、配置Path环境变量六、第一个程序六、bug(甲壳虫)七、Notepad八、注释九、关...
    99+
    2024-04-02
  • k8s入门集群组件介绍及概念理解
    目录master节点:集群的控制中枢node节点:工作节点,也叫worker节点kube-system命名空间:系统组件podk8s是谷歌以Borg为前身,基于谷歌15年生产环境经验...
    99+
    2024-04-02
  • Oracle RAC 简介及核心概念
    Oracle RAC(Real Application Clusters)简介及核心概念 随着企业数据量的不断增长和对高可用性、高性能的需求日益突出,数据库集群技术变得越来越重要。Or...
    99+
    2024-03-07
    oracle 概念 rac
  • Java的基本概念介绍
    本篇内容介绍了“Java的基本概念介绍”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!   Java概述:    目前Java主要应用于中间件...
    99+
    2023-06-03
  • Node.js的4个基本概念详解
    本篇内容主要讲解“Node.js的4个基本概念详解”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Node.js的4个基本概念详解”吧!1.非阻塞或异步I/O由于...
    99+
    2024-04-02
  • C++string容器基本概念详解
    string基本概念 本质: string是C++风格的字符串,而string本质上是一个类 string和char*区别: char*是一个指针 string是一...
    99+
    2024-04-02
  • LINQ to DataSet简介及概念是什么
    本篇文章为大家展示了LINQ to DataSet简介及概念是什么,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。使用 LINQ to DataSet 可以更快更容易地查询在 DataSet 对象中缓...
    99+
    2023-06-17
  • axios概念介绍和基本使用
    目录简介使用axios配置对象常用的配置项:默认配置axios拦截器取消请求总结 简介 本文主要讲解axios的概念和基本使用。 axios时目前最流行的ajax封装库之一...
    99+
    2024-04-02
  • Git基本概念及操作(3)
    如果使用传统的如CC开发的话,刚开始进行GIT开发可能不是太适应。这个主要是有些概念不一样。比喻在CC中,我们一般是围绕一个主分支进行开发,对一个文件来说,在主分支上会生成不同的版本。同样,我们在每一个版本下面创立新的次分支,在次分支上也会...
    99+
    2023-01-31
    基本概念 操作 Git
  • Go语言函数的基本概念及用法介绍
    Go语言是一种快速、简洁、安全并且高效的编程语言,近年来在软件开发领域有着日益增长的影响力。在Go语言中,函数是非常重要的概念,它是程序中最基本的组成单元。本文将介绍Go语言函数的基本...
    99+
    2024-03-09
    函数 用法 概念 go语言
  • C++泛型编程基本概念详解
    目录1.什么是泛型编程?2.函数模板(1)函数模板概念(2)函数模板格式(3)函数模板的原理(4)函数模板的实例化(5)模板参数的匹配原则3.类模板(1)类模板的定义格式(2)类模板...
    99+
    2024-04-02
  • VB.NET多维数组基本概念详解
    VB.NET中的多维数组是一种特殊的数据结构,它可以存储多个值,并且可以按照多个维度进行索引和访问。多维数组的基本概念包括以下几点:...
    99+
    2023-09-22
    VB.NET
  • 基于线程、并发的基本概念(详解)
    什么是线程?提到“线程”总免不了要和“进程”做比较,而我认为在Java并发编程中混淆的不是“线程”和“进程”的区别,而是“任务(Task)”。进程是表示资源分配的基本单位。而线程则是进程中执行运算的最小单位,即执行处理机调度的基本单位。关于...
    99+
    2023-05-31
    线程 基本概念 并发
  • PHP数组基本概念详细介绍是怎样的
    PHP数组基本概念详细介绍是怎样的,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。数组在我们PHP中是很重要的,如何利用数组实现我们想要的功能,我们这里就来看看关...
    99+
    2023-06-17
  • Java 虚拟机(JVM)之基本概念详解
    1、类加载子系统:负责从文件系统或者网络中加载Class信息,加载的信息存放在一块称之为方法区的内存空间。2、方法区:就是存放类信息、常量信息、常量池信息、包括字符串字面量和数字常量等。方法区是辅助堆栈的块永久区,解决堆栈信息的产生,是先决...
    99+
    2023-05-31
    java 虚拟机 基本概念
  • 音视频基本概念和FFmpeg的简单入门教程详解
    目录写在前面基本概念容器/文件(Conainer/File):媒体流(Stream):数据帧/数据包(Frame/Packet):编解码器(Codec):复用(mux):解复用(mu...
    99+
    2024-04-02
  • 浅谈音视频ptsdts基本概念及理解
    目录I、P、B 帧DTS、PTS 的概念音视频的同步PTS和DTS的时间基视频的播放过程可以简单理解为一帧一帧的画面按照时间顺序呈现出来的过程,就像在一个本子的每一页画上画,然后快速...
    99+
    2022-11-13
    音视频 pts dts
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作