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://xiahunao.cn/news/2809507.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

压力测试工具Jmeter的下载与使用

1、进入官网下载Jmeter https://jmeter.apache.org/ 国内镜像(下载的慢的话可以用国内镜像下载) https://mirrors.cloud.tencent.com/apache/jmeter/binaries/ 2、跳转到下载页面 3、根据不同系统下载相应版本的Jmeter压缩包,Linux系统下载…

Git+py+ipynb Usage

0.default config ssh-keygen -t rsa #之后一路回车,当前目录.ssh/下产生公私钥 cat ~/.ssh/id_rsa.pub #复制公钥到账号 git config --global user.email account_email git config --global user.name account_namebug of ipynb TqdmWarning: IProgress not found. Please …

Linux软件高级编程-进程基本概念--day6

1.进程: 程序: 存放在外存的一段数据组成的文件 进程: 是一个程序动态执行的过程,包括进程的创建、进程的调度、进程的消亡 2.进程相关命令: 1)top: 动态查看当前系统中所有进程信息&#xff08…

数据结构与算法:红黑树讲解

关于红黑树, 这篇讲的更详细易懂。 https://www.cnblogs.com/jakelin/p/14324966.html 一颗平衡的二叉搜索树的任意节点平均查找效率为树的高度h,即O(lgn)。 但是如果二叉搜索树的失去平衡(元素全在一侧),搜索效率就…

【变压器故障诊断分类及预测】基于GRNN神经网络

课题名称:基于GRNN神经网络的变压器故障诊断分类及预测 版本日期:2024-02-10 运行方式:直接运行GRNN0507.m文件 代码获取方式:私信博主或QQ:491052175 模型描述: 对变压器油中溶解气体进行分析是变压器…

JavaScript 进阶02

深入对象 构造函数 构造函数是用于创建对象的函数。 <script> //构造函数 构造函数的首字母大写 function Obj(name,age,aaa){this.namenamethis.ageage } //调用函数 const obj1new Obj("小明",4) console.log(obj1) </script> 使用 new 关键字调用…

[AutoSar]BSW_Com03 DBC详解 (一)

目录 关键词平台说明一、DBC 定义1.1 相关工具 二、主要组成部分介绍2.1 Networks2.2 ECUs2.3 Network nodes2.4 messages2.5 signal2.6 Value Tables 三、主要组成部分关系图 关键词 嵌入式、C语言、autosar、OS、BSW 平台说明 项目ValueOSautosar OSautosar厂商vector &am…

docker-compose 搭建laravel环境

laravel环境包含nginx,mysql,php7.4,redis 一、安装好docker后pull镜像 1.nginx镜像 docker pull nginx:latest单独启动容器 docker run --name nginx -p 80:80 -d nginx 2.php镜像 docker pull php:7.4-fpm3.mysql镜像 docker pull mysql:5.74.redis镜像 docker pull r…

ChatGPT调教指南 | 咒语指南 | Prompts提示词教程(三)

在人工智能成为我们日常互动中无处不在的一部分的时代&#xff0c;与大型语言模型(llm)有效沟通的能力是无价的。“良好提示的26条原则”为优化与这些复杂系统的交互提供了全面的指导。本指南证明了人类和人工智能之间的微妙关系&#xff0c;强调清晰、专一和结构化的沟通方法。…

【数据结构初阶 8】二叉树练习题

文章目录 &#x1f308; 01. 求二叉树结点个数&#x1f308; 02. 求二叉树叶结点个数&#x1f308; 03. 求二叉树的高度&#x1f308; 04. 求第 k 层结点个数&#x1f308; 05. 查找值为 x 的结点&#x1f308; 06. 判断是否是单值二叉树&#x1f308; 07. 判断两棵树是否相同&…

单片机05__串口USART通信__按键控制向上位机传输字符串

串口USART通信 通用UART介绍 1.通信的概念 计算机与外界进行信息交换的过程称之为通信。 在通信的过程中&#xff0c;通信双方都需要遵守的规则称之为通信协议。 硬件协议&#xff1a;将数据以什么样的方式传输过去 软件协议&#xff1a;将数据以什么样的顺序传输过去 2.常用…

今日早报 每日精选15条新闻简报 每天一分钟 知晓天下事 2月26日,星期一

每天一分钟&#xff0c;知晓天下事&#xff01; 2024年2月26日 星期一 农历正月十七 1、 气象台&#xff1a;3月初之前南方大部将维持阴雨雪天气。 2、 据海关统计&#xff0c;京津冀协同发展十年成效显著&#xff0c;外贸总量跨两个万亿台阶。 3、 2024年研考初试成绩今天起…

逆向茶话会笔记

安卓逆向 用用burp设置代理或者用charles抓包 windows httpopen 类比web站点渗透测试 推荐书 飞虫 安卓大佬不怎么打ctf 喜欢在看雪和吾爱破解 提问环节 q websocket grpc抓包有什么推荐的工具&#xff1f; a 不太了解 游戏安全和llvm 既要逆游戏也要逆外挂 逆游戏入…

自己测试CSDN质量分3

你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好 质量分测试网址

【Leetcode】938. 二叉搜索树的范围和

文章目录 题目思路代码结论 题目 题目链接 给定二叉搜索树的根结点 root&#xff0c;返回值位于范围 [low, high] 之间的所有结点的值的和。 示例 1&#xff1a; 输入&#xff1a;root [10,5,15,3,7,null,18], low 7, high 15 输出&#xff1a;32 示例 2&#xff1a; 输入…

【VSCode】解决VSCode远程连接问题:远程主机可能不符合 glibc 和 libstdc++

今天用VSCode进行ssh连接时&#xff0c;提示“远程主机可能不符合 glibc 和 libstdc VSCode 服务器的先决条件”。查了一下发现这个问题主要是由于VSCode在一月份发布的最新版本v1.86中要求远程主机 glibc>2.28导致的&#xff0c;所以ssh连接Ubuntu 18.04的时候就会提示这个…

apachectl: line 79: 20233 Segmentation fault (core dumped) $HTTPD “$@“

[TOC](apachectl: line 79: 20233 Segmentation fault (core dumped) $HTTPD “$”) 1、问题描述 apache 启动报错 apachectl: line 79: 20233 Segmentation fault (core dumped) $HTTPD “$” 2、问题分析 参考链接: https://stackoverflow.com/questions/43726930/apache…

【JVM】线上一次fullGC排查思路

fullGC问题背景 监控告警发现&#xff0c;今天开始我们线上应用频繁出现fullGC&#xff0c;并且每次出现后磁盘都会被占满 查看监控 查看监控发现FULLGC的机器均为同一个机房的集器&#xff0c;并且该机房有线上error报错&#xff0c;数据库监控对应的时间点也有异常&#x…

sonar-java 手写一个规则-单元测试分析

前言 最近做项目&#xff0c;定制sonar规则&#xff0c;提高Java代码质量&#xff0c;在编写的sonar规则&#xff0c;做验证时&#xff0c;使用单元测试有一些简单的心得感悟&#xff0c;分享出来。 自定义规则模式 sonar的自定义规则很简单&#xff0c;一般而言有2种模式可…

JAVA工程师面试专题-《Mysql》篇

目录 一、基础 1、mysql可以使用多少列创建索引&#xff1f; 2、mysql常用的存储引擎有哪些 3、MySQL 存储引擎&#xff0c;两者区别 4、mysql默认的隔离级别 5、数据库三范式 6、drop、delete 与 truncate 区别&#xff1f; 7、IN与EXISTS的区别 二、索引 1、索引及索…