Helm 学习

概念:

Helm 是Kubernetes的包管理器。包管理器类似于在Ubuntu中使用的apt,能快速查找、下载和安装软件包。能够将一组K8S资源打包统一管理, 是查找、共享和使用为Kubernetes构建的软件的最佳方式。因为在Kubernetes中部署一个可以使用的应用,需要涉及到很多的 Kubernetes 资源的共同协作。而这些k8s资源过于分散,不方便进行管理,直接通过 kubectl 来管理一个应用,十分麻烦。所以使用helm就可以解决:简化部署 ;高度可配置:Helm Charts提供了高度可配置的选项,可以轻松自定义和修改应用程序的部署配置;版本控制 :Helm允许管理应用程序的多个版本,从而轻松实现版本控制和回滚;模板化:使用YAML模板来定义Kubernetes对象的配置,提高了可重复性和可扩展性;

 原理:

helm的两大核心组件,Helm 客户端:用户在本地安装的命令行工具,用于与 Helm 服务器(Tiller)交互。Tiller 服务器:Helm 的服务器端组件,部署在 Kubernetes 集群中,负责处理 Helm 客户端的请求。Helm 3 开始Tiller 被移除,Helm 客户端直接与 Kubernetes API 交互

组件:

helm客户端:Helm客户端 是终端用户的命令行客户端。负责以下内容:本地chart开发;管理仓库;管理发布;与Helm库建立接口;发送安装的chart;发送升级或卸载现有发布的请求

Helm库: 提供执行所有Helm操作的逻辑。与Kubernetes API服务交互并提供以下功能:结合chart和配置来构建版本;将chart安装到Kubernetes中,并提供后续发布对象;与Kubernetes交互升级和卸载chart。

helm安装:

安装前提条件:1)一个Kubernetes集群或有一个可访问的集群;2)决定将哪些安全配置应用于安装(如果有的话)3)安装和配置Helm。

你必须安装Kubernetes。对于Helm的最新版本推荐Kubernetes的最新稳定版本,它在大多数情况下是第二个最新的次要版本,还应该有一个本地配置的kubectl以便检查你helm install之后的chart包的部署情况。

安装:Helm客户端可以从源代码安装,也可以从预先构建的二进制版本安装。安装简单:下载需要的版本->解压->在解压目录中找到helm程序,移动到需要的目录中(mv linux-amd64/helm /usr/local/bin/helm)

三个重要的概念及使用:

chart:

chart是一个Helm包。它包含了在Kubernetes集群中运行应用程序、工具或服务所需的所有资源定义。可以把它看作Kubernetes的Homebrew formula、一个Apt dpkg或一个Yum RPM文件。

仓库(repository)

Repository(仓库) 是用来存放和共享 charts 的地方。它就像 Perl 的 CPAN 档案库网络 或是 Fedora 的 软件包仓库,只不过它是供 Kubernetes 包所使用的。

发布(release)

Release 是运行在 Kubernetes 集群中的 chart 的实例。一个 chart 通常可以在同一个集群中安装多次。每一次安装都会创建一个新的 release。以 MySQL chart为例,如果你想在你的集群中运行两个数据库,你可以安装该chart两次。每一个数据库都会拥有它自己的 release 和 release name。

开发使用

开发的一般流程:1)首先创建并编辑chart的配置;2)接着打包并发布至Helm的仓库;3)理员使用helm命令安装时,相关的依赖会从仓库下载;4)接着helm会根据下载的配置部署资源至k8s;

helm search:  helm search hub 从 Artifact Hub 中查找并列出 helm charts。 Artifact Hub中存放了大量不同的仓库。
helm search repo 从你添加(使用 helm repo add)到本地 helm 客户端中的仓库中进行查找。该命令基于本地数据进行搜索,无需连接互联网。

helm install安装:使用helm install安装包,它只需要一个chart的名称。如$ helm install stable/mariadb;注:安装chart会创建一个新的发布对象。(如果你想使用自己的发布名称,只需在helm install上使用--name选项即可)在安装期间,helm客户端将打印关于创建了哪些资源、发布的状态如何以及是否可以或应该执行其他配置步骤的有用信息。Helm不会等到所有资源都运行之后才退出。许多chart需要大小超过600M的Docker镜像,并且可能需要很长时间才能安装到集群中。

在安装过程中有两种传递配置数据的方法: 1) --values 或者 -f:指定YAML文件覆盖配置项。可以指定多次,最右边的文件将优先;

2) --set 与其变种 --set-string 和--set-file:在命令行中指定要覆盖的配置项。如果两者都使用,--set值将合并到具有更高优先级的 --values 值中。用--set指定的覆盖将持久化在ConfigMap中。可以通过 helm get values <release-name>查看通过--set已设置的值。通过 --set 设置的值可以执行 helm upgrade时指定 --reset-values来清除。从Helm 2.5.0开始,可以使用数组索引语法访问列表项。有时需要在--set行中使用特殊字符。你可以使用反斜杠来转义字符;

升级与回滚 upgrade/rollback

当一个chart的新版本发布时,或者当你想要改变发布的配置时,你可以使用helm upgrade命令。升级采用现有版本并根据你提供的信息进行升级。因为Kubernetes chart可能很大也很复杂,Helm试图执行侵入性最小的升级。它将只更新自上一个版本以来更改的内容。

使用 helm rollback [RELEASE] [REVISION]很容易回滚到以前的发布。可以使用helm history [RELEASE]来查看某个发布的修订号。

在安装、升级、回滚期间,还可以指定几个其他有用的选项来自定义Helm的行为。

(1)--timeout:等待Kubernetes命令完成的秒数值,默认为300(5分钟)

(2) --wait:等待,直到所有的pod都处于就绪状态,PVC被绑定,部署在就绪状态中有最少的pod(Desired 减去maxUnavailable),服务有一个IP地址(如果是LoadBalancer类型,则为Ingress),然后才将发布标记为成功。它将等待与--timeout值一样长的时间。如果超时,则发布将被标记为FAILED。注意:在部署将 replicas设置为1而maxUnavailable不设置为0作为滚动更新策略的一部分的场景中,--wait将返回Ready,因为它满足了Ready条件下的最少Pod。

(3) --no-hooks:跳过钩子执行

(4) --recreate-pods(只对 upgrade 和rollback可用) :此选项将导致重新创建所有pod(属于部署的pod除外)

helm delete:删除发布,可以使用helm list命令查看你目前部署的所有发布:

helm repo:操作仓库,可以使用helm repo list查看配置了哪些仓库:使用helm repo add添加一个新仓库:$ helm repo add dev https://example.com/dev-charts由于chart仓库经常更改,在任何时候都可以通过运行helm repo update来确保helm客户端是最新的。

包资源安装顺序:

  • Namespace
  • NetworkPolicy
  • ResourceQuota
  • LimitRange
  • PodSecurityPolicy
  • PodDisruptionBudget
  • ServiceAccount
  • Secret
  • SecretList
  • ConfigMap
  • StorageClass
  • PersistentVolume
  • PersistentVolumeClaim
  • CustomResourceDefinition
  • ClusterRole
  • ClusterRoleList
  • ClusterRoleBinding
  • ClusterRoleBindingList
  • Role
  • RoleList
  • RoleBinding
  • RoleBindingList
  • Service
  • DaemonSet
  • Pod
  • ReplicationController
  • ReplicaSet
  • Deployment
  • HorizontalPodAutoscaler
  • StatefulSet
  • Job
  • CronJob
  • Ingress
  • APIService

heml常用命令

命令释义
helm repo add/update/remove添加/更新/删除 helm chart仓库
helm list列举chart仓库
helm repo index基于包含打包chart的目录,生成索引文件
helm dependency build
helm dependency list
helm dependency update
基于Chart.lock文件重新构建charts/目录
列出给定chart的依赖
基于Chart.yaml内容升级charts/
helm package将chart目录打包
helm completion

为指定的shell生成自动补全脚本

helm create

使用给定的名称创建chart

helm env

helm客户端环境信息

helm get

下载命名版本的扩展信息

helm history检索发布历史
helm install安装chart
helm lint验证chart是否存在问题
helm plugin 安装、列举或卸载Helm插件
helm pull 从仓库下载chart并(可选)在本地目录中打开
helm push 推送chart到远程
helm registry从注册表登录或登出
helm rollback 回滚发布到上一个版本
helm search helm中搜索关键字
helm show 显示chart信息
helm status 显示命名版本的状态
helm template本地渲染模板
helm test 执行发布的测试
helm uninstall卸载版本
helm upgrade升级版本
helm verify验证给定路径的chart已经被签名且是合法的
helm version打印客户端版本信息
Helm | Docs
Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐