什么是Helm?它是如何提升云原生应用私有化部署效率的

转载至我的博客 ,公众号:架构成长指南

试想一下,如果有一个项目有50 个微服务,每个微服务都有service、deployment、ingress、pvc等 yaml 文件,算下来大概有 200 个文件,然后这个项目需要基于k8s进行私有化交付,如果是你会怎么快速部署应用?

首先让我们先思考一下

  • 200 个文件是否通过kubectl apply进行部署,写个shell 脚本for 循环一个个读取执行?,但是如果这些yaml 文件更新了,如何同步?
  • 如果这些pod进行需要升级怎么办,一个个修改镜像 tag?
  • yaml文件关联地址如何更新,比如数据库地址、文件系统地址,日志目录,资源大小等?
  • 如果想进行卸载,如何做,一个个去删除?

如果有一个工具能把这些yaml文件放在一个包里,类似npmmaven这样的包管理工具,然后把关键的参数暴露出来,在部署时指定这些参数,执行一键部署,在卸载时一键卸载是不是很方便,而Helm 就是这样的工具

什么是Helm

Helm 是一个能够在 Kubernetes 上打包、部署和管理应用程序的工具,即使是最复杂的 Kubernetes 应用程序它都可以帮助定义,安装和升级,同时Helm 也是 CNCF 的毕业项目。

以下Helm中的概念

Helm Charts:预先配置yaml的模板,在这里叫Chart,用于描述 Kubernetes 应用程序的yaml和配置

Helm Client:用于与 Helm 交互并管理这些Chart版本的命令行界面

Chart 仓库:管理Chart的仓库,跟Maven的Nexus一个意思,比如在公司环境构建上传,在客户的机房连接到这Chart 仓库下载Chart,并部署到k8s中。

我们要做什么?

这里我们不介绍Helm 的具体函数,具体可以查官网,这里只讲一下如何使用Helm,让你对Helm有一个认识,知道在什么场景下使用即可,所以我们结合一个示例讲一下玩法。

示例介绍

有一个运维部署系统,分为前后端,需要部署到客户机房,在k8s架构如下,可以看到需要8 个文件(其中Istio需要2个yaml文件),下面通过示例一步步创建这个Chart

示例创建

我们通过helm create dp-manage命令创建一个Chart,执行完以后,默认会生成一个 nginx 的Chart,如下图

关键文件说明
Chart.yaml

定义了当前 chart版本,以及描述当前chart用途,其中 name 参数表示 chart 名称,后期上传下载都会用此名称

values.yaml

可变参数,都是在此文件中定义,在yaml模板中引用,比如:image.repository,而引用则通过.Values+变量的名进行引用,如下图

_helpers.tpl

通用代码块定义,类似于freemaker的宏,然后在yaml中通过名称进行引用,include 修饰的都是,比如dp-manager.selectorLabels

示例修改

由于默认创建一个Nginx 的 Chart 无法满足我们需求,所以删除掉多余的文件,并添加运维部署系统的yaml 文件,如下图

可以看到有8个模板文件,其中backend-dp.yaml定义如下

通过引用values.yml参数和_helpers.tpl的通用代码块,最终会生成一个k8s的deployment.yml文件,其他文件就不一一介绍

构建与部署

通过前面的介绍,需要把Chart构建好以后,上传到Chart仓库,然后在客户机房连接这个仓库,进行下载,因此需要一个Chart 仓库,这里我们使用Harbor ,Habor可以作为容器镜像仓库也可以作为 Chart仓库一举两得,推荐使用。

关联仓库

在安装好 Helm client 以后,在本地执行以下命令,关联到仓库,

helm repo add myrepo https://host/仓库地址 \
--username sre \
--password xxxx

添加以后,执行helm repo list可以查到添加的myrepo仓库

构建打包

仓库关联好以后,执行helm package dp-manager命令打包,会生成一个dp-manager-1.0.0.tgz

执行helm cm-push dp-manager-1.0.0.tgz myrepo推送至Harbor 仓库,myrepo为我们的仓库名称,推送完以后登录Harbor 查看,如下图

拉取部署

Chart 上传以后,我们在客户机房安装Helm Client和Kubectl客户端,具体安装方法查询网上,通过helm repo add关联Habor仓库地址,关联以后执行search 命令查找运维部署系统的Chart

helm search repo  myrepo/dp-manager

Chart查询到以后,就可以进行部署了,部署分为两种方式,一种是下载Chart至本地,修改values.yaml文件在部署,另外一种是不用下载直接指定参数部署,我们使用第二种

helm install dp-manager myrepo/dp-manager  \
--set istioGateway.hosts={dpmanager.test.com} \
--set pv.log.pvEnabled=false \
--set pv.log.type=storageClass \
--set pv.log.pvc.storageName=gfs-storage \
--set pv.log.pvc.storage=20Gi \
--set apollo.cluster=default 

我们在这个命令中指定了域名,存储大小等参数,这些参数通过values.yaml文件暴露,另外此命令部署运维部署系统至default命令空间,可以通过-n 参数指定命名空间

命令执行完以后,可以通过helm list进行查看,如下图

helm list

更新

假设apollo.cluster值由 default修改为prod,执行upgrade 更新即可

helm upgrade dp-manager myrepo/dp-manager  \
--set istioGateway.hosts={dpmanager.test.com} \
--set pv.log.pvEnabled=false \
--set pv.log.type=storageClass \
--set pv.log.pvc.storageName=gfs-storage \
--set pv.log.pvc.storage=20Gi \
--set apollo.cluster=prod 
卸载

卸载非常简单,执行以下命令即可

helm uninsall dp-manager

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

强化学习求解TSP(四):Qlearning求解旅行商问题TSP(提供Python代码)

一、Qlearning简介 Q-learning是一种强化学习算法,用于解决基于奖励的决策问题。它是一种无模型的学习方法,通过与环境的交互来学习最优策略。Q-learning的核心思想是通过学习一个Q值函数来指导决策,该函数表示在给定状态下采取某个动作所获…

Vue3-41-组件- 动态组件 component 标签 和 is 属性 的使用

说明 <component> 标签 有一个 is 属性&#xff0c; 可以给这个 is属性 赋值为一个 组件对象&#xff0c; 这样这个<component> 标签就可以渲染指定的组件对象了。 使用案例 本案例中会 准备两个简单的组件&#xff0c; 在 App.vue 中导入这两个组件&#xff0c;并…

C#入门篇(一)

变量 顾名思义就是变化的容器&#xff0c;即可以用来存放各种不同类型数值的一个容器 折叠代码 第一步&#xff1a;#region 第二步&#xff1a;按tab键 14种数据类型 有符号的数据类型 sbyte&#xff1a;-128~127 short&#xff1a;-32768~32767 int&#xff1a;-21亿多~21亿多…

VMware Visio OmniGraffle模板和图标

VMware Visio OmniGraffle模板和图标 包含可用于Visio、omnigraffle的图标和SVG矢量图。 简介 这组资源适用于 IT 管理员、系统架构师、网络工程师和其他需要可视化 VMware 基础架构的专业人士创建精确的 VMware 网络和数据中心部署图&#xff0c;通过使用这些模板和图标&am…

css三大特性

css 三大特性 一、层叠性&#xff1a;css样式冲突采取原则&#xff08;后者覆盖前者&#xff09; 二、继承性&#xff1a;对于部分属性样式会有天生的继承 &#xff08;1&#xff09;字体系列属性 font-family&#xff1a;字体系列 font-weight&#xff1a;字体的粗细 fon…

ai中的渐变怎么使用

Adobe Illustrator 是Adobe系统公司推出的基于矢量的图形制作软件&#xff0c;作为全球最著名的矢量图形软件&#xff0c;以其强大的功能和体贴用户的界面&#xff0c;已经占据了全球矢量编辑软件中的大部分份额。据不完全统计全球有37%的设计师在使用Adobe Illustrator进行艺术…

一键修复所有dll缺失的工具,dll修复工具下载使用教程

在计算机使用过程中&#xff0c;我们经常会遇到各种软件或系统错误提示&#xff0c;其中最常见的就是“找不到指定的模块”或“无法找到某某.dll文件”。Dll是动态链接库的缩写&#xff0c;它是Windows操作系统中的重要组成部分&#xff0c;负责提供各种功能和资源给应用程序使…

Kafka集群部署 (KRaft模式集群)

KRaft 模式是 Kafka 在 3.0 版本中引入的新模式。KRaft 模式使用了 Raft 共识算法来管理 Kafka 集群元数据。Raft 算法是一种分布式共识算法&#xff0c;具有高可用性、可扩展性和安全性等优势。 在 KRaft 模式下&#xff0c;Kafka 集群中的每个 Broker 都具有和 Zookeeper 类…

NVIDIA GPU 与服务器型号匹配查询

NVIDIA GPU 与服务器型号匹配查询 1. Qualified System Catalog (认证服务器目录)2. NVIDIA L40S2.1. NVIDIA L40S GPU Specifications References 1. Qualified System Catalog (认证服务器目录) https://www.nvidia.cn/data-center/data-center-gpus/qualified-system-catal…

mapboxGL中区域掩膜的实现

概述 区域掩膜的功能也是比较常见的功能呢&#xff0c;本文分享在mapboxGL中结合canvas如何实现。 效果 实现 1. 创建画布 先创建一个map大小的canvas&#xff0c;设置其大小与样式&#xff0c;并添加到地图画布容器中。 const {width, height} map.getCanvas() canvas …

软件开发平台应用价值高吗?

我们都知道&#xff0c;随着行业的进步和社会的发展&#xff0c;低代码开发平台也拥有了非常可观的发展前景。利用软件开发平台&#xff0c;可以实现提质增效的办公效率&#xff0c;办公流程化发展也将提上日程。那么&#xff0c;您知道软件开发平台都拥有哪些优势特点吗&#…

OCP NVME SSD规范解读-6.标准日志要求-2

STD-LOG-12:针对日志存储的类型定义了多种&#xff0c;复位&#xff08;包括控制器复位&#xff0c;NSSR、FLR、PCIe hot reset&#xff09;与断电重启POWER CYCLE有不同的操作要求。 STD-LOG-14: Lockdown命令是NVMe管理命令集中的一个命令&#xff0c;主要用于安全和管理目的…

抖店开通之后需要操作什么?开店后的相关流程分享,附出单建议

我是王路飞。 抖店开通了之后&#xff0c;都需要操作什么呢&#xff1f; 一个是店铺的基础搭建&#xff0c;可以帮助你熟悉和了解抖店的各项功能&#xff0c;提高后续的运营效率&#xff1b; 一个是定类目&#xff0c;前期最重要的事情&#xff0c;没有之一&#xff1b; 之…

【SQL】对表中的记录通过时间维度分组,统计出每组的记录条数

场景&#xff1a;一般用作数据统计&#xff0c;比如统计一个淘宝用户在年、月、日的维度上的订单数。 业务&#xff1a;一个集合&#xff0c;以时间维度来进行分组求和。 准备一张订单表order&#xff0c;有一些常规属性&#xff0c;比如创建时间&#xff0c;订单号。 DDL语句如…

LeetCode 225.用队列实现栈(详解) ૮꒰ ˶• ༝ •˶꒱ა

题目详情&#xff1a; 思路&#xff1a;1.定义两个队列用于存储栈的数据&#xff0c;其中一个为空。 2.对我们定义的栈进行入数据&#xff0c;就相当于对不为空的队列进行入数据。 3.对我们定义的栈进行删除&#xff0c;相当于取出不为空的队列中的数据放到为空的队列中&#x…

【低照度图像增强系列(3)】EnlightenGAN算法详解与代码实现

前言 ☀️ 在低照度场景下进行目标检测任务&#xff0c;常存在图像RGB特征信息少、提取特征困难、目标识别和定位精度低等问题&#xff0c;给检测带来一定的难度。 &#x1f33b;使用图像增强模块对原始图像进行画质提升&#xff0c;恢复各类图像信息&#xff0c;再使用目标检…

约数个数和约数之和算法总结

知识概览 约数个数 基于算数基本定理&#xff0c;假设N分解质因数的结果为 可得对于N的任何一个约数d&#xff0c;有 因为N的每一个约数和~的一种选法是一一对应的&#xff0c;根据乘法原理可得&#xff0c; 一个数的约数个数为 约数之和 一个数的约数之和公式为 多项式乘积的…

汽车IVI中控开发入门及进阶(十二):手机投屏

前言: 汽车座舱有车载中控大屏、仪表/HUD多屏的显示能力,有麦克风/喇叭等车载环境更好的音频输入输出能力,有方控按键、旋钮等方便的反向控制输入能力,还有高精度的车辆数据等。但汽车座舱中控主机硬件计算能力升级迭代周期相对较长,汽车的应用和服务不够丰富。现在很多汽…

持续集成Jmeter+Jenkins+Ant

在开始这篇文章之前&#xff0c;我要先为大家解答2个疑惑&#xff1a; 第一点&#xff0c;我们为什么要在项目中进行接口自动化测试&#xff1f;好处是什么&#xff1f; 相对于UI层面&#xff0c;接口的测试的收益是巨大的&#xff0c;能在最短的时间发现重要的问题。接口在迭…

【Vue】文件管理页面制作

<template><div><div style"margin: 10px 0"><el-input style"width: 200px" placeholder"请输入名称" suffix-icon"el-icon-search" v-model"name"></el-input><el-button class"ml…