29-资源清单的管理工具-helm

一、helm的介绍

1,helm的价值概述

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

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

2,helm的关键名词

chart

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

release

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

二、安装部署helm

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

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

1,上传软件包

[root@k8s231 helm]# rz -E
[root@k8s231 helm]# ll
total 15656
-rw-r--r-- 1 root root 16028423 Nov  8 00:35 helm-v3.12.3-linux-amd64.tar.gz

2,解压安装包

[root@k8s231 helm]# tar xf helm-v3.12.3-linux-amd64.tar.gz -C /usr/local/bin/
[root@k8s231 helm]# cd /usr/local/bin/linux-amd64/
[root@k8s231 linux-amd64]# ll
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

3,设置helm全局命令

[root@k8s231 linux-amd64]# mv helm /usr/local/bin/

[root@k8s231 linux-amd64]# helm --help

4,添加命令补全设置

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

至此,安装helm成功;

三、使用helm部署服务管理

1,使用helm创建chart

· 创建工作目录

[root@k8s231 xinjizhiwa01-chart]# mkdir /xinjizhiwa/chart
[root@k8s231 xinjizhiwa01-chart]# cd /xinjizhiwa/chart

· helm创建chart

[root@k8s231 chart]# helm create xinjizhiwa01
Creating xinjizhiwa01

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

[root@k8s231 chart]# ll
total 0
drwxr-xr-x 4 root root 93 Feb 25 21:06 xinjizhiwa01

[root@k8s231 chart]# ll xinjizhiwa01/
total 8
drwxr-xr-x 2 root root    6 Feb 25 21:06 charts
-rw-r--r-- 1 root root 1148 Feb 25 21:06 Chart.yaml
drwxr-xr-x 3 root root  162 Feb 25 21:06 templates
-rw-r--r-- 1 root root 1879 Feb 25 21:06 values.yaml

2,响应式创建名称空间

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

[root@k8s231 chart]# kubectl get ns
NAME              STATUS   AGE
...........
helm-xjzw01       Active   5s

3,安装chart到名称空间

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

本次起名叫xjzw

[root@k8s231 chart]# helm install xjzw xinjizhiwa01 -n helm-xjzw01

查看名称空间中的pod

[root@k8s231 chart]# kubectl get pods -o wide -n helm-xjzw01

模拟访问这个pod

[root@k8s231 chart]# curl -I 10.100.2.4

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

[root@k8s231 chart]# helm list -n helm-xjzw01

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

我们继续深入下去,我们不知为何,就部署了一个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到名称空间

这次名称叫xjzw02

[root@k8s231 chart]# helm install xjzw02 xinjizhiwa01 -n helm-xjzw01

查看名称空间下的pod

[root@k8s231 chart]# kubectl get pods -o wide -n helm-xjzw01

模拟访问新的release的pod

[root@k8s231 chart]# curl -I 10.100.2.5

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

6,卸载chart

[root@k8s231 chart]# helm uninstall xjzw -n helm-xjzw01
release "xjzw" uninstalled

查看helm的chart是否被卸载?

[root@k8s231 chart]# helm list -n helm-xjzw01

发现没有第一个chart的release名称了【xjzw】

四、认识helm的文件组成

1,流程梳理

2,查看目录解释说明

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

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

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

五、自定义chart服务的部署

1,编辑value.yaml文件(设置变量)

本质上就是设置变量

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

replicaCount: 6
image:
  nginx:
    repository: nginx
    tag: "1.20.1-alpine"
xjzwlables:
  k8s: xinjizhiwa
  kubernetes: k8s
name: xinjizhiwaname
version: v1.0
office: "https:/www.xinjizhiwa.com"

2,资源清单引入变量

[root@k8s231 chart]# cat 111/templates/deployment.yaml 
apiVersion: apps/v1
kind: Deployment
metadata: 
  name: xjzw-dm
spec:
  replicas: {{ .Values.replicaCount }}
  selector:
    matchLabels:
      k8s: {{ .Values.xjzwlables.k8s }}
  template:
    metadata: 
      labels:
        k8s: {{ .Values.xjzwlables.k8s }}
    spec:
      containers:
      - name: c1
        image: {{ .Values.image.nginx.repository }}:{{ .Values.image.nginx.tag  }}

安装成功的提示信息已经显示出来;

[root@k8s231 chart]# helm install xin 111 -n helm-xjzw01
NAME: xin
LAST DEPLOYED: Mon Feb 26 01:28:50 2024
NAMESPACE: helm-xjzw01
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
恭喜你,安装成功了:
安装的服务名称是: xinjizhiwaname
安装的服务版本是:v1.0
官网地址:https:/www.xinjizhiwa.com

3,查看验证

·查看pod副本数

[root@k8s231 chart]# kubectl get pods -n helm-xjzw01 -o wide

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

1,业务升级

· 查看现有chart

[root@k8s231 chart]# helm list -n helm-xjzw01

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

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

replicaCount: 6
image:
  nginx:
    repository: nginx

    #将nginx1.20版本升级到1.24版本
    #tag: "1.20.1-alpine"
    tag: "1.24.0-alpine"
xjzwlables:
  k8s: xinjizhiwa
  kubernetes: k8s
name: xinjizhiwaname
version: v1.0
office: "https:/www.xinjizhiwa.com"

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

[root@k8s231 chart]# helm upgrade xin 111 -n helm-xjzw01

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

· 再次修改values.yaml文件

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

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

#replicaCount: 6
replicaCount: 3
image:
  nginx:
    repository: nginx
    #tag: "1.20.1-alpine"
    #tag: "1.24"
    tag: "1.16"
xjzwlables:
  k8s: xinjizhiwa
  kubernetes: k8s
name: xinjizhiwaname
version: v2.0
office: "https:/www.xinjizhiwa.com"

· 再次升级

[root@k8s231 chart]# helm upgrade xin 111 -n helm-xjzw01

再次查看

2,业务回滚

· 回到上一个版本

[root@k8s231 chart]# helm rollback xin -n helm-xjzw01
Rollback was a success! Happy Helming!

· 验证是否回到上一版本

[root@k8s231 chart]# kubectl get pods -o wide -n helm-xjzw01

[root@k8s231 chart]# curl -I 10.100.2.19

此时发现回到了上一个版本,1.24版本及对应6个副本;

· 回滚到指定版本

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

[root@k8s231 chart]# helm rollback xin 1 -n helm-xjzw01
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@k8s231 chart]# helm repo list
Error: no repositories to show

· 添加共有仓库

        添加微软云的helm仓库

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

        添加阿里云的helm仓库

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

· 更新仓库信息

[root@k8s231 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@k8s231 chart]# helm repo list
NAME      URL                                                   
azure     http://mirror.azure.cn/kubernetes/charts/             
aliyun    https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts

3,搜索想要的chart

查一下有没有es的chart

[root@k8s231 chart]# helm search repo elasticsearch

4,拉取仓库的chart

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

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

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

安装chart到默认名称空间

[root@k8s231 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

至此,helm的学习就到此位置;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/702866.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

分布式知识整理

分布式锁 以商场系统超卖现象举例 超卖现象一 现象: 商品卖出数量超出了库存数量。 产生原因: 扣减库存的动作在程序中进行,在程序中计算剩余库存,在并发场景下,导致库存计算错误。 代码复现 es.shutdown(); cycl…

Nest.js权限管理系统开发(五)返回格式化

返回格式化拦截器 在上一篇《Nest.js权限管理系统开发(四)Swagger API接入》中,我们在base.controller.ts中创建了多个接口,每个接口都有不同的返回类型。现实中我们往往需要统一返回数据的格式,例如: {&…

conda 导出/导出配置好的虚拟环境

一. 导出环境配置(yml文件) 1. 在主目录下激活虚拟环境(UE4是我的虚拟环境名称,请根据你自己的名称进行修改) conda activate UE4 2. 运行此代码 conda env export > environment.yml 二. 导入环境配置&#xf…

python统计分析——多解释变量的方差分析

参考资料:用python动手学统计学 1、导入库 # 导入库 # 用于数值计算的库 import numpy as np import pandas as pd import scipy as sp from scipy import stats # 用于绘图的库 from matplotlib import pyplot as plt import seaborn as sns sns.set() # 用于估计…

Linux基础命令—进程管理

基础知识 linux进程管理 什么是进程 开发写代码->代码运行起来->进程 运行起来的程序叫做进程程序与进程区别 1.程序是一个静态的概念,主要是指令集和数据的结合,可以长期存放在操作系统中 2.进程是一个动态的概念,主要是程序的运行状态,进程存在生命周期,生命周期结…

Seata分布式事务实战XATCC模式

目录 XA模式 XA 模式的使用 Spring Cloud Alibaba整合Seata XA TCC模式 TCC模式接口改造 TCC如何控制异常 Spring Cloud Alibaba整合Seata TCC XA模式 整体机制 在 Seata 定义的分布式事务框架内,利用事务资源(数据库、消息服务等)对…

【Python从入门到进阶】49、当当网Scrapy项目实战(二)

接上篇《48、当当网Scrapy项目实战(一)》 上一篇我们正式开启了一个Scrapy爬虫项目的实战,对当当网进行剖析和抓取。本篇我们继续编写该当当网的项目,讲解刚刚编写的Spider与item之间的关系,以及如何使用item&#xff…

【python】0、超详细介绍:json、http

文章目录 一、json二、http2.1 json 读取 request 序列化 三、基本类型3.1 decimal 四、图像4.1 颜色格式转换 一、json import json f open(data.json) # open json file data json.load(f) # 读出 json object for i in data[emp_details]: # 取出一级属性 emp_details, …

云尚办公-0.3.0

5. controller层 import pers.beiluo.yunshangoffice.model.system.SysRole; import pers.beiluo.yunshangoffice.service.SysRoleService;import java.util.List;//RestController:1.该类是控制器;2.方法返回值会被写进响应报文的报文体,而…

ChatRTX安装教程

介于本人一直想将现有的智慧城市的文档结合大模型RAG实现知识库问答助手,借着Chat With RTX的风潮正好将机器人和知识库合二为一,方便以后对众多文件进行查阅。 一、概要 Chat With RTX 是一个 Demo,用来将您自己的资料(文档、笔…

第三节:kafka sarama 遇到Bug?

文章目录 前言一、先上结果二、刨根问底总结 前言 前面两节,我们已经简单应用了sarama的两个类型Client和ClusterAdmin,其中有一个案例是获取集群的ControllerId,但是在后面的测试过程过程中,发现一个问题,返回的Cont…

【PyQt5桌面应用开发】3.Qt Designer快速入门(控件详解)

一、Qt Designer简介 Qt Designer是PyQt程序UI界面的实现工具,可以帮助我们快速开发 PyQt 程序的速度。它生成的 UI 界面是一个后缀为 .ui 的文件,可以通过 pyiuc 转换为 .py 文件。 Qt Designer工具使用简单,可以通过拖拽和点击完成复杂界面…

仿12306校招项目业务二(列车检索)

目录 验证数据 加载城市数据 查询列车站点信息 查询列车余票信息 构建列车返回数据 12306 项目中列车数据检索接口路径 &#xfeff; TicketController的pageListTicketQuery&#xfeff;。 GetMapping("/api/ticket-service/ticket/query")public Result<T…

查看笔记本电池健康状态-windows11

在 Windows 11 中获取详细的电池报告 Windows 11 中内置的 Powerfg 命令行选项来生成电池报告。 在任务栏上选择“搜索”&#xff0c;键入“cmd”&#xff0c;长按&#xff08;或右键单击&#xff09;“命令提示符”&#xff0c;然后选择“以管理员身份运行” ->“是”。 …

Mac使用K6工具压测WebSocket

commend空格 打开终端&#xff0c;安装k6 brew install k6验证是否安装成功 k6 version设置日志级别为debug export K6_LOG_LEVELdebug执行脚本&#xff08;进入脚本所在文件夹下&#xff09; k6 run --vus 100 --duration 10m --out csvresult.csv script.js 脚本解释&…

自定义神经网络三之梯度和损失函数激活函数

文章目录 前言梯度概述梯度下降算法梯度下降的过程 optimize优化器 梯度问题梯度消失梯度爆炸 损失函数常用的损失函数损失函数使用原则 激活函数激活函数和损失函数的区别激活函数Relu-隐藏层激活函数Sigmoid和Tanh-隐藏层Sigmoid函数Tanh&#xff08;双曲正切&#xff09; &l…

【前端】nginx 反向代理,实现跨域问题

前面讲跨域的问题&#xff0c;这篇 C# webapi 文章里面已经说过了。在上述文章中是属于从服务器端去允许访问的策略去解决跨域问题。而这里是从客户端的角度利用反向代理的方法去解决跨域问题。 反向代理&#xff1a;其原理就是将请求都接收到一个中间件&#xff08;中间地址&a…

IO 作业 24/2/26

1>思维导图 1> 使用消息队列完成两个进程间相互通信 #include<myhead.h> //定义一个消息类型 struct msgbuf {long mtype; //消息类型char mtext[1024]; //消息正文 }; //定义一个宏&#xff0c;表示消息正文大小 #define MSGSIZE sizeof(struct msgbuf…

人工智能 — 点云模型

目录 一、点云模型1、三维图像2、点云1、概念2、内容 3、点云处理的三个层次1、低层次处理方法2、中层次处理方法3、高层次处理方法 二、Spin image 一、点云模型 1、三维图像 三维图像是一种特殊的信息表达形式&#xff0c;其特征是表达的空间中三个维度的数据。 和二维图像…

荣耀手机如何开启地震预警功能

1、打开荣耀手机&#xff0c;进入“设置”&#xff0c;在搜素栏输入“地震”。 2、进入“安全-应急预警通知”功能栏。 3、开启“地震预警”。 4、查看“预警演示教程”。 ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/e207e356bb634c11adf926c6a53e48cc.png…