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,一经查实,立即删除!

相关文章

说说UE5中的几种字符串类

在Unreal Engine 5 (UE5) 的C中,与字符串相关的类主要包括: FString: Unreal Engine中用于处理字符串的主要类,提供了丰富的字符串操作方法和功能。 FText: 用于表示本地化文本的类,可以包含多种语言的文本…

分布式知识整理

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

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

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

【uni-app】路由

(1)路由配置 uni-app 页面路由全部交给框架统一管理,开发者需要在pages.json里配置每个路由页面的路径及页面样式(类似小程序在 app.json 中配置页面路由)。 "pages": [{"path": "pages/ind…

蓝桥杯倒计时47天!DFS基础——图的遍历

倒计时47天! 深度优先搜索——DFS 温馨提示:学习dfs之前最好先了解一下递归的思想。 DFS基础——图的遍历 仙境诅咒 问题描述 在一片神秘的仙境中,有N位修仙者,他们各自在仙境中独立修炼,拥有自己独特的修炼之道…

websocket在django中的运用

14-2 聊天室实现思路:轮训、长轮训、websocket_哔哩哔哩_bilibili 参考大佬的B站学习笔记 https://www.cnblogs.com/wupeiqi/p/6558766.html 参考博客 https://www.cnblogs.com/wupeiqi/articles/9593858.html 参考博客 http: 是短连接,无状态的&…

探索网络通信的遗产:AppleTalk Data Stream Protocol (ADSP) 的全面解析

ADSP简介 AppleTalk Data Stream Protocol (ADSP) 是AppleTalk网络协议套件的一部分,设计用于在AppleTalk网络中提供端到端的可靠数据流服务。在1980年代和1990年代,AppleTalk是Apple计算机用于局域网通信的主要网络技术。ADSP提供了一种类似于现代TCP协…

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

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

创建第一个React项目

React脚手架 npx create-react-app react-demonpx是直接从互联网网上拉最新的脚手架进行创建react 运行React项目 npm start若想找到Webpack配置文件 npm ejectReact的基本使用 基本步骤 导入react和react-dom vue 创建react元素 渲染react元素到页面中导入 import React…

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() # 用于估计…

Android 10 音量UI更新解析

1 VolumeUI 的启动 由于VolumeUI 是继承 SystemUI 的,所以它的启动方式和 SystemUI 的启动方式一样。 直接看 VolumeUI 的start()方法 frameworks/base/packages/SystemUI/src/com/android/systemui/volume/VolumeUI.java Override public void start() {boolean …

Linux基础命令—进程管理

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

YY调音台:直播主播的体验

我是直播平台的主播,日常工作就是在直播间里打游戏、唱歌、聊天之类的。刚开始的时候我的直播工具只有一台电脑,收音也是用的我自己常用的耳机,设备比较简陋,直播间的用户留存率也不高。但是我相信天道酬勤,每天晚上坚…

javaScript数组去重的几种实现方式——适用非引用数据去重

最传统的使用循环遍历 //最传统的使用循环遍历 function getUnique(arr) {let newArr [];for (let i 0; i < arr.length; i) {for (let j i 1; j < arr.length; j) {if (arr[i] arr[j]) {i; //相同丢掉前面的元素}}newArr.push(arr[i]);}return newArr; } 利用Set实…

Seata分布式事务实战XATCC模式

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

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

接上篇《48、当当网Scrapy项目实战&#xff08;一&#xff09;》 上一篇我们正式开启了一个Scrapy爬虫项目的实战&#xff0c;对当当网进行剖析和抓取。本篇我们继续编写该当当网的项目&#xff0c;讲解刚刚编写的Spider与item之间的关系&#xff0c;以及如何使用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&#xff1a;1.该类是控制器&#xff1b;2.方法返回值会被写进响应报文的报文体&#xff0c;而…

ChatRTX安装教程

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

关于硅的制造芯片的过程

芯片是如何制作的&#xff1f; 先将硅融化制成硅晶片&#xff0c;再用光刻机印压电路。 bilibili芯片制作视频 硅晶片作为现代芯片的主要元件&#xff0c;广泛用于集成电路。 首先将多晶硅放入特制的密封炉&#xff0c;排除其中空气后加热到1420摄氏度&#xff0c;将融化的硅放…