Day5_02_Helm
Helm
课程目标
-
掌握Helm的使用
课程实验
-
Helm搭建及使用
课堂引入
-
Helm包管理器能够让我们快速的部署k8s应用
授课进程
一、概述
0、引入
之前部署应用的基本过程,编写yaml文件 (deployment,Service,Ingress)
如果之前的方式部署单一应用,少数服务的应用,比较合适,如部署微服务项目,可能有几十个服务,每个服务都有一套yaml文件,需要维护大量yaml文件,版本管理也是特别不方便
使用helm可以解决哪些问题
-
可以把这些yaml文件作为一个整体管理
-
实现yaml文件高效复用
-
实现应用级别的版本管理
1、简介
在 Kubernetes 中部署容器云的应用也是一项有挑战性的工作,Helm 就是为了简化在 Kubernetes 中安装部署容器云应用的一个客户端工具。通过 helm 能够帮助开发者定义、安装和升级 Kubernetes 中的容器云应用,同时也可以通过 helm 进行容器云应用的分享。在 Kubeapps Hub 中提供了包括 Redis、MySQL 和 Jenkins 等常见的应用,通过 helm 可以使用一条命令就能够将其部署安装在自己的 Kubernetes 集群中。
Helm 是管理 Kubernetes 包的工具,Helm 能提供下面的能力:
-
创建新的 charts(图表)
-
将 charts 打包成 tgz 文件
-
与 chart 仓库交互
-
安装和卸载 Kubernetes 的应用
-
管理使用 Helm 安装的 charts 的生命周期
Helm本质就是一个k8s的包管理器
-
简化部署 :Helm允许使用单个命令轻松部署和管理应用程序,从而简化了整个部署过程;
-
高度可配置:Helm Charts提供了高度可配置的选项,可以轻松自定义和修改应用程序的部署配置;
-
版本控制 :Helm允许管理应用程序的多个版本,从而轻松实现版本控制和回滚;
-
模板化:Helm Charts使用YAML模板来定义Kubernetes对象的配置,从而简化了配置过程,并提高了可重复性和可扩展性;
-
应用程序库:Helm具有应用程序库的概念,可以轻松地共享和重用Helm Charts,从而简化了多个应用程序的部署和管理;
-
插件系统:Helm拥有一个强大的插件系统,允许您扩展和定制Helm的功能,以满足特定的需求和要求。
2、架构
以下是Helm的工作流程(注意:这里使用的是Helm的v3版本,该版本没有了tiller并并使用更加简单和灵活的架构,直接通过kubeconfig连接apiserver,简化安全模块,降低了用户的使用壁垒)

3、名词概述
Charts:是创建 Kubernetes 应用实例的信息集合,也就是一个 helm 的程序包,它包含了运行一个 k8s 应用所有需要的镜像、依赖关系和资源定义等,必要时还会包含 Service 资源定义,它类似于 yum 的 rpm 文件
Repository:Chart 仓库,用于集中存储和分发 Charts
Config:应用程序实例化安装时运行使用的配置信息
Release:chart 的运行实例,包含特定的 config

二、部署
首先需要在本地机器或Kubernetes集群上安装Helm。可以从Helm官方网站下载适合自己平台的二进制文件,或使用包管理器安装Helm,安装教程参考https://helm.sh
https://helm.sh/zh/docs/intro/install/
1、安装客户端
[root@master ~]# wget https://get.helm.sh/helm-v3.2.3-linux-amd64.tar.gz [root@master ~]# tar zxvf helm-v3.2.3-linux-amd64.tar.gz [root@master ~]# mv linux-amd64/helm /usr/local/bin/ [root@master ~]# helm version

2、配置仓库
# 添加阿里云仓库及bitnami仓库 [root@master01 helm]# helm repo add alicloud https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts [root@master01 helm]# helm repo add bitnami https://charts.bitnami.com/bitnami # 查看本地仓库列表 [root@master01 helm]# helm repo list

3、测试验证
# 搜索MySQL的Charts包的版本 [root@master01 helm]# helm search repo mysql # 下载到本地 [root@master01 helm]# helm pull alicloud/mysql

三、仓库操作
1、应用部署
第一步:使用搜索命令搜索应用 第二步:根据搜索内容选择安装 第三步:查看安装之后的状态
第一步: 使用搜索命令搜索应用
[root@master1 k8s]# helm search repo nginx NAME CHART VERSION APP VERSION DESCRIPTION aliyun/weave-cloud 0.1.2 Weave Cloud is a add-on to Kubernetes which pro... aliyun/weave-scope 0.9.2 1.6.5 A Helm chart for the Weave Scope cluster visual...
第二步:根据搜索内容选择安装
helm install myapp alicloud/weave-cloud

第三步:拉取到本地
helm pull alicloud/weave-scope
第四步:修改之后再进行安装
[root@master01 helm]# tar -xvf weave-scope-0.9.2.tgz # 根据错误提示进行修改
第五步:查看安装之后的状态
helm list helm status 安装之后应用的名称 [root@master1 k8s]# helm list #也可以使用helm ls NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION ui-test default 1 2023-03-13 15:00:00.561399142 +0800 CST deployed weave-scope-0.9.2 1.6.5 [root@master1 k8s]#
当然我们也可以通过kubectl命令查看相关的pod是否创建成功
四、自定义chart
自定义选项是因为并不是所有的 chart 都能按照默认配置运行成功,可能会需要一些环境 依赖,例如 PV。 所以我们需要自定义 chart 配置选项,安装过程中有两种方法可以传递配置数据:
-
—values(或-f):指定带有覆盖的 YAML 文件。这可以多次指定,最右边的文件 优先
-
—set:在命令行上指定替代。如果两者都用,—set 优先级高
1、自定义chart使用
第一步:使用命令创建chart 第二步:在templates文件夹中创建两个yaml文件 第三步:开始安装wordpress 第四步:更新应用 第五步:删除应用
第一步:使用命令创建chart
使用helm create命令创建一个新的Chart,Chart目录包含描述应用程序的文件和目录,包括Chart.yaml、values.yaml、templates目录等;
例如:在本地机器上使用helm create命令创建一个名为wordpress的Chart:
[root@master1 k8s]# helm create wordpress Creating wordpress
在当前文件夹,可以看到创建了一个wordpress的目录,且里面的内容如下:
├── charts #普通文件夹,刚开始创建为空 ├── Chart.yaml #用于配置当前chart的属性信息,可以作为全局变量提供给模板文件使用 ├── templates #目标信息文件,里面有很多的yaml模板文件,我们使用helm创建应用相当于helm帮我去执行这些yaml文件了 │ ├── deployment.yaml │ ├── _helpers.tpl │ ├── hpa.yaml │ ├── ingress.yaml │ ├── NOTES.txt │ ├── serviceaccount.yaml │ ├── service.yaml │ └── tests #测试目录,先执行测试,测试通过再执行templates │ └── test-connection.yaml └── values.yaml #全局变量文件,提供给templates里面的yaml文件用
第二步: 创建/编辑Chart配置
使用编辑器编辑Chart配置文件,包括Chart.yaml和values.yaml
1)Chart.yaml
apiVersion: chart API 版本 (必需) #必须有
name: chart名称 (必需) # 必须有
version: 语义化2 版本(必需) # 必须有
kubeVersion: 兼容Kubernetes版本的语义化版本(可选)
description: 一句话对这个项目的描述(可选)
type: chart类型 (可选)
keywords:
- 关于项目的一组关键字(可选)
home: 项目home页面的URL (可选)
sources:
- 项目源码的URL列表(可选)
dependencies: # chart 必要条件列表 (可选)
- name: chart名称 (nginx)
version: chart版本 ("1.2.3")
repository: (可选)仓库URL ("https://example.com/charts") 或别名 ("@repo-name")
condition: (可选) 解析为布尔值的yaml路径,用于启用/禁用chart (e.g. subchart1.enabled )
tags: # (可选)
- 用于一次启用/禁用 一组chart的tag
import-values: # (可选)
- ImportValue 保存源值到导入父键的映射。每项可以是字符串或者一对子/父列表项
alias: (可选) chart中使用的别名。当你要多次添加相同的chart时会很有用
maintainers: # (可选) # 可能用到
- name: 维护者名字 (每个维护者都需要)
email: 维护者邮箱 (每个维护者可选)
url: 维护者URL (每个维护者可选)
icon: 用做icon的SVG或PNG图片URL (可选)
appVersion: 包含的应用版本(可选)。不需要是语义化,建议使用引号
deprecated: 不被推荐的chart (可选,布尔值)
annotations:
example: 按名称输入的批注列表 (可选).
示例
name: nginx-helm apiVersion: v1 version: 1.0.0
2)values.yaml
values.yaml包含应用程序的默认配置值,举例:
image: repository: nginx tag: '1.17.1'
3)templates
在模板中引入values.yaml里的配置,在模板文件中可以通过 .VAlues对象访问到,例如:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-helm-{{ .Values.image.repository }}
spec:
replicas: 1
selector:
matchLabels:
app: nginx-helm
template:
metadata:
labels:
app: nginx-helm
spec:
containers:
- name: nginx-helm
image: {{ .Values.image.repository }}:{{ .Values.image.tag }}
ports:
- containerPort: 80
protocol: TCP
第三步:打包Chart
使用helm package命令将Chart打包为一个tarball文件,例如在wordpress目录中使用helm package命令将Chart打包为一个tarball文件:
helm package wordpress/

第四步:发布Chart
将打包好的Chart发布到一个Helm Repository中。可以使用helm repo add命令添加一个Repository,然后使用helm push命令将Chart推送到Repository中,例如:
# helm repo add myrepo https://example.com/charts helm push nginx-helm-1.0.0.tgz alicloud
第五步:安装Release
使用helm install命令安装Chart的Release,可以通过命令行选项或指定values.yaml文件来配置Release,例如:
helm install mywordpress ./wordpress
第六步:删除应用
helm uninstall mywordpress
第七步:管理Release
使用helm ls命令查看当前运行的Release列表,例如:
helm upgrade mywordpress myrepo/wordpress --set image.tag=5.7.3-php8.0-fpm-alpine
这将升级 mywordpress 的WordPress应用程序镜像版本为5.7.3-php8.0-fpm-alpine
五、随堂作业
1、完成全部课堂实验
六、扩展内容
更多推荐
所有评论(0)