19.Helm

news2024/12/29 9:16:07

文章目录

  • Helm
    • 简介
    • 三个概念
    • 版本
    • 部署Helm
    • Helm命令
    • Helm 自定义模板
      • 基于原有的软件包进行修改
      • 自建软件包
      • 软件包升级
      • 软件包升级和创建ingress
      • 回滚版本
    • 仓库关联
      • 部署harbor
      • 安装 push 插件
    • 总结

Helm

简介

  • Helm本质就是让K8s的应用管理(Deployment、Service等)可配置,可以通过类似于传递环境变量的方式能动态生成。通过动态生成K8s资源清单文件(deployment.yaml、service.yaml)。 然后调用 Kubectl 自动执行 K8s 资源部署。

  • Helm具备如下的能力:

    • 简化部署 : Helm允许使用单个命令轻松部署和管理应用程序,从而简化了整个部署过程
    • 高度可配置: Helm Charts提供了高度可配置的选项,可以轻松自定义和修改应用程序的部署配置
    • 版本控制 : Helm允许管理应用程序的多个版本,从而轻松实现版本控制和回滚
    • 模板化:Helm Charts使用YAM模板来定义Kubernetes对象的配置,从而简化了配置过程,并提高了可重复性和可扩展性
    • 应用程序库:Helm具有应用程序库的概念,可以轻松地其享和重用Helm Charts,从而简化了多个应用程序的部署和管理
    • 插件系统: Helm拥有一个强大的插件系统,允许您扩展和定制Helm的功能,以满足特定的需求和要求。
  • Helm 本质就是一个k8s的包管理器

三个概念

  • Helm 是官方提供的类似于 YUM 的包管理器,是部署环境的流程封装。Helm 有三个重要的概念:Chart 、Repository 和 Release

    • Chart:Helm 的软件包,采用 TAR 格式。是创建一个应用的信息集合,包括各种 Kubernetes 对象的配置模板、参数定义、依赖关系、文档说明等。chart 是应用部署的自包含逻辑单元。 可以将 chart 想象成 apt、yum 中的软件安装包。
    • Release:是 chart 的运行实例,代表了一个正在运行的应用。当 chart 被安装到 Kubernetes 集群,就生成一个 release。chart 能够多次安装到同一个集群,每次安装都是一个 release。
    • Repository(仓库):Charts 仓库,用于集中存储和分发 Charts。Repository 本质上是一个 Web 服务器,该服务器保存了一系列的 Chart 软件包以供用户下载,并且提供了一个该 Repository 的 Chart 包的清单文件以供查询。Helm 可以同时管理多个不同的 Repository。
  • 总结:Helm 安装 charts 到 Kubernetes 集群中,每次安装都会创建一个新的 release。你可以在 Helm 的 chart repositories 中寻找新的 chart。

版本

  • Helm3 与 Helm2 的区别:
  • Helm2 是 C/S 架构,主要分为客户端 helm 和服务端 Tiller。在 Helm 2 中,Tiller 是作为一个 Deployment 部署在 kube-system 命名空间中,很多情况下,我们会为 Tiller 准备一个 ServiceAccount ,这个 ServiceAccount 通常拥有集群的所有权限。
    用户可以使用本地 Helm 命令,自由地连接到 Tiller 中并通过 Tiller 创建、修改、删除任意命名空间下的任意资源。
  • 在 Helm 3 中,Tiller 被移除了。新的 Helm 客户端会像 kubectl 命令一样,读取本地的 kubeconfig 文件,使用我们在 kubeconfig 中预先定义好的权限来进行一系列操作。
  • Helm 的官方网站 https://helm.sh/

在这里插入图片描述

部署Helm

  • 下载二进制 Helm client 安装包
  • https://github.com/helm/helm/tags
tar -zxvf helm-v3.6.0-linux-amd64.tar.gz

mv linux-amd64/helm /usr/local/bin/helm

helm version

在这里插入图片描述

Helm命令

##命令补全
source <(helm completion bash)
##添加常用的 chart 仓库,
helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo add stable http://mirror.azure.cn/kubernetes/charts
helm repo add aliyun https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
helm repo add incubator https://charts.helm.sh/incubator
##查看  chart 仓库列表
helm repo list

在这里插入图片描述

##更新  chart 仓库
helm repo update

在这里插入图片描述

##搜索仓库中的软件包
helm search repo stable

在这里插入图片描述

删除 stable 仓库
helm repo remove stable

在这里插入图片描述

查看 chart 信息
helm show chart stable/mysql     #查看指定 chart 的基本信息


helm show all stable/mysql		 #获取指定 chart 的所有信息

在这里插入图片描述

##安装 chart
helm install my-redis bitnami/redis -n default --version=

#指定 release 的名字为 my-redis,
-n 指定部署到 k8s 的 namespace

helm install bitnami/redis --generate-name    
#不指定 release 的名字时,需使用 
–generate-name 随机生成一个名字

在这里插入图片描述

在这里插入图片描述

##查看所有 release
helm ls 
helm list -n default

在这里插入图片描述

##查看指定的 release 状态
helm status my-redis   

在这里插入图片描述

##删除指定的 release
helm uninstall my-redis 

在这里插入图片描述

Helm 自定义模板

##拉取 chart

mkdir /opt/helm
cd /opt/helm

helm pull bitnami/nginx

在这里插入图片描述

在这里插入图片描述

  • chart.yaml:软件包自描述文件。这个文件必须有 name 和 version (chart版本)的定义。用于述这 chart的基本信息,包括名字、描述信息以及版术等
  • templates :目录里面存放所有yaml模板文件。deployment.yaml、service.yaml、ingress.yaml等
    • deployment.yaml :创建 deployment 的资源清单文件
    • service.yaml :为 deployment 创建 service 的资源清单文件
    • ingress.yaml :创建 ingress 对象的资源清单文件
  • values.yaml:用于存储templates目录中模板文件中用到的变量的值
  • NOTES.txt :用于介绍chart帮助信息,helm install 部署后展示给用户
  • _helpers.tpl :放置模板的地方,可以在整个chart中重复使用
##在  demplates的目录中

例如     vim deployment.yaml    文件

"{{ .Values.busybox.image}}:{{ .Values.busybox.tag }}"
表示:

在 /opt/helm/mysql  中
values.yaml  配置文件中的

busybox:
  image: "busybox"
  tag: "1.32"

字段的对应的值

.Values   字段是  values.yaml文件中的
template  字段是  templates/_helpers.tpl  文件中的
.Chart    表示     Chart.yaml  文件中的字段值
include   表示     _helpers.tpl 文件中的对应

基于原有的软件包进行修改

##拉取软件包
helm pull bitnami/apache
tar xf apache-10.0.5.tgz

在这里插入图片描述

自建软件包

##自建软件
helm create test01

#在目录中会包含一些需要的文件
##定义基本的信息

vim Chart.yaml


apiVersion: v2
name: test01
description: this is a test

type: application

version: 0.0.1

appVersion: "v1"
##定义 deployment 资源配置模板的变量的值

vim values.yaml

#定义镜像相关
image:
  repository: soscscs/myapp
  pullPolicy: Always
  tag: "v1"

#定义副本数
replicaCount: 2

#定义 resources
  limits:
    cpu: 500m
    memory: 512Mi
  requests:
    cpu: 100m
    memory: 128Mi

在这里插入图片描述

在这里插入图片描述

#定义  service 资源的配置

#定义类型
vim values.yaml

service:
  type: ClusterIP
  port: 8080

在这里插入图片描述

##查看配置是否错误
helm lint test01/

在这里插入图片描述

##打包软件包
helm package test01/

##用软件包创建
helm install test-demo1 -n test test01-0.0.1.tgz

在这里插入图片描述

在这里插入图片描述

软件包升级

#定义  service 资源的配置

#定义类型
vim values.yaml
  tag: "v2"

service:
  type: NodePort
  nodePort: 30080
  port: 8080
##修改配置模板文件

vim templates/service.yaml

添加
nodePort: {{ .Values.service.nodePort }}
##查看配置是否错误
helm lint test01/

##打包软件包
helm package test01/

在这里插入图片描述

##利用新的软件包进行升级
helm upgrade -n test test-demo1 test01-0.0.2.tgz

在这里插入图片描述

在这里插入图片描述

软件包升级和创建ingress

##先安装ingress控制器
##创建ingress资源

vim values.yaml


ingress:
  enabled: true
  className: "nginx"
  annotations: {}
    # kubernetes.io/ingress.class: nginx
    # kubernetes.io/tls-acme: "true"
  hosts:
    - host: www.a.com
      paths:
        - path: /
          pathType: Prefix
##超级头痛的 ingress 内部访问错误

kubectl get ValidatingWebhookConfiguration
kubectl delete -A ValidatingWebhookConfiguration ingress-nginx-admission
把那个该死的 admission 删掉

在这里插入图片描述

在这里插入图片描述

回滚版本

##查看版本
helm history -n test test-demo1

##回滚版本
helm rollback -n test test-demo1 1

在这里插入图片描述

在这里插入图片描述

仓库关联

部署harbor

##事先部署docker  harbor仓库
修改配置文件
##首先,先修改   daemon.json  配置文件
##所有装有  docker的节点都要修改

vim /etc/docker/daemon.json

{
  "insecure-registries": ["http://192.168.242.67"],   
    ##注意在末尾添加  ,
    
  "registry-mirrors": ["镜像加速URL"]
}


##重启Docker服务
systemctl restart docker 
##修改  harbor  配置文件

cd /opt/harbor

vim  harbor.yml


---第5行---
hostname: 192.168.242.67

---第13行---
注释掉https的配置项

---第27行
harbor_admin_password: Harbor12345
##记住harbor的密码

---第70行
absolute_url: enabled
##安装 harbor
./install.sh --with-clair --with-chartmuseum

在这里插入图片描述

安装 push 插件

##离线安装

wget https://github.com/chartmuseum/helm-push/releases/download/v0.8.1/helm-push_0.8.1_linux_amd64.tar.gz
##移动软件

mkdir -p ~/.local/share/helm/plugins/helm-push

tar -zxvf helm-push_0.8.1_linux_amd64.tar.gz -C ~/.local/share/helm/plugins/helm-push

cd ~/.local/share/helm/plugins/helm-push
##添加仓库
helm repo add harbor http://192.168.242.69:85/chartrepo/test01 --username=admin --password=Harbor12345

在这里插入图片描述

##上传 包到仓库中
helm push test01-0.0.1.tgz harbor

在这里插入图片描述

在这里插入图片描述

总结

  • Helm 是K8S的软件包(Chart包)管理器
  • 可以实现将软件应用所有所需的资源配置打包在一起,资源配置还能实现高度的可配置化,并可以通过单个helm命令一键管理部署
  • Helm 的三大概念:Chart(软件包) Release(基于Chart运行的实例) Repository(存放Chart的仓库)
  • Helm 仓库管理命令:
helm repo list                               #查看chart仓库列表
          add <仓库名称> <仓库URL地址>          #添加chart仓库
          update                             #更新chart仓库
          remove <仓库名称>                    #删除chart仓库
helm search repo <仓库名称>                   #查看仓库中可用的chart包列表
helm search repo <仓库名/软件包> -l            #查看仓库中此软件包的所有历史版本列表
helm show chart <仓库名/软件包>               #查看chart软件包的基本概要信息
helm show all <仓库名/软件包>                 #查看chart软件包的所有详细信息
##Helm 的包安装、卸载命令:

helm install <实例名>  <仓库名/软件包>  -n <命名空间> [--version=<chart版本>]    #根据chart包安装实例

helm ls|list  -n <命名空间>                                                  #查看指定命名空间下的实例列表

helm status <实例名> -n <命名空间>                                            #查看实例的状态

helm uninstall <实例名> -n <命名空间>                                          #卸载实例
Helm chart软件包管理命令:
helm pull <仓库名/软件包>                      #从仓库拉取chart压缩包
helm create  <chart名称>                       #创建一个chart目录
helm lint <chart目录>                          #检查chart配置语法
helm package <chart包目录>                     #打包成chart压缩包
helm upgrade <实例名>  <chart包>  -n <命名空间>     #升级实例
helm history <实例名>  -n <命名空间>                #查看实例的历史版本列表
helm rollback <实例名> <版本序号> -n <命名空间>     #回滚实例到指定历史版本
helm repo add <私有仓库名> <私钥仓库地址> --username= --password= #添加chart私钥仓库,harbor私钥仓库地址格式为:http://私钥仓库URL地址/chartrepo/项目名

helm push <chart包> <私有仓库名>        #推送chart包到私钥仓库
  • chart包的关键组成:

  • Chart.yaml:描述chart的元信息,包括chart名称(name)、chart版本(version)、应用版本(appVersion)、chart api接口(apiVersion)等

  • templates目录:目录里存放部署应用所需要的各种资源对象的yaml配置模板文件+

    • values.yaml:存储 templates目录中yaml配置模板文件中变量的值
      (yaml配置模板文件变量 {{ .Values.image.repository }} 即对应着 values.yaml 文件中 image.repository 字段的值)

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

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

相关文章

前端打开弹窗时将链接转化为二维码

qrcodejs2 1.安装qrcodejs2 2.在使用页面中引入 import QRCode from "qrcodejs2";3.在组件中注册(Vue2项目) components: {QRCode,}, 4.在data中定义qrcode&#xff0c;以及方法中使用 showCode(row) {this.dialogVisible true;this.$nextTick(() > { 需要n…

Docker+Jmeter+InfluxDB+Grafana 搭建性能监控平台

当今互联网发展迅速&#xff0c;应用程序的性能监控显得越来越重要。 DockerJmeterInfluxDBGrafana 是一种常用的性能监控平台&#xff0c;可以帮助开发者快速搭建一套可靠的监控体系。在本文中&#xff0c;我们将介绍如何使用这些工具搭建性能监控平台&#xff0c;以便开发人…

R语言处理缺失数据(1)-mice

#清空 rm(listls()) gc()###生成模拟数据### #生成100个随机数 library(magrittr) set.seed(1) asd<-rnorm(100, mean 60, sd 10) %>% round #平均60&#xff0c;标准差10 #将10个数随机替换为NA NA_positions <- sample(1:100, 10) asd[NA_positions] <- NA #转…

哈夫曼树介绍及Java实现

哈夫曼树 1. 介绍1.1 哈夫曼树1.2 路径、路径长度、结点的权、结点的带权路径长度1.3 树的带权路径长度WPL 2. 哈夫曼树构建步骤3. 代码实现 1. 介绍 1.1 哈夫曼树 哈夫曼树-最优二叉树&#xff1a;树的带权路径长度最小的二叉树&#xff1b;权值均为叶子结点&#xff1b;权值…

云计算与边缘计算:加速数字化转型的关键驱动力

云计算和边缘计算技术正以惊人的速度改变着企业的业务和基础架构。这些先进的技术为企业带来了灵活性、可扩展性和成本效益的优势&#xff0c;重新定义了业务运作的方式。 云计算是通过互联网将计算资源提供给用户的一种服务模式。通过云计算&#xff0c;企业可以将应用程序、…

Vulkan基础

目录 一、Vulkan开发理论基础知识 接口设计理念 Host&Device 基础设施——元数据和设备 基础设施——交换链 ​编辑交换链 SwapChain​编辑 渲染管线 Pipeline RenderPass CommandBuffer 二、Vulkan DescriptorSet 创建DescriptorPool 运行时绑定DescriptorSet 三…

Egg.js + Joi 进行接口参数验证

Joi 是一款强大的 JavaScript 数据验证库&#xff0c;用于验证和转换数据的格式。无论是在后端还是前端开发中&#xff0c;数据验证都是确保数据完整性和一致性的关键步骤。Joi 提供了一种简洁而灵活的方式来定义验证规则&#xff0c;以确保输入数据满足预期要求。 本文将介绍如…

md5加密/md5加盐加密

maven <!--MD5加密 对铭文信息进行加密操作--><dependency><groupId>commons-codec</groupId><artifactId>commons-codec</artifactId></dependency>工具类 import org.apache.commons.codec.binary.Hex;import java.security.Mess…

图像分割unet系列------TransUnet详解

图像分割unet系列------TransUnet详解 1、TransUnet结构2、我关心的问题3、总结与展望TransUnet发表于2021年,它是对UNet非常重要的改进,专为医学图像分割任务设计,特别用于在医学图像中分割器官或病变等解剖结构。 1、TransUnet结构 TransUNet在U-Net模型的基础上引入了混合…

第五章:平衡二叉树

系列文章目录 文章目录 系列文章目录前言1、平衡二叉树的介绍1.1 AVL树的概念1.2 AVL树的性质 2、平衡二叉树的插入2.1 平衡二叉树的插入步骤2.2 平衡二叉树的旋转2.2.1 左单旋2.2.2 右单旋2.2.3 左右双旋2.2.4 右左双旋 3、平衡二叉树的检验4、平衡二叉树的删除5、整体代码 前…

Java并发编程第5讲——volatile关键字(万字详解)

volatile关键字大家并不陌生&#xff0c;尤其是在面试的时候&#xff0c;它被称为“轻量级的synchronized”。但是它并不容易完全被正确的理解&#xff0c;以至于很多程序员都不习惯去用它&#xff0c;处理并发问题的时候一律使用“万能”的sychronized来解决&#xff0c;然而如…

Postman如何做接口自动化测试?

前言 什么是自动化测试 把人对软件的测试行为转化为由机器执行测试行为的一种实践。 例如GUI自动化测试&#xff0c;模拟人去操作软件界面&#xff0c;把人从简单重复的劳动中解放出来。 本质是用代码去测试另一段代码&#xff0c;属于一种软件开发工作&#xff0c;已经开发完…

v8引擎编译全过程

环境vs2019 cmd 命令行需要设置成为代理模式 set http_proxyhttp://127.0.0.1:10809 set https_proxyhttp://127.0.0.1:10809 这个必须带上&#xff0c;不然报错&#xff0c;告诉编译器win系统的模式 set DEPOT_TOOLS_WIN_TOOLCHAIN0 源码 GitHub: GitHub - v8/v8: The…

还不知道怎么提示LLM?ChatGPT提示入门

文章目录 简介&#xff1a;什么是人工智能&#xff1f;什么是提示过程&#xff1f;为什么会出现这样的差异&#xff1f; 为什么需要提示过程&#xff1f;1) 文章摘要2) 数学问题求解 如何进行提示过程&#xff1f;角色提示&#xff1a;多范例提示&#xff1a;无范例提示单范例提…

糖尿病视网膜病灶分割(Diabetic Retinopathy Multi-lesion Segmentation)-RTNet论文总结

论文&#xff1a;RTNet: Relation Transformer Network for Diabetic Retinopathy Multi-lesion Segmentation 目录 一、背景和出发点 二、创新点 三、方法实现 A. 概述 B. 全局transformer模块&#xff08;GTB&#xff09; C. 关系transformer模块&#xff08;RTB&#…

【Linux操作系统】深入探索Linux系统编程中的信号集操作函数

在Linux系统编程中&#xff0c;信号集操作函数是非常重要的工具&#xff0c;它们允许我们对信号进行管理和控制。本篇博客将详细介绍Linux系统编程中的信号集操作函数&#xff0c;包括信号集的创建、添加和删除信号&#xff0c;以及对信号集进行操作的常用函数。通过深入了解这…

华为Atlas的迭代关系、性能特点与典型应用场景

衔接上文&#xff0c;本篇主要讲解华为Atlas训练卡的迭代关系。以及迭代后的训练卡性能特点与典型应用场景。 Atlas 300T A2 训练卡的迭代关系为Atlas 300T Pro升级到Atlas 300T A2。相比之下&#xff0c;Atlas 300T A2 性能特点&#xff1a; ○ 高度集成 AI算力、通用算力、…

无人机巡检输电线路是什么,怎么巡?

在今日科技迅速发展的时代&#xff0c;无人机为输电线路巡检提供了一种高效、安全且准确的解决方案。那么&#xff0c;为什么无人机巡检输电线路如此关键呢&#xff1f;以下是对这一问题的深入剖析。 1. 提高工作效率 传统的巡检模式与现实挑战&#xff1a;在过去&#xff0c;输…

shell脚本语句(画矩形、三角形、乘法表和小游戏)(#^.^#)

目录 一、语句 一、条件语句 一、以用户为例演示 一、显示当前登录系统的用户信息 二、显示有多少个用户 二、单分支if 一、输入脚本 二、验证结果 三、双分支if 一、输入脚本 二、验证结果 四、多分支if 一、输入脚本 二、验证 二、循环语句 一、shell版本的循环…

【Freertos基础入门】深入浅出信号量

文章目录 前言一、Freertos的信号量是什么&#xff1f;二、二进制信号量和计数型信号量是什么&#xff1f;三、信号量初步了解1.二进制信号量的使用2.give和take是什么&#xff1f;3.为什么需要动态和静态创建的方式&#xff1f; 四、二进制信号量示例代码总结 前言 本系列基于…