13.1.资源清单的管理工具-helm

news2024/11/24 5:10:07

目录

一、helm的介绍

1.helm的价值概述

2.helm的关键名词

二、安装部署helm

1.解压安装包并设置全局命令

2.添加命令补全

三、使用helm部署服务管理

1.使用helm创建chart

1.1创建工作目录

 1.2.helm创建chart

2.响应式创建名称空间

3.安装chart到名称空间

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

5.修改服务的版本

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

5.2再次安装chart到名称空间

6.卸载chart

四、认识helm的文件组成

1,流程梳理

2,查看目录解释说明

五、自定义chart服务的部署

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

1.业务升级

1.1.查看现有chart

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

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

2.业务回滚

2.1.查看历史版本

2.2.回滚到指定版本

七、补充:chart.yaml文件

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

1,主流的chart仓库

2,添加仓库的方式

2.1.查看现有仓库的信息

2.2.添加共有仓库

2.3.更新仓库信息

2.4.再次查看仓库信息

3,搜索想要的chart

4,拉取仓库的chart

5,解压第三方的chart压缩包和使用

九、私有的helm仓库(了解)


一、helm的介绍

1.helm的价值概述

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

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

2.helm的关键名词

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

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

二、安装部署helm

下载地址:Helm | Installing Helm

百度网盘链接:https://pan.baidu.com/s/1RmT3YLhxPngDFgECQ1Kyqw 
提取码:6a64 

1.解压安装包并设置全局命令

# 解压
[root@k8s1 data]# tar -xvf helm-v3.12.3-linux-amd64.tar.gz

# 设置全局命令
mv linux-amd64/helm /usr/local/bin/

2.添加命令补全

[root@k8s1 data]# helm completion bash > /etc/bash_completion.d/helm

三、使用helm部署服务管理

1.使用helm创建chart

1.1创建工作目录

[root@k8s1 data]# mkdir -p /data/helm/oslee/chart
[root@k8s1 chart]# cd /data/helm/oslee/chart

 1.2.helm创建chart

# 创建
[root@k8s1 chart]# helm create oslee01
Creating oslee01

# 查看
[root@k8s1 chart]# ll oslee01/
总用量 8
drwxr-xr-x 2 root root    6 5月   6 08:34 charts
-rw-r--r-- 1 root root 1143 5月   6 08:34 Chart.yaml
drwxr-xr-x 3 root root  162 5月   6 08:34 templates
-rw-r--r-- 1 root root 1874 5月   6 08:34 values.yaml

2.响应式创建名称空间

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

3.安装chart到名称空间

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

[root@k8s1 chart]# helm install oslee oslee01 -n helm-oslee01
NAME: oslee
LAST DEPLOYED: Mon May  6 08:38:23 2024
NAMESPACE: helm-oslee01
STATUS: deployed
REVISION: 1
NOTES:
1. Get the application URL by running these commands:
  export POD_NAME=$(kubectl get pods --namespace helm-oslee01 -l "app.kubernetes.io/name=oslee01,app.kubernetes.io/instance=oslee" -o jsonpath="{.items[0].metadata.name}")
  export CONTAINER_PORT=$(kubectl get pod --namespace helm-oslee01 $POD_NAME -o jsonpath="{.spec.containers[0].ports[0].containerPort}")
  echo "Visit http://127.0.0.1:8080 to use your application"
  kubectl --namespace helm-oslee01 port-forward $POD_NAME 8080:$CONTAINER_PORT

# 查看pod
[root@k8s1 chart]# kubectl get pods -o wide -n helm-oslee01
NAME                             READY   STATUS    RESTARTS   AGE   IP           NODE   NOMINATED NODE   READINESS GATES
oslee-oslee01-6cc5f96486-j5dvw   1/1     Running   0

# 访问pod
[root@k8s1 chart]# curl -I 10.100.1.7
HTTP/1.1 200 OK

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

[root@k8s1 chart]# helm list -n helm-oslee01
NAME    NAMESPACE       REVISION        UPDATED                                 STATUS          CHART           APP VERSION
oslee   helm-oslee01    1               2024-05-06 08:38:23.83927724 -0400 EDT  deployed        oslee01-0.1.0   1.16.0

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

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

5.修改服务的版本

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

[root@k8s1 chart]# vi oslee01/values.yaml

5.2再次安装chart到名称空间

这次名称叫oslee02

[root@k8s1 chart]# helm install oslee02 oslee01 -n helm-oslee01

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

6.卸载chart

[root@k8s1 chart]# helm list -n helm-oslee01
NAME    NAMESPACE       REVISION        UPDATED                                 STATUS          CHART           APP VERSION
oslee   helm-oslee01    1               2024-05-06 08:38:23.83927724 -0400 EDT  deployed        oslee01-0.1.0   1.16.0     
oslee02 helm-oslee01    1               2024-05-06 08:49:17.194473592 -0400 EDT deployed        oslee01-0.1.0   1.16.0 
[root@k8s1 chart]#  helm uninstall oslee02 -n helm-oslee01
release "oslee02" uninstalled

再次查看

[root@k8s1 chart]# helm list -n helm-oslee01
NAME    NAMESPACE       REVISION        UPDATED                                 STATUS          CHART           APP VERSION
oslee   helm-oslee01    1               2024-05-06 08:38:23.83927724 -0400 EDT  deployed        oslee01-0.1.0   1.16.0   

四、认识helm的文件组成

1,流程梳理

2,查看目录解释说明

  • Chart.yaml:这是每个 Helm Chart 的元数据文件,包含 Chart 的名称、版本、描述、主页、依赖关系等信息。它是描述 Chart 的基本信息和版本控制的核心文件。

  • values.yaml:此文件包含了 Chart 的默认配置值。用户可以通过 Helm 命令行参数或提供自定义的 values.yaml 文件来覆盖这些默认值,以实现定制化部署。

  • templates/:这个目录包含了一系列的 YAML 文件模板,它们会被 Helm 用来生成最终部署到 Kubernetes 的资源配置文件。这些模板可以引用 values.yaml 中的值,支持条件语句、循环等高级特性,使得配置更加灵活。

    • 例如:deployment.yamlservice.yamlconfigmap.yaml 等,分别定义了 Deployment、Service、ConfigMap 等 Kubernetes 资源。
    • NOTES.txt:安装chart成功后的提示信息;

五、自定义chart服务的部署

easy-paas-admin/
├── Chart.yaml
├── templates
│   ├── configmap.yaml
│   ├── deployment.yaml
│   └── service.yaml
└── values.yaml

# Chart.yaml

apiVersion: v2
name: easy-paas-admin
description: A Helm chart for Kubernetes
type: application
version: 1.0.1
# values.yaml

easyPaasAdmin:
  namespace: "easy-paas"
  replicaCount: 2
  image:
    repository: "registry.cn-hangzhou.aliyuncs.com/oslee-dockerhub/easy-paas-admin"
    tag: "latest"
  matchLabels:
    value: "easy-paas-admin"
  ports:
    containerPort: 8001
    servicePort: 8001
    nodePort: 30081
  volumeMounts:
    mountPath: "/data/admin/config/"
  configData:
    config.yaml: |
      server:
        "name": "easy-paas-admin"
        "port": ":8001"
        "version": "1.0.1"
      mysql:
        "driver": "mysql"
        "host": "192.168.11.10"
        "port": "3306"
        "database": "easy_gateway"
        "username": "root"
        "password": "root"
        "charset": "utf8mb4"
      redis:
        "username": "default"
        "address": "192.168.11.10:6379"
        "password": "123456"
      cluster:
        "cluster_ip": "127.0.0.1"
        "cluster_port": "8080"
        "cluster_ssl_port": "4433"
# configmap.yaml

apiVersion: v1
kind: ConfigMap
metadata:
  name: {{ .Chart.Name }}
  namespace: {{ .Values.easyPaasAdmin.namespace }}
data:
{{- toYaml .Values.easyPaasAdmin.configData | nindent 2 }}
# deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: {{ .Chart.Name }}
  namespace: {{ .Values.easyPaasAdmin.namespace }}
spec:
  replicas: {{ .Values.easyPaasAdmin.replicaCount }}
  selector:
    matchLabels:
      app: {{ .Values.easyPaasAdmin.matchLabels.value }}
  template:
    metadata:
      labels:
        app: {{ .Values.easyPaasAdmin.matchLabels.value }}
      namespace: {{ .Values.easyPaasAdmin.namespace }}
    spec:
      containers:
        - name: {{ .Chart.Name }}
          image: {{ .Values.easyPaasAdmin.image.repository }}:{{ .Values.easyPaasAdmin.image.tag }}
          ports:
            - containerPort: {{ .Values.easyPaasAdmin.ports.containerPort }}
          volumeMounts:
            - name: config-volume
              mountPath: {{ .Values.easyPaasAdmin.volumeMounts.mountPath }}
              readOnly: true
            - name: host-timezone
              mountPath: /etc/localtime
              readOnly: true
      volumes:
        - name: config-volume
          configMap:
            name: {{ .Chart.Name }}
        - name: host-timezone
          hostPath:
            path: /etc/localtime
# service.yaml

apiVersion: v1
kind: Service
metadata:
  name: {{ .Chart.Name }}
  namespace: {{ .Values.easyPaasAdmin.namespace }}
spec:
  type: NodePort # 或 NodePort, ClusterIP 根据需求
  selector:
    app: {{ .Values.easyPaasAdmin.matchLabels.value }}
  ports:
    - protocol: TCP
      port: {{ .Values.easyPaasAdmin.ports.servicePort }}
      targetPort: {{ .Values.easyPaasAdmin.ports.containerPort }}
      nodePort: {{ .Values.easyPaasAdmin.ports.nodePort }}
# 执行指令

kubectl create ns easy-paas
helm install easy-paas-admin ./easy-paas-admin -n easy-paas


# 其他指令
# helm list -n easy-paas
# helm uninstall easy-paas-admin -n easy-paas
# helm upgrade easy-paas-admin ./easy-paas-admin -n easy-paas
# helm history easy-paas-admin
# helm rollback easy-paas-admin 1 -n easy-paas

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

1.业务升级

1.1.查看现有chart

helm list -n easy-paas

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

easyPaasAdmin:
  namespace: "easy-paas"
  # 副本数改为3
  replicaCount: 3
  image:
    repository: "registry.cn-hangzhou.aliyuncs.com/oslee-dockerhub/easy-paas-admin"
    tag: "latest"
  matchLabels:
    value: "easy-paas-admin"
  ports:
    containerPort: 8001
    servicePort: 8001
    nodePort: 30081
  volumeMounts:
    mountPath: "/data/admin/config/"
  configData:
    config.yaml: |
      server:
        "name": "easy-paas-admin"
        "port": ":8001"
        # 软件版本改为1.0.2
        "version": "1.0.2"
      mysql:
        "driver": "mysql"
        "host": "192.168.11.10"
        "port": "3306"
        "database": "easy_gateway"
        "username": "root"
        "password": "root"
        "charset": "utf8mb4"
      redis:
        "username": "default"
        "address": "192.168.11.10:6379"
        "password": "123456"
      cluster:
        "cluster_ip": "127.0.0.1"
        "cluster_port": "8080"
        "cluster_ssl_port": "4433"

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

helm upgrade easy-paas-admin ./easy-paas-admin -n easy-paas

2.业务回滚

2.1.查看历史版本

helm history easy-paas-admin -n easy-paas

2.2.回滚到指定版本

helm rollback easy-paas-admin 1 -n easy-paas

七、补充:chart.yaml文件

可以通过配置chart.yaml这个文件,来控制显示helm list的元数据信息

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

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

同理,helm也有这个机制;

1,主流的chart仓库

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

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

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

2,添加仓库的方式

2.1.查看现有仓库的信息

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

[root@k8s1 helm]# helm repo list
Error: no repositories to show

2.2.添加共有仓库

# 添加微软云的helm仓库
[root@k8s1 helm]# helm repo add azure http://mirror.azure.cn/kubernetes/charts/ 
"azure" has been added to your repositories

# 添加阿里云的helm仓库
[root@k8s1 helm]# helm repo add aliyun https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
"aliyun" has been added to your repositories

2.3.更新仓库信息

[root@k8s1 helm]# 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!⎈

2.4.再次查看仓库信息

[root@k8s1 helm]# helm repo list
NAME    URL                                                   
azure   http://mirror.azure.cn/kubernetes/charts/             
aliyun  https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts

3,搜索想要的chart

helm search repo elasticsearch

4,拉取仓库的chart

helm pull aliyun/elasticsearch-exporter

5,解压第三方的chart压缩包和使用

# 解压
tar xf elasticsearch-exporter-0.1.2.tgz

# 使用
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

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

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

相关文章

Unity3D插件开发教程(四):获取地址组件

Unity3D插件开发教程(四):获取地址组件 前言 前几天做导出安装包插件时,遇到了个问题,我需要获取地址,可是每次都要手动填入(复制粘贴)地址是个很费时不讨好的事,所以我…

在 Ubuntu 18.04.4 LTS上安装 netmap

文章目录 步骤运行配置文件编译安装使用netmap 步骤 sudo su sudo apt-get update sudo apt install build-essential sudo apt-get install -y git sudo apt-get install -y linux-headers-$(uname -r)rootVM-20-6-ubuntu:/home/ubuntu/netmap/LINUX# git clone https://gith…

3dmax怎么渲染又快又清晰?

在3ds Max中,追求快速且清晰的渲染效果是每个设计师的目标。云渲染技术的出现,为这一目标提供了强大的支持。通过云渲染,设计师能够利用远程服务器的强大计算能力,实现快速渲染,同时保持图像的高清晰度。 一、3dmax怎么…

RAM + 串口的简单应用

REVIEW 之前已经学习过: RAM: RAM IP核配置_ip核 ram配置-CSDN博客 串口接收:Vivado 串口接收优化-CSDN博客 串口发送:Vivado 串口通信(UART)------串口发送_vivado串口收发实验-CSDN博客 按键:基于状态机的按键消抖实…

MTU 和 MSS 关系、 IP分片、TCP分段

从四层模型:链路层,网络层,传输层,应用层说 一 、以太网V2格式数据帧 : 链路层 Destination Source Type DataAndPad FCS 6 6 2 46~1500 4 二、IP: 网络层 0 1 …

MySQL8,Navicat能登陆成功,密码却忘记了

执行成功的图: 以下为步骤:本文一共8个简单步骤。 环境:mysql8、window10、navicat11 1、打开本地电脑window10的命令窗(俗称黑窗口),windowR 2、输入regegit,回车,打开注册表 3、…

哪里可以姓名设计免费签名?6个软件帮助你轻松设计签名

哪里可以姓名设计免费签名?6个软件帮助你轻松设计签名 这里有六个免费的软件和在线工具可以帮助您设计个性化的签名: 1.一键logo设计:这是一个功能强大且易于使用的设计工具,提供了丰富的签名设计模板和各种字体效果供选择。您可…

Kubernetes入门-Kubernetes集群构成

目录 前言 控制面板节点与工作节点 控制面板节点 工作节点 被托管的Kubernetes 用kubectl命令行工具管理Kubernetes 前言 前面说过,Kubernetes是云的操作系统顾名思义,它位于应用和基础设施之间Kubernetes运行在基础设施上,而应用运行…

手机录屏声音怎么录?2个小妙招教会你

手机录制好的视频怎么没有声音?你是否也遇到了这个难题?在日常生活中,手机录屏功能已经成为我们生活和工作中的得力助手。而录屏的声音,作为录屏功能的重要组成部分,更是为我们的录制体验增添了不少色彩。那么&#xf…

一文带你搞定Linux开发环境配置

Linux开发必备 万事先更新 sudo apt update && sudo apt upgrade安装gcc工具链 sudo apt install build-essential像mysql、nacos等等建议装docker里,数据挂载到宿主机,日志别挂,直接装本机哪天日志塞满了就要开始重装系统了 以下…

B端系统的UI框架选择,不要输在了起跑线,如何破?

所谓成也框架、败也框架,框架就是这么的优点和缺点鲜明,市面上的框架多如牛毛,谁家的最优秀呢?为何框架搞出来的UI界面同质化呢,如何避免这种情况,如何在框架的基础上进一步提升颜值和体验呢,本…

Go语言day1

下载go语言的安装程序: All releases - The Go Programming Language 配置go语言的环境变量: 写第一个go语言 在E:\go_workspace当前窗口使用cmd命令: 输入 go run test.go

茂名石油行业:可燃气体报警器校准检测守护安全新防线

茂名,作为广东省的重要石化基地,其石油行业的发展一直备受关注。 随着石油产业的蓬勃发展,气体泄露的风险也日渐突出,给企业的生产安全和员工的生命安全带来了不小的挑战。 在这一背景下,可燃气体报警器的重要性日益…

6月19日作业

思维导图 实现服务器连接多个客户端局域网 #include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget),sever(new QTcpServer(this)) {ui->setupUi(this); }Widget::~Widget() {delete ui; }v…

Java 开发面试题精选:RocketMQ 一篇全搞定

前言 RocketMQ作为一个高性能、高可用的分布式消息和流处理平台,广泛应用于分布式系统中的解耦、异步通信和数据流处理场景。这篇文章我精选了一些关于RockerMQ面试题目,这些问题涵盖了RocketMQ的所有关键知识点,从基本概念到高级应用&#…

使用Flink接受kafka中的数据并对数据进行ETL

做这个开发是因为:在实际开发操作中,你的kafka主题中会有大量的数据但是需求并不需要所有数据,所有我们要对数据进行清洗,把需要的数据保存在flink流中,为下流的开发做好数据保障! 首先创建工具类 再写一…

类注释规范

类注释规范 1.1.1 模板配置 模板路径:File–>settings–>Editor–>File and Code Templates–>Includes–>File Header  N A M E :设置类名,与下面的 {NAME}:设置类名,与下面的 NAME:设…

Java语法糖写法

一、函数式接口 1、Function函数式接口:有一个输入参数,有一个输出 2、断定型接口:有一个输入参数,返回值只能是布尔值! 3、Consumer 消费型接口:只有输入,没有返回值 4、Supplier供给型接口&a…

电影美学复古胶片特效视频转场模板 | Premiere Pro 项目工程文件

这个Premiere Pro项目工程文件是一个电影美学胶片特效视频转场模板,每个过渡效果都散发出一种有机的怀旧魅力,让人回忆起经典电影卷轴和模拟摄影的独特美感。 项目特点: 胶片烧伤过渡效果:包括从微妙的闪烁到大胆的爆发&#xff…

Redis 主从同步

主从同步 很多企业没有使用Redis的集群,但是至少都做了主从。有了主从,当master挂掉的时候,运维让从库过来接管,服务就可以继续,否则master需要经过数据恢复和重启的过程,可能会拖很长时间,影响…