【云原生,k8s】Helm应用包管理器介绍

目录

一、为什么需要Helm?

(一)Helm介绍

(二)Helm有3个重要概念:

(三)Helm特点

二、Helm V3变化

(一)架构变化

(二)自动创建名称空间

三、Helm应用包管理器部署

1、部署Helm客户端工具

2、Helm常用命令

3、配置国内的Chart仓库

4、使用chart部署一个Nginx应用

5、使用chart部署一个Tomcat应用

6、用变量渲染模板


前提配置:基于k8s(kubernetes几圈)

 

一、为什么需要Helm?

        Kubernetes上部署的应用服务,都是由特定的资源描述组成,包括deployment、service等。每个资源对象都保存在各自文件中或者集中写到一个配置文件。然后通过kubectl apply –f demo.yaml命令进行部署。

 

如果业务系统只由一个或几个这样的服务组成,那么上面部署管理方式足够用了。

        而对于一个复杂的业务系统,会有很多类似上面的资源描述文件,例如微服务架构应用,组成应用的服务可能多达十个,几十个。如果有更新或回滚应用的需求,可能要修改和维护所涉及的大量资源对象文件,而这种组织和管理应用的方式就显得力不从心了。

        而且由于缺少对发布过的应用版本管理和控制,使Kubernetes上的应用维护和更新等面临诸多的挑战,主要面临以下问题:

如何将这些服务作为一个整体管理

这些资源文件如何高效复用

不支持应用级别的版本管理

(一)Helm介绍

        Helm是一个Kubernetes的包管理工具,就像Linux下的包管理器,如yum/apt-get等一样,Helm可以很方便的将之前打包好的yaml文件部署到kubernetes上。

(二)Helm有3个重要概念:

helm:一个命令行客户端工具,主要用于Kubernetes应用chart的创建、打包、发布和管理。

Chart:目录或者压缩包,用于应用描述,由一系列用于描述 k8s 资源对象相关文件的集合。

Release:基于Chart的部署实体,一个 chart 被 Helm 运行后将会生成对应的一个 release;将在k8s中创建出真实运行的资源对象。

(三)Helm特点

        开发的一个用于kubernetes的包管理器,每个包称为一个Chart,一个Chart是一个目录(一般情况下会将目录进行打包压缩,形成name-version.tar.gz格式的单一文件,方便传输和存储)

        对于应用发布者而言,可以通过Helm打包应用, 管理应用依赖关系,管理应用版本并发布应用到软件仓库。

        对于使用者而言,使用Helm后不用需要了解Kubernetes的Yaml语法并编写应用部署文件,可以通过Helm下载并在kubernetes上安装需要的应用,

Helm提供了kubernetes上的软件部署,删除,升级, 回滚应用的强大功能

二、Helm V3变化

2019年11月13日, Helm团队发布 Helm v3的第一个稳定版本。该版本主要变化如下:

(一)架构变化

最明显的变化是 Tiller的删除

 

1)Release名称可以在不同命名空间重用

2)支持将 Chart 推送至 Docker 镜像仓库Harbor中

3)使用JSONSchema验证chart values

4)其他

为了更好地协调其他包管理者的措辞 Helm CLI个别更名

helm delete` 更名为 `helm uninstall

helm inspect` 更名为 `helm show

helm fetch` 更名为 `helm pull

但以上旧的命令当前仍能使用。

移除了用于本地临时搭建 Chart Repository的 helm serve 命令。

(二)自动创建名称空间

        在不存在的命名空间中创建发行版时,Helm 2创建了命名空间。Helm 3遵循其他Kubernetes对象的行为,如果命名空间不存在则返回错误。

不再需要requirements.yaml, 依赖关系是直接在chart.yaml中定义。

三、Helm应用包管理器部署

1、部署Helm客户端工具

Helm客户端下载地址:Releases · helm/helm · GitHub

将源码包解压并移动到/usr/bin/目录即可。

[root@k8s-master ~]# wget https://get.helm.sh/helm-v3.5.2-linux-amd64.tar.gz

[root@k8s-master ~]# tar xf helm-v3.5.2-linux-amd64.tar.gz

[root@k8s-master ~]# cd linux-amd64/

[root@k8s-master linux-amd64]# ls

[root@k8s-master linux-amd64]# mv helm /usr/bin/

[root@k8s-master ~]# helm #验证helm命令是否可用

 

2、Helm常用命令

命令

描述

create

创建一个chart并指定名字

dependency

管理chart依赖

get

下载一个release。可用子命令:all、hooks、manifest、notes、values

history

获取release历史

install

安装一个chart

list

列出release

package

将chart目录打包到chart存档文件中

pull

从远程仓库中下载chart并解压到本地 # helm pull stable/mysql --untar

repo

添加,列出,移除,更新和索引chart仓库。可用子命令:add、index、list、remove、update

rollback

从之前版本回滚

search

根据关键字搜索chart。可用子命令:hub、repo

show

查看chart详细信息。可用子命令:all、chart、readme、values

status

显示已命名版本的状态

template

本地呈现模板

uninstall

卸载一个release

upgrade

更新一个release

version

查看helm客户端版本

3、配置国内的Chart仓库

微软仓库(Index of /kubernetes/charts/)这个仓库强烈推荐,基本上官网有的chart这里都有。

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

官方仓库(Kubeapps | Home)官方chart仓库,国内有点不好使。

添加chart存储库

[root@k8s-master ~]# helm repo add stable http://mirror.azure.cn/kubernetes/charts

[root@k8s-master ~]# helm repo add aliyun https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts

[root@k8s-master ~]# helm repo update

查看已配置的chart存储库

[root@k8s-master ~]# helm repo list

 

删除存储库:

[root@k8s-master ~]# helm repo remove aliyun

[root@k8s-master ~]# helm repo list

 

4、使用chart部署一个Nginx应用

1)创建chart

[root@k8s-master ~]# helm create nginx

 

[root@k8s-master ~]# tree nginx/

详解:

nginx/

├── charts #依赖其他包的charts文件

├── Chart.yaml #该chart的描述文件,包括ip地址,版本信息等

├── templates #存放k8s模板文件目录

│   ├── deployment.yaml #创建k8s deployment资源的yaml 模板

│   ├── _helpers.tpl #下划线开头的文件,可以被其他模板引用

│   ├── hpa.yaml #配置服务资源CPU 内存

│   ├── ingress.yaml # ingress 配合service域名访问的配置

│   ├── NOTES.txt #说明文件,helm install之后展示给用户看的内容

│   ├── serviceaccount.yaml

│   ├── service.yaml #kubernetes Serivce yaml模板

│   └── tests

│       └── test-connection.yaml

└── values.yaml #给模板文件使用的变量

 

2)修改values.yaml 里的service的type为 NodePort

[root@k8s-master ~]# cd nginx/

[root@k8s-master nginx]# vim values.yaml

 

3)安装chart任务(注意命令最后的点)

[root@k8s-master nginx]# helm install -f values.yaml

4)查看release

[root@k8s-master nginx]# helm ls #或者helm list

 

5)删除release

[root@k8s-master nginx]# helm delete nginx

6)查看pod状态

[root@k8s-master nginx]# kubectl get pod

[root@k8s-master nginx]# kubectl get pod -o wide

7)查看svc状态

[root@k8s-master nginx]# kubectl get svc

 

访问 192.168.100.132:30281

5、使用chart部署一个Tomcat应用

[root@k8s-master ~]# helm create tomcat

Creating tomcat

[root@k8s-master ~]# cd tomcat/

修改deployment.yaml和service.yaml文件

[root@k8s-master tomcat]# vim templates/deployment.yaml

[root@k8s-master tomcat]# vim templates/service.yaml

 

创建release

[root@k8s-master tomcat]# helm install tomcat .

 

查看release

[root@k8s-master tomcat]# helm ls

 

查看pod和svc

[root@k8s-master tomcat]# kubectl get pod[root@k8s-master tomcat]# kubectl get pod -o wide[root@k8s-master tomcat]# kubectl get svc

 

准备测试页

[root@k8s-master tomcat]# kubectl exec -it tomcat-67df6cd4d6-s7qxl /bin/bash

root@tomcat-67df6cd4d6-s7qxl:/usr/local/tomcat# mkdir webapps/ROOT

root@tomcat-67df6cd4d6-s7qxl:/usr/local/tomcat# echo "helm test1" > webapps/ROOT/index.jsp

[root@k8s-master tomcat]# kubectl exec -it tomcat-67df6cd4d6-tkp95 /bin/bash

root@tomcat-67df6cd4d6-tkp95:/usr/local/tomcat# mkdir webapps/ROOT

root@tomcat-67df6cd4d6-tkp95:/usr/local/tomcat# echo "helm test2" > webapps/ROOT/index.jsp

 

访问测试:

访问 192.168.100.132:32092

访问 192.168.100.133:32092

 

删除

[root@k8s-master tomcat]# helm delete tomcat

[root@k8s-master tomcat]# helm ls

 

升级(改完yaml文件之后重新应用)

[root@k8s-master tomcat]# helm install tomcat .

[root@k8s-master tomcat]# helm ls

[root@k8s-master tomcat]# kubectl get pod

 

[root@k8s-master tomcat]# vim templates/deployment.yaml

 

[root@k8s-master tomcat]# helm upgrade tomcat .

[root@k8s-master tomcat]# kubectl get pod

[root@k8s-master tomcat]# helm ls

 

回滚

[root@k8s-master tomcat]# helm rollback tomcat 1

[root@k8s-master tomcat]# helm ls

[root@k8s-master tomcat]# kubectl get pod

 

6、用变量渲染模板

测试模板是否正常

[root@k8s-master tomcat]# helm install --dry-run tomcat .

 

在values.yaml文件中定义变量

[root@k8s-master tomcat]# cat values.yaml

 

[root@k8s-master tomcat]# cat templates/deployment.yaml

[root@k8s-master tomcat]# cat templates/service.yaml

 

deployment.yaml service.yaml两个文件的变量都是预先在values.yaml里面定义过引用过来的值。

Release.Name 代表helm install 后面的那个名字

[root@k8s-master tomcat]# helm delete tomcat

将templates目录中多余的文件都删除,只保留两个测试文件

[root@k8s-master tomcat]# ls templates/

[root@k8s-master tomcat]# helm install -f values.yaml

[root@k8s-master tomcat]# helm ls

 

查看发布状态

[root@k8s-master tomcat]# helm status tomcat

[root@k8s-master tomcat]# kubectl get pod

 

查看pod详细信息

[root@k8s-master tomcat]# kubectl describe pod tomcat-dp-67df6cd4d6-78pxc

 

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

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

相关文章

STM32L151C8T6 芯片数据手册

1. 芯片型号含义 2. Flash: 64KB 3. keil 配置ST-Link 烧录程序 4. keil 选择Flash 烧录算法 5. 系统主频 32Mhz 6. 时钟树 clock tree

嵌入式系统常用的开发板

今天,了解一下常用的开发板,像stm32是最近了解的,esp8266系列是之前大三下上物联网导论课程时候接触的,一些树莓派,Arduino听说过,但了解不多。

ElasticSearch 7.4学习记录(DSL语法)

上文和大家一起初次了解了很多ES相关的基础知识,本文的内容将会是实际企业中所需要的吗,也是我们需要熟练应用的内容。 面对ES,我们最多使用的就是查询,当我负责这个业务时,现不需要我去考虑如何创建索引,添…

Go:测试框架GoConvey 简介

快速开始 GoConvey是一个完全兼容官方Go Test的测试框架,一般来说这种第三方库都比官方的功能要强大、更加易于使用、开发效率更高,闲话少说,先看一个example: package utils import (. "github.com/smartystreets/goconvey…

【Redis】Redis哨兵模式

【Redis】Redis哨兵模式 Redis主从模式当主服务器宕机后,需要手动把一台从服务器切换为主服务器,需要人工干预费事费力,为了解决这个问题出现了哨兵模式。 哨兵模式是是一个管理多个 Redis 实例的工具,它可以实现对 Redis 的监控…

NC65 树表型参照 搜索全部 按钮点击事件后获取sql的方法

NC65 树表型参照 搜索全部 按钮点击事件后获取sql的方法。 /*** 返回 UIbtnLocQuery 特性值。* * return nc.ui.pub.beans.UIButton*/ /* 警告:此方法将重新生成。 */ private nc.ui.pub.beans.UIButton getUIbtnLocQuery() {// 搜索全部 按钮return getButtonPan…

探究HTTP API接口测试:工具、方法与自动化

本文将深入探讨HTTP API接口测试的重要性,并介绍了相关工具、方法以及自动化测试的实施,同时比较了HTTP和API接口测试的区别。从不同角度解析这一关键测试领域,帮助读者更好地理解和应用于实际项目中。 在如今数字化的世界中,软件…

【JavaEE】面向切面编程AOP是什么-Spring AOP框架的基本使用

【JavaEE】Spring AOP(1) 文章目录 【JavaEE】Spring AOP(1)1. Spring AOP 是什么1.1 AOP 与 Spring AOP1.2 没有AOP的世界是怎样的1.3 AOP是什么 2. Spring AOP 框架的学习2.1 AOP的组成2.1.1 Aspect 切面2.1.2 Pointcut 切点2.1…

【算法日志】贪心算法刷题:单调递增数列,贪心算法总结(day32)

代码随想录刷题60Day 目录 前言 单调递增数列 贪心算法总结 前言 今天是贪心算法刷题的最后一天,今天本来是打算刷两道题,其中的一道hard题做了好久都没有做出来(主要思路错了)。然后再总结一下。 单调递增数列 int monotoneIncreasingDigits(int n…

CST HFSS MATLAB参数方程定义曲面绘制

CST HFSS 函数定义曲面绘制 简介环境HFSSCSTMATLAB 简介 若在柱坐标系中半径r随z和phi都会变,无法使用一般的方法绘制,这时可以使用参数方程定义的曲面来绘制。举一个例子如下, r 100 0.5 ( c o s ( 0.2 ∗ p i ∗ z ) − 1 ) c o s ( φ …

初识网络原理(笔记)

目录 ​编辑局域网 网络通信基础 IP 地址 端口号 协议 协议分层 TCP / IP 五层网络模型 网络数据传输的基本流程 发送方的情况: 接收方的情况 局域网 搭建网络的时候,需要用到 交换机 和 路由器 路由器上,有 lan 口 和 wan 口 虽…

苍穹外卖 day2 反向代理和负载均衡

一 前端发送的请求,是如何请求到后端服务 前端请求地址:http://localhost/api/employee/login 路径并不匹配 后端接口地址:http://localhost:8080/admin/employee/login 二 查找前端接口 在这个页面上点击f12 后转到networ验证&#xff0…

K8s学习笔记4

场景: 项目研发部门最近要进行应用运行基础环境迁移,需要由原先的虚拟机环境迁移到K8s集群环境中,以便应对开发快速部署和快速测试的需要,因此,需要准备一套可以用于开发需求的K8s集群,但是对于仅有容器基…

Redis企业级解决方案

缓存预热 “ 宕机 ” 服务器启动后迅速宕机 问题排查 1. 请求数量较高 2. 主从之间数据吞吐量较大,数据同步操作频度较高 , 因为刚刚启动时,缓存中没有任何数据 解决方案 准备工作: 1. 日常例行统计数据访问记录,统计访…

Docker的基本使用

Docker 概念 Docker架构 docker分为客户端,Docker服务端,仓库 客户端 Docker 是一个客户端-服务器(C/S)架构程序。Docker 客户端只需要向 Docker 服务端发起请求,服务端将完成所有的工作并返回相应结果。 Docker …

Midjourney API 国内申请及对接方式

在人工智能绘图领域,想必大家听说过 Midjourney 的大名吧! Midjourney 以其出色的绘图能力在业界独树一帜。无需过多复杂的操作,只要简单输入绘图指令,这个神奇的工具就能在瞬间为我们呈现出对应的图像。无论是任何物体还是任何风…

(排序) 剑指 Offer 51. 数组中的逆序对 ——【Leetcode每日一题】

❓剑指 Offer 51. 数组中的逆序对 难度:困难 在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数。 示例 1: 输入: [7,5,6,4] 输出: 5 限制&#xff…

铜矿人员定位安全方案

针对铜矿中的人员定位安全需求,可以采用以下方案: 1.实时人员定位系统:建立一个实时人员定位系统,通过在矿工的工作服或安全帽上安装UWB或RFID定位设备,以及相应的接收器和基站,实时跟踪和定位矿工的位置。…

设计模式——桥接模式

引用 桥我们大家都熟悉,顾名思义就是用来将河的两岸联系起来的。而此处的桥是用来将两个独立的结构联系起来,而这两个被联系起来的结构可以独立的变化,所有其他的理解只要建立在这个层面上就会比较容易。 基本介绍 桥接模式(Br…

ceph集群的扩容缩容

文章目录 集群扩容添加osd使用ceph-deploy工具手动添加 添加节点新节点前期准备新节点安装ceph,出现版本冲突 ceph-deploy增加节点 集群缩容删除osd删除节点 添加monitor节点删除monitor节点使用ceph-deploy卸载集群 实验所用虚拟机均为Centos 7.6系统,8…