Helm介绍安装使用

发布于:2024-10-11 ⋅ 阅读:(14) ⋅ 点赞:(0)

Helm介绍

官网:

https://v3.helm.sh/zh/docs/

helm 官方的chart站点:

https://hub.kubeapps.com/

Helm介绍

  • Helm是kubernetes的包管理工具,相当于linux环境下的yum/apg-get命令。
  • Helm的首要目标一直是让“从零到Kubernetes”变得轻松。无论是运维、开发人员、经验丰富的DevOps工程师,还是刚刚入门的学生,Helm的目标是让大家在两分钟内就可以在Kubernetes上安装应用程序。
  • Helm可以解决的问题:运维人员写好资源文件模板,交给开发人员填写参数即可

Helm中的一些概念

  • helm:命令行客户端工具,主要用于Kubernetes应用中的chart的创建、打包、发布和管理。
  • Chart:helm程序包,一系列用于描述k8s资源相关文件的集合,比方说我们部署nginx,需要deployment的yaml,需要service的yaml,这两个清单文件就是一个helm程序包,在k8s中把这些yaml清单文件叫做chart图表。

chart—>通过values.yaml这个文件赋值–>生成release实例

  • vlues.yaml文件为模板中的文件赋值,可以实现我们自定义安装,如果是chart开发者需要自定义模板,如果是chart使用者只需要修改values.yaml即可
  • repository:存放chart图表的仓库,提供部署k8s应用程序需要的那些yaml清单文件
  • Release:基于Chart的部署实体,一个chart被Helm运行后将会生成对应的一个release;将在k8s中创建出真实运行的资源对象。

总结:

helm把kubernetes资源打包到一个chart中,制作并完成各个chart和chart本身依赖关系并利用chart仓库实现对外分发,而helm还可通过values.yaml文件完成可配置的发布,如果chart版本更新了,helm自动支持滚更更新机制,还可以一键回滚,但是不是适合在生产环境使用,除非具有定义自制chart的能力。

Helm v3版本变化

在这里插入图片描述

该版本主要变化如下:
架构变化:
1、Helm服务端Tiller被删除
2、Release名称可以在不同命名空间重用
3、支持将Chart推送至Docker镜像仓库中
4、使用JSONSchema验证chartvalues

K8s版本支持的各个helm版本对照表

https://helm.sh/zh/docs/topics/version_skew/

在这里插入图片描述

Helm基本使用

下载

helm属于kubernetes一个项目:

下载地址:

https://github.com/helm/helm/releases

在这里插入图片描述

上传安装包至master节点

tar zxvf helm-v3.16.1-linux-amd64.tar.gz
mv linux-amd64/helm /usr/bin/

查看helm版本:

helm version

在这里插入图片描述

配置国内存放chart仓库的地址

阿里云仓库(https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts)
官方仓库(https://hub.kubeapps.com/charts/incubator)官方chart仓库,国内可能无法访问。
微软仓库(http://mirror.azure.cn/kubernetes/charts/)这个仓库推荐,基本上官网有的chart这里都有,国内可能无法访问。

添加阿里云的chart仓库

helm repo add aliyun https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts

添加bitnami的chart仓库

helm repo add bitnami https://charts.bitnami.com/bitnami

在这里插入图片描述

更新chart仓库

helm repo update

在这里插入图片描述

查看配置的chart仓库有哪些

helm repo list

在这里插入图片描述

删除chart仓库地址

helm repo remove aliyun
显示如下:
"aliyun" has been removed from your repositories

从指定chart仓库地址搜索chart

helm search repo aliyun

搜索和下载Chart

查看阿里云chart仓库中的memcached

helm search repo aliyun |grep memcached

在这里插入图片描述

查看chart信息

helm show chart  aliyun/memcached

在这里插入图片描述

下载chart包到本地

helm pull  aliyun/memcached
tar zxvf memcached-2.0.1.tgz

在这里插入图片描述

cd memcached
ls

在这里插入图片描述

  • Chart.yaml: chart的基本信息,包括版本名字之类
  • templates: 存放k8s的部署资源模板,通过渲染变量得到部署文件
  • values.yaml:存放全局变量,templates下的文件可以调用
cd templates/
ls

在这里插入图片描述

  • _helpers.tpl 存放能够复用的模板
  • NOTES.txt 为用户提供一个关于chart部署后使用说明的文件

部署chart

helm部署memcached服务

安装memcached的Chart
上传memcache_1_4_36.tar.gz至k8snode1节点

修改statefulset.yaml文件

cd ~/memcached
cat templates/statefulset.yaml
apiVersion后面的value值变成apps/v1

在这里插入图片描述

#spec下添加selector字段
  selector:
    matchLabels:
        app: {{ template "memcached.fullname" . }}
        chart: "{{ .Chart.Name }}-{{ .Chart.Version }}"
        release: "{{ .Release.Name }}"
        heritage: "{{ .Release.Service }}"

在这里插入图片描述

删除affinity亲和性配置

在这里插入图片描述

安装memcached

rm -rf ~/memcached/templates/pdb.yaml
cd ~/memcached
helm install memcached ./

在这里插入图片描述

验证memcache是否部署成功:

kubectl get pods

在这里插入图片描述

在k8smaster 安装nc

yum install nc -y

测试memecached服务是否正常:

export POD_NAME=$(kubectl get pods --namespace default -l "app=memcached-memcached" -o jsonpath="{.items[0].metadata.name}")
kubectl port-forward $POD_NAME 11211

新开k8smaster1窗口,执行以下命令

echo -e 'set mykey 0 60 5\r\nhello\r' | nc localhost 11211

在这里插入图片描述

release相关操作

查看release发布状态

helm list

在这里插入图片描述

删除release,删除release会把release下对应的资源也删除

helm delete memcached
kubectl get pods

在这里插入图片描述

自定义Chart模板

自定义一个Chart

当我们安装好helm之后我们可以开始自定义chart,那么我们需要先创建出一个模板如下:

helm create myapp
cd myapp/
yum install tree -y
tree ./
./
├── charts   #用于存放所依赖的子chart
├── Chart.yaml  # 描述这个 Chart 的相关信息、包括名字、描述信息、版本等

├── templates  #模板目录,保留创建k8s的资源清单文件
│   ├── deployment.yaml  #deployment资源的go模板文件
│   ├── _helpers.tpl  # # 模板助手文件,定义的值可在模板中使用

│   ├── hpa.yaml #水平pod自动扩缩容go模板文件
│   ├── ingress.yaml  #七层代理go模板文件
│   ├── NOTES.txt
│   ├── serviceaccount.yaml
│   ├── service.yaml  #service的go模板文件
│   └── tests
│       └── test-connection.yaml
└── values.yaml   #模板的值文件,这些值会在安装时应用到 GO 模板生成部署文件

Chart.yaml编写规则

cat Chart.yaml 

解释说明:Chart.yaml文件主要用来描述对应chart的相关属性信息,其中apiVersion字段用于描述对应chart使用的api版本,默认是v2版本;name字段用于描述对应chart的名称;description字段用于描述对应chart的说明简介;type字段用户描述对应chart是应用程序还是库文件,应用程序类型的chart,它可以运行为一个release,但库类型的chart不能运行为release,它只能作为依赖被application类型的chart所使用;version字段用于描述对应chart版本;appVersion字段用于描述对应chart内部程序的版本信息;

在这里插入图片描述

go模板文件渲染

cat templates/deployment.yaml 

在这里插入图片描述

解释·:该部署清单模板文件,主要用go模板语言来写的,其中
{{ include "myapp.fullname" . }}就表示取myapp的全名;
{{ .Values.image.repository }}这段代码表示读取当前目录下的values文件中的image.repository字段的值;
{{ .Values.image.tag | default .Chart.AppVersion }}表示对于values文件中image.tag的值或者读取default.chart文件中的AppVersion字段的值;
简单讲go模板就是应用对应go模板语法来定义关属性的的值;一般都是从values.yaml文件中加载对应字段的值作为模板文件相关属性的值。

nindent 4:表示首行缩进4个字母
TRUNC(NUMBER)表示截断数字

values.yaml文件编写

cat values.yaml 
解释:比如我们要引用values.yaml文件中的image字段下的tag字段的值,我们可以在模板文件中写成{{ .Values.image.tag }};
如果在命令行使用--set选项来应用我们可以写成 image.tag;
修改对应的值可以直接编辑对应values.yaml文件中对应字段的值,也可以直接使用--set 指定对应字段的对应值即可;
默认情况在命令行使用--set选项给出的值,都会直接被替换,没有给定的值,默认还是使用values.yaml文件中给定的默认值;

在这里插入图片描述

部署release

helm install  myapp .
kubectl get pods

在这里插入图片描述

Helm常用命令

检查values语法格式

helm lint /root/myapp/

如图可看到语法正确

在这里插入图片描述

upgrade升级release

通过以下命令可以看到Service的type类型已经变成了nodePort

kubectl get svc
helm upgrade --set service.type="NodePort" myapp .
kubectl get svc

在这里插入图片描述

回滚release

查看历史版本

helm history myapp

在这里插入图片描述

把myapp回滚到版本1

kubectl get svc
helm rollback myapp 1
kubectl get svc

在这里插入图片描述

打包Chart

helm package /root/myapp/

在这里插入图片描述

操作release命令

helm upgrade   #升级release版本
helm rollback  #回滚release版本
helm install  #创建一个release实例
helm uninstall  #卸载release
helm history  #查看历史版本

操作Chart命令

helm lint  #检查Chat的语法
helm inspect  #查看chart的详细信息
helm pull  #把chart下载下来
helm package  #把chart打包