kubernetes资源管理工具Helm介绍、安装和使用

一、Helm介绍

1、什么时候Helm

Helm通过打包带走方式动态创建Kubernetes应用的配置信息,然后生成应用的yaml文件,并最终由kubectl进行调用完成应用的部署。因此从使用方式上看,Helm类似Linux YUM的宝管理。

2、helm的价值概述

        如下图所示,在一个企业中,可能存在多个不同的应用业务,每个业务可能包含多至十几、甚至几十个资源清单,那么对于“运维”和“研发”人员来讲,这么多的资源清单,通过人力去区分辨别,即便有“名称空间namespace”和不同“路径目录”来进行区分,也是非常吃力的;

        所以,我们就需要借助k8s资源清单的管理工具,进行以业务为单位的资源清单管理,通过一些手段,来实现业务的升级、回滚等等操作在一个文件上(通过helm的values.yaml文件),一个文件就能够管理一套业务体系,进而压缩、减轻了运维压力实现高效管理业务的目的;

3、helm的关键名词 

chart:

        应用描述,在helm中,一个chart代表一个业务的资源清单相关文件的合集;

release:

        基于chart的部署实体,一个chart被helm运行后,会生成一个release实体,这个release实体会在k8s集群中创建对应的资源对象

二、安装部署Helm 

给大家准备了软件包在百度云盘;

链接:https://pan.baidu.com/s/1SKab_auMeRWxUJgpEsNHVg?pwd=1l6w 
提取码:1l6w

1、上传并解压安装包

[root@master helm]# tar xf helm-v3.12.3-linux-amd64.tar.gz -C /usr/local/bin/
[root@master helm]# cd /usr/local/bin/linux-amd64/ 

total 49428
-rwxr-xr-x 1 1001 123 50597888 Aug 11  2023 helm
-rw-r--r-- 1 1001 123    11373 Aug 11  2023 LICENSE
-rw-r--r-- 1 1001 123     3397 Aug 11  2023 README.md

2、设置Helm全局命令

[root@master linux-amd64]# mv helm /usr/local/bin/
 [root@master linux-amd64]# helm version
version.BuildInfo{Version:"v3.12.3", GitCommit:"3a31588ad33fe3b89af5a2a54ee1d25bfe6eaa5e", GitTreeState:"clean", GoVersion:"go1.20.7"}

3、添加命令补全设置

[root@master linux-amd64]# helm completion bash > /etc/bash_completion.d/helm

 以上操作,完成了helm的安装

三、使用helm部署服务管理

1、使用helm创建chart

· 创建工作目录

[root@master linux-amd64]# mkdir -p /dolphin/chart
[root@master linux-amd64]# cd /dolphin/chart/

· helm创建chart

[root@master chart]# helm create dolphin01
Creating dolphin01
 

查看目录发现多出来一个xinjizhiwa01的目录,在查看xinjizhiwa01这个目录下,发现有文件和袭击目录;


[root@master chart]# ll
总用量 0
drwxr-xr-x 4 root root 93 5月  11 16:06 dolphin01
[root@master chart]# tree
.
└── dolphin01
    ├── charts
    ├── Chart.yaml
    ├── templates
    │   ├── deployment.yaml
    │   ├── _helpers.tpl
    │   ├── hpa.yaml
    │   ├── ingress.yaml
    │   ├── NOTES.txt
    │   ├── serviceaccount.yaml
    │   ├── service.yaml
    │   └── tests
    │       └── test-connection.yaml
    └── values.yaml

2、响应式创建名称空间

[root@master chart]# kubectl create ns ns-helm
namespace/ns-helm created

[root@master chart]# kubectl get ns | grep helm
ns-helm            Active   36s

3、安装chart到名称空间

【helm  install   自定义名称   chart名称   名称空间】

[root@master chart]# helm install helm-demo1 dolphin01 -n ns-helm

查看名称空间中pod

 模拟访问这个pod

[root@master ~]# curl -I 10.244.1.254

 

4、使用helm命令查看名称空间下的资源

[root@master chart]# helm list -n helm-dolphin

查看所有helm所有资源

[root@master chart]# helm list -A

至此,部署服务就结束了;

我们继续深入下去,我们不知为何,就部署了一个nginx1.16的版本服务,我们接下来,改变一下nginx的版本,我们将nginx的版本修改为1.20.1;

 

5、修改服务的版本

· 修改values.yaml中的tag标签版本

[root@k8s231 chart]# vim xinjizhiwa01/values.yaml 
...............

image:
  repository: nginx
  pullPolicy: IfNotPresent
  # Overrides the image tag whose default is the chart appVersion.

#我们将tag修改为1.20.1-alpine,这个就是服务的版本修改
  tag: "1.20.1-alpine"

· 再次安装chart到名称空间

这次名叫helm-demo2

[root@master chart]# helm install helm-demo2 dolphin01 -n ns-helm

查看名称空间下的pod

[root@master chart]# kubectl get pods -n ns-helm -o wide

 

模拟访问新的release的pod

[root@master chart]# curl -I 10.244.1.2
 

我们修改了values.yaml的tag,再次安装得到的pod中nginx的1.16版本变成了1.20版本;

 

6、卸载chart

[root@master chart]# helm list -n ns-helm 

 

四、认识helm的文件组成

1、流程梳理

2、查看目录解释说明

tempate目录:业务相关所有资源清单+NOTES.txt

                        NOTES.txt:安装chart成功后的提示信息;

values.yaml:给业务资源清单传递写好的变量;

五、自定义chart服务的部署

1、创建文件夹demo1

[root@master chart]# mkdir demo1
[root@master chart]# ll
总用量 0
drwxr-xr-x 2 root root  6 5月  12 00:09 demo1

2、编辑value.yaml文件(设置变量)

[root@master chart]# vim demo1/values.yaml
 

replicaCount: 6
image:
  nginx: 
    repository: nginx
    tag: "1.20.1-alpine"
dolphinlabels:
  k8s: helmdemo
name: dolphin
version: v1.0
office: "https://www.xxx.com"
 

3、资源清单deployment.yaml引入变量

[root@master chart]# mkdir demo1/templates
[root@master chart]# vim demo1/templates/deployment.yaml
[root@master chart]# cat demo1/templates/deployment.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:
  name: dolphin-deploy
spec:
  replicas: {{.Values.replicaCount}}
  selector:
    matchLabels:
      k8s: {{.Values.dolphinlabels.k8s}}
  template:
    metadata:
      labels:
        k8s: {{.Values.dolphinlabels.k8s}}
    spec:
      containers:
      - name: c1
        image: {{ .Values.image.nginx.repository }}:{{ .Values.image.nginx.tag }}
 

4、创建提示信息文件NOTES.txt,安装成功后的提示信息 

[root@master chart]# touch demo1/Chart.yaml
[root@master chart]# vim demo1/templates/NOTES.txt
[root@master chart]# cat demo1/templates/NOTES.txt 
恭喜你,安装成功了;
安装的服务名称是: {{.Values.name}}
安装的版本是: {{.Values.version}}
官网地址:{{.Values.office}}
 

5、Chart.yaml文件 

一下两个是必填字段

[root@master chart]# cat demo1/Chart.yaml 
name: test-demo
version: 1.1.1
 

5、查看验证

[root@master chart]# helm install test-demo demo1 -n ns-helm
NAME: test-demo
LAST DEPLOYED: Sun May 12 00:54:39 2024
NAMESPACE: ns-helm
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
恭喜你,安装成功了;
安装的服务名称是: dolphin
安装的版本是: v1.0
官网地址:https://www.xxx.com

查看pod

 6、helm包必须要的文件

经上边测试编写,我们知道helm必须有以下结构目录

[root@master chart]# tree demo1/
demo1/
├── Chart.yaml
├── templates
│   ├── deployment.yaml
│   └── NOTES.txt
└── values.yaml

以上自定义部署完成

六、helm对业务的升级和回滚

1、业务升级

  • 查看现有chart

[root@master chart]# helm list -n ns-helm

  • 修改变量文件(values.yaml)

修改版本号

[root@master chart]# cat demo1/values.yaml 
replicaCount: 6
image:
  nginx: 
    repository: nginx
    #tag: "1.20.1-alpine"
    tag: "1.24.0-alpine"
dolphinlabels:
  k8s: helmdemo
name: dolphin
version: v1.0
office: "https://www.xxx.com"
 

  • 基于values.yaml文件升级业务

[root@master chart]# helm upgrade test-demo demo1 -n ns-helm

总结:我们把values.yaml文件中nginx版本从1.20替换成1.24,在upgrade升级一下,再次查看发现更新成功;同时使用helm list发现version从1变成了2; 

  • 再次修改values.yaml文件

这次修改副本数、nginx版本及version版本的变量;

[root@master chart]# cat demo1/values.yaml 
replicaCount: 3
image:
  nginx: 
    repository: nginx
    #tag: "1.20.1-alpine"
    #tag: "1.24.0-alpine"
    tag: " 1.16"
dolphinlabels:
  k8s: helmdemo
name: dolphin
version: v1.0
office: "https://www.xxx.com"
 
  • 再次升级

root@master chart]# helm upgrade test-demo demo1 -n ns-helm

2、业务回滚

· 回到上一个版本
[root@master chart]# helm rollback test-demo -n ns-helm
Rollback was a success! Happy Helming!
 
· 验证是否回到上一版本

· 回滚到指定版本

我们目前是从1.20-->1.24-->1.16-->1.24共计4个版本;如何回到指定版本呐?

[root@master chart]# helm rollback test-demo 1 -n ns-helm
Rollback was a success! Happy Helming!
 

 

 

 

七、补充:chart.yaml文件

apiVersion: v2

#chart名称
name: 111
description: A Helm chart for Kubernetes
type: application

#helm list查询时的CHART字段下的后缀;
version: 0.1.0

#helm list 查询时的APP VERSION
appVersion: "1.16.0"

        也就是说,我们可以通过配置这个文件,来控制显示helm list的元数据信息,当然,也可以在values.yaml中设置这两个变量哦;

八、helm的共有仓库和私有仓库

        我们知道,docker拉取镜像是有共有仓库阿里云、华为云、清华源..和私有仓库harbor....

        同理,helm也有这个机制;

1,主流的chart仓库

- 互联网公开的chart仓库,可以直接使用他们制作好的包;

1,微软仓库:Index of /kubernetes/charts/

2,阿里云仓库:https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts

2,添加仓库的方式

· 查看现有仓库的信息

        默认情况下是没有任何仓库地址的

[root@master chart]# helm repo list
Error: no repositories to show
· 添加共有仓库

        添加微软云的helm仓库

[root@master chart]# helm repo add azure http://mirror.azure.cn/kubernetes/charts/ 
"azure" has been added to your repositories

        添加阿里云的helm仓库

[root@master chart]# helm repo add aliyun https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
"aliyun" has been added to your repositories

 

· 更新仓库信息
[root@master chart]# helm repo update
Hang tight while we grab the latest from your chart repositories...
...Successfully got an update from the "aliyun" chart repository
...Successfully got an update from the "azure" chart repository
Update Complete. ⎈Happy Helming!⎈
 
· 再次查看仓库信息
[root@master chart]# helm repo list
NAME    URL                                                   
azure   http://mirror.azure.cn/kubernetes/charts/             
aliyun  https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
 

 

3,搜索想要的chart

[root@master chart]# helm search repo elasticsearch
 

 

4,拉取仓库的chart

[root@master chart]# helm pull aliyun/elasticsearch-exporter
 

 

 

5,解压第三方的chart压缩包

[root@master chart]# tar xf elasticsearch-exporter-0.1.2.tgz 

 

安装chart到默认名称空间,这里看自己的版本修改对应版本号

[root@master chart]# helm install es elasticsearch-exporter

注意:你安装chart的时候,可能失败,因为chart中的k8s对应api-server版本可能不一样,所以对应的资源清单的一级字段也不一样,导致安装失败;发现这个问题,就去看看资源清单的api版本是否与目前你使用的k8s的api版本相同,否则就需要修改资源清单的api版本了。

 

· 私有的helm仓库(了解)
尽情期待,提示:chartmuseum项目还不错哟~
推荐阅读:
    https://github.com/helm/chartmuseum
    https://hub.docker.com/r/chartmuseum/chartmuseum

 

  • 42
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值