Kubernetes# Helm工具使用

目录

概念

核心组件

Helm客户端

Tiller

Chart

Repository

Release

Helm安装

Helm使用

创建Helm Chart

定义Chart元数据

定义Template模板

定义values参数

打包和部署

Helm Chart 推送到远程仓库

Helm常用命令


概念

Helm 是一个 Kubernetes 的包管理工具,它被称为 Kubernetes 的 “Yum” 或 “Apt”,用于简化应用在 Kubernetes 中的部署、升级和管理。通过 Helm,你可以定义、安装和管理复杂的 Kubernetes 应用。

核心组件

Helm的运行也是依赖各种组件,我们在机器上执行一次Helm实际上也是多个组件执行的结果,Helm总共包括5个核心组件:

Helm客户端

Helm 是一个命令行下的客户端工具。主要用于 Kubernetes 应用程序 Chart 的创建、打包、发布以及创建和管理本地和远程的 Chart 仓库。

Tiller

Tiller 是 Helm 的服务端,部署在 Kubernetes 集群中。Tiller 用于接收 Helm 的请求,并根据 Chart 生成 Kubernetes 的部署文件( Helm 称为 Release ),然后提交给 Kubernetes 创建应用。Tiller 还提供了 Release 的升级、删除、回滚等一系列功能。

Chart

  • Chart 是一个 Helm 包,包含 Kubernetes 应用的资源定义文件(YAML 格式)和模板文件(用于动态生成 Kubernetes 资源)。Chart 是 Helm 的基本单元,相当于一个应用模板包。
  • 一个 Chart 可以用于部署多种环境,例如开发、测试和生产,只需要修改配置值。

Repository

Repository 是存放 Helm Chart 的地方,类似于 Docker 镜像仓库。官方的 Chart 仓库是 Artifact Hub,你也可以搭建私有仓库。

Release

  • 每次使用一个 Chart 部署应用时,Helm 会创建一个 Release
  • Release 是 Chart 的运行实例。可以有多个 Release 运行同一个 Chart,但每个 Release 会有不同的名称和配置。

Helm安装

安装 Helm CLI

  • 从 Helm 官方获取安装脚本:
    curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3
    chmod 700 get_helm.sh
    ./get_helm.sh

验证安装

helm version// 如果安装成功,你会看到类似以下的输出:
version.BuildInfo{Version:"v3.x.x", GitCommit:"xxxx", GitTreeState:"clean", GoVersion:"go1.x"}

Helm使用

介绍了这么多,现在用示例来看看如何使用Helm来部署kubernetes资源。

创建Helm Chart

Chart是一个项目包,也是执行Helm的基础,所有的定义都是在Chart中定义的,我们使用Helm部署一些中间件的时候,比如nginx、Kafka等这些,都是仓库中已有的Chart直接使用,这里我们直接自己自定义一个Chart定义自己的项目。

创建Chart命令:

helm create my-app

这样可以生成一个my-app项目,项目目录如下:

目录结构说明:

  • Chart.yaml:Chart的元数据,定义Chart的名称和版本
  • values.yaml:默认配置参数,配置Kubernetes的一些参数,配合模板使用
  • templates:Kubernetes的资源模板,比如Deployment、service、pod等
  • charts:存放依赖的子Chart目录,一般是已经打包成.tgz文件的chart文件

定义Chart元数据

apiVersion: v2
name: my-app
description: A Helm chart for my business app
version: 1.0.0
appVersion: 1.0.0

定义Template模板

这里我们定义一个WEB业务项目中常用的资源,有Deployment、Service、Ingress:

创建Deployment模板:

apiVersion: apps/v1
kind: Deployment
metadata:name: {{ .Release.Name }}labels:app: {{ .Chart.Name }}
spec:replicas: {{ .Values.replicaCount }}selector:matchLabels:app: {{ .Chart.Name }}template:metadata:labels:app: {{ .Chart.Name }}spec:containers:- name: {{ .Chart.Name }}image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"ports:- containerPort: 80resources:{{- toYaml .Values.resources | nindent 12 }}

创建Service模板:

apiVersion: v1
kind: Service
metadata:name: {{ .Release.Name }}labels:app: {{ .Chart.Name }}
spec:type: {{ .Values.service.type }}ports:- port: {{ .Values.service.port }}targetPort: 80selector:app: {{ .Chart.Name }}

创建Ingress:

{{- if .Values.ingress.enabled }}
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:name: {{ .Release.Name }}annotations:nginx.ingress.kubernetes.io/rewrite-target: /
spec:rules:- host: {{ .Values.ingress.host }}http:paths:- path: /pathType: Prefixbackend:service:name: {{ .Release.Name }}port:number: {{ .Values.service.port }}
{{- end }}

这样一个常规web项目就定义好了,我们定义了项目的镜像还有访问方式,可以看到和我们平时用kubernetes app -f xxx.yaml的方式不同,这里的yaml资源值都是用参数表示的,我们仅仅是定义了一个模板,参数都是动态的,可想而知如果是多个这样的web项目,我们是不是只需要这样一个模板就可以随意部署我们的项目了,是不是很方便。


定义values参数

values.yaml是配合template使用的,定义template模板中使用的默认参数:

replicaCount: 2image:repository: myregistry.com/my-apptag: "1.0.0"pullPolicy: IfNotPresentservice:type: ClusterIPport: 80ingress:enabled: truehost: my-app.example.comresources:limits:cpu: 500mmemory: 256Mirequests:cpu: 250mmemory: 128Mi

打包和部署

Chart项目的内容都定义好了,现在只需要打包成.tgz文件,然后通过Helm部署就可以了。

  • 打包Chart
    helm package my-app
    
  • 部署到Kubernetes
    // 命令格式 heml install {name} {chart}// 通过源文件直接部署
    helm install my-app ./my-app// 通过已经打好的chart包部署
    helm install my-app my-app-1.0.0.tgz

这样资源就部署好了,我们可以通过kubernetes命令进行查看,也可以通过helm list查看

上面这个部署方式用的是默认values.yaml里定义的参数,我们也可以在执行命令的时候定义参数,这样模板就动态创建不同的资源了:

  • 使用set
    helm install my-app ./my-app \--set replicaCount=3 \--set image.tag="2.0.0"
  • 使用 --set-file 传递文件中的值
    如果值较为复杂,或者需要动态加载值,可以将参数放到文件中,通过 --set-file 引入。

    创建一个文件 override-values.yaml
    replicaCount: 5image:repository: custom.registry.com/my-apptag: "3.0.0"
    安装命令:
    helm install my-app ./my-app -f override-values.yaml

Helm Chart 推送到远程仓库

从上面可以看到,Chart是一个模板项目,通过不同的参数可以创建不同的资源,所以模板是共用的,可以保存在Chart的仓库中。

  • 添加Helm仓库
    helm repo add my-repo https://my-repo.com/charts
  • 推送Chart使用插件helm-push
    helm push my-app-1.0.0.tgz my-repo
    

Helm常用命令

命令功能说明
helm create <chart-name>创建一个新的 Chart 项目目录结构。
helm lint <chart-path>检查 Chart 的语法和结构是否正确。
helm install <release-name> <chart>安装一个 Chart 并创建一个 Release。
helm upgrade <release-name> <chart>升级指定的 Release,并应用最新的 Chart 更改。
helm uninstall <release-name>删除指定的 Release,同时清理相关的 Kubernetes 资源。
helm rollback <release-name> <rev>回滚指定 Release 到指定的版本(默认上一个版本)。
helm list列出当前 Kubernetes 集群中所有的 Helm Releases。
helm repo add <repo-name> <repo-url>添加一个 Chart 仓库到本地。
helm repo update更新本地的 Chart 仓库索引,拉取最新的仓库信息。
helm search repo <keyword>在本地添加的仓库中搜索 Chart。
helm search hub <keyword>在 Helm Hub 上搜索 Chart(需联网)。
helm template <chart>渲染 Chart 模板为 Kubernetes 资源清单文件(不执行部署)。
helm package <chart-path>将 Chart 打包成一个 .tgz 文件,用于分发和发布。
helm show values <chart>显示指定 Chart 的默认 values.yaml 配置内容。
helm get values <release-name>查看指定 Release 的实际生效配置值。
helm get manifest <release-name>查看指定 Release 渲染后的 Kubernetes 资源清单文件。
helm get all <release-name>获取指定 Release 的所有相关信息(包含配置、清单等)。
helm dependency update更新 Chart 的依赖,下载 Chart.yaml 中定义的子 Chart 到 charts/ 目录。
helm dependency build构建 Chart 的依赖,功能与 helm dependency update 类似,主要用于初始构建。
helm history <release-name>查看指定 Release 的历史版本记录。
helm env显示 Helm 的环境变量信息(例如仓库路径、缓存路径等)。
helm test <release-name>运行 Chart 定义的测试用例,用于验证部署是否成功。
helm pull <chart-repo>从远程仓库拉取 Chart 包到本地(支持版本选择)。
helm plugin list列出已安装的 Helm 插件。
helm version显示 Helm 的版本信息。

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

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

相关文章

Yocto 项目中的交叉编译:原理与实例

Yocto 项目是一个强大的工具集&#xff0c;它专注于为嵌入式系统生成定制的 Linux 发行版。交叉编译在 Yocto 项目中扮演着核心角色&#xff0c;它使得开发者能够在功能强大的宿主机上构建适用于资源受限目标设备的软件系统。这篇文章将从运行原理、实际案例和工具链组成等角度…

python学opencv|读取图像(二十二)使用cv2.polylines()绘制多边形

【1】引言 前序学习进程中&#xff0c;已经掌握了使用pythonopencv绘制线段、矩形和圆形的基本操作&#xff0c;相关链接包括且不限于&#xff1a; python学opencv|读取图像&#xff08;十八&#xff09;使用cv2.line创造线段-CSDN博客 python学opencv|读取图像&#xff08;…

教师管理系统

大概功能&#xff1a; 1.显示所有教师 2.按姓名查找教师 3.按工号查找教师 4.增加教师 5.删除教师 6.退出 数据会保存到 txt 文件里面 姓名&#xff1a;必须是中文 手机号码&#xff1a;必须是11位&#xff0c;必须是数字 效果展示&#xff1a; 代码展示&#xff1a; Teache…

小程序配置文件 —— 14 全局配置 - tabbar配置

全局配置 - tabBar配置 tabBar 字段&#xff1a;定义小程序顶部、底部 tab 栏&#xff0c;用以实现页面之间的快速切换&#xff1b;可以通过 tabBar 配置项指定 tab 栏的表现&#xff0c;以及 tab 切换时显示的对应页面&#xff1b; 在上面图中&#xff0c;标注了一些 tabBar …

[Wireshark] 使用Wireshark抓包https数据包并显示为明文、配置SSLKEYLOGFILE变量(附下载链接)

wireshark 下载链接&#xff1a;https://pan.quark.cn/s/eab7f1e963be 提取码&#xff1a;rRAg 链接失效&#xff08;可能会被官方和谐&#xff09;可评论或私信我重发 chrome与firefox在访问https网站的时候会将密钥写入这个环境变量SSLKEYLOGFILE中&#xff0c;在wireshark…

Android笔记(四十一):TabLayout内的tab不滚动问题

背景 假设二级页面是上面图片的布局&#xff0c;当进来时TabLayout和ViewPager2绑定完就马上调setCustomItem&#xff0c;跳转到最后一个tab页面时&#xff0c;会发现tab不滚动&#xff0c;手动滑一下ViewPager2时才会滚动tab到正确的位置 原因分析 调用TabLayoutMediator.at…

【Spring】 Bean 注入 HttpServletRequest 能保证线程安全的原理

文章目录 前言1. 图示2. 源码坐标后记 前言 今天看了一段老业务代码&#xff0c;HttpServletRequest 被注入后直接用于业务逻辑。 好奇Spring是如何解决线程安全问题。 Controller public class TestController {ResourceHttpServletRequest request;ResponseBodyGetMapping(…

Unity中如何修改Sprite的渲染网格

首先打开SpriteEditor 选择Custom OutLine,点击Genrate 则在图片边缘会出现边缘线&#xff0c;调整白色小方块可以调整边缘 调整后&#xff0c;Sprite就会按照调整后的网格渲染了。 如何在UI中使用&#xff1f; 只要在UI的Image组件中选择Use Sprite Mesh 即可 结果&#xff1…

【Artificial Intelligence篇】AI 前沿探秘:开启智能学习的超维征程

目录 一、人工智能的蓬勃发展与智能学习的重要性: 二、数据的表示与处理 —— 智能学习的基石: 三、构建一个简单的感知机模型 —— 智能学习的初步探索: 四、神经网络 —— 开启超维征程的关键一步: 五、超维挑战与优化 —— 探索智能学习的深度: 六、可视化与交互 —— …

docker-compos mysql5.7主从配置

docker-compos mysql5.7主从配置 docker-compose目录结构 配置文件 master/my.cnf [client] port 3306 socket /var/run/mysqld/mysqld.sock[mysqld_safe] pid-file /var/run/mysqld/mysqld.pid socket /var/run/mysqld/mysqld.sock nice 0…

开源轻量级文件分享服务Go File本地Docker部署与远程访问

???欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学习,不断总结,共同进步,活到老学到老…

路过石岩浪心古村

周末常去的七彩城堡儿童乐园附近经常有老房子&#xff0c;没想到老房子最多的地方还是浪心古村。而且越看越有历史。 见到一座写着《序西书室》的房子&#xff0c;我最开始以为是一个古代的学校。但是查了百度更加不知道什么意思了哈。‌“序西书室”‌是指《文心雕龙》中的一个…

探索PyTorch:从入门到实践的demo全解析

探索PyTorch:从入门到实践的demo全解析 一、环境搭建:PyTorch的基石(一)选择你的“利器”:安装方式解析(二)步步为营:详细安装步骤指南二、基础入门demo:点亮第一盏灯(一)张量操作:深度学习的“积木”(二)自动求导:模型学习的“幕后英雄”三、数据处理demo:喂饱…

SpringMVC学习(二)——RESTful API、拦截器、异常处理、数据类型转换

一、RESTful (一)RESTful概述 RESTful是一种软件架构风格&#xff0c;用于设计网络应用程序。REST是“Representational State Transfer”的缩写&#xff0c;中文意思是“表现层状态转移”。它基于客户端-服务器模型和无状态操作&#xff0c;以及使用HTTP请求来处理数据。RES…

Windows中安装Python3

Windows中安装Python3 1. 下载Python安装包 首先&#xff0c;访问Python的官方网站 Python.org&#xff0c;选择适合你Windows版本的Python安装包。 2. 运行安装包 下载完成.exe文件后&#xff0c;双击运行安装包。在安装过程中&#xff0c;有一些关键的选项需要特别注意&a…

虚幻引擎结构之UWorld

Uworld -> Ulevel ->Actors -> AActor 在虚幻引擎中&#xff0c;UWorld 类扮演着至关重要的角色&#xff0c;它就像是游戏世界的总指挥。作为游戏世界的核心容器&#xff0c;UWorld 包含了构成游戏体验的众多元素&#xff0c;从游戏实体到关卡设计&#xff0c;再到物…

2024第一届Solar杯应急响应挑战赛

日志流量 日志流量-1 直接放到D盾分析 解码 flag{A7b4_X9zK_2v8N_wL5q4} 日志流量-2 哥斯拉流量 工具解一下 flag{sA4hP_89dFh_x09tY_lL4SI4} 日志流量-3 tcp流6复制data流 解码 改pdf flag{dD7g_jk90_jnVm_aPkcs} 内存取证 内存取证-1 vol.py -f 123.raw --profileWin…

HarmonyOS Next 实现登录注册页面(ARKTS) 并使用Springboot作为后端提供接口

1. HarmonyOS next ArkTS ArkTS围绕应用开发在 TypeScript &#xff08;简称TS&#xff09;生态基础上做了进一步扩展&#xff0c;继承了TS的所有特性&#xff0c;是TS的超集 ArkTS在TS的基础上扩展了struct和很多的装饰器以达到描述UI和状态管理的目的 以下代码是一个基于…

Spring Boot教程之四十:使用 Jasypt 加密 Spring Boot 项目中的密码

如何使用 Jasypt 加密 Spring Boot 项目中的密码 在本文中&#xff0c;我们将学习如何加密 Spring Boot 应用程序配置文件&#xff08;如 application.properties 或 application.yml&#xff09;中的数据。在这些文件中&#xff0c;我们可以加密用户名、密码等。 您经常会遇到…

七、队列————相关概念详解

队列————相关概念详解 前言一、队列1.1 队列是什么?1.2 队列的类比 二、队列的常用操作三、队列的实现3.1 基于数组实现队列3.1.1 基于环形数组实现的队列3.1.2 基于动态数组实现的队列 3.2 基于链表实现队列 四、队列的典型应用总结 前言 本篇文章&#xff0c;我们一起来…