【云原生 • Kubernetes】一文掌握 k8s 包管理工具 Helm

举报
敬 之 发表于 2022/09/25 00:25:12 2022/09/25
【摘要】 本文导读 一、为什么要引入 Helm1. Helm 的应用场景2. 使用 Helm 可以解决哪些问题 二、Helm 概述三、Helm 安装与配置(v3)1. 安装 Helm v32. ...

在这里插入图片描述


一、为什么要引入 Helm

1. Helm 的应用场景

在以往的应用部署过程当中,我们需要先编写一个 yaml 文件,然后该文件中包含 deployment、Service、Ingress 等等。

如果说需要部署的是单一、少数服务的应用,那么完全可以使用 yaml 文件的方式,这样会很简单。但是在实际的项目当中,微服务的数量基本不可能是一个,可能是几十个,如果说再用 yaml 文件的部署方式,那就意味着需要编写几十个 yaml 文件,这就会导致 数量多维护难 等诸多问题。

2. 使用 Helm 可以解决哪些问题

针对上述问题,Helm 的引入使用则可以将所有的 yaml 文件进行一个整体的管理,而且它能够实现 yaml 文件的高效复用。

高效复用:yaml 文件的格式和结果基本相同,一般只是属性值有所变化。使用 helm 后,针对格式和结构基本相同的 yaml 文件就不需要一遍一遍的进行重复编写了,直接复用即可。

除此之外,Helm 还可以进行应用级别的版本管理,包括版本更新、回退等等。

二、Helm 概述

Helm 是 Kubernetes 的一个 包管理工具,类似于 Linux 下的包管理工具如 yum、apt 等。可以方便的将之前打包好的 yaml 文件部署到 Kunernetes 上。

在这里插入图片描述

在 Helm 中有三个主要概念:

概念 含义
helm 一个命令行工具,主要用于 k8s 应用 Chart 的创建、打包、发布和管理。
Chart 应用描述,它是一系列用于描述 k8s 资源相关文件的集合(可以理解为 yaml 的集合)。
Release 基于 Chart 的部署实体,一个 Chart 被 Helm 运行后将会生成一个对应的 release,然后将在 k8s 中创建出真正运行的资源对象,它是一个应用级别的版本管理。

在 2019 年 11 月 13日,Helm 团队发布了稳定版本 Helm v3,这也是当前主流版本。该版本与往期版本相比较有主要以下变化:

  • 删除了 Tiller;
  • 支持 release 在不同命名空间中重用;
  • 支持直接将 Chart 推送到 docker 仓库中。

如下为各版本 Helm 架构简易示意图。

v3 之前版本架构

在这里插入图片描述

v3 版本架构

在这里插入图片描述

三、Helm 安装与配置(v3)

1. 安装 Helm v3

第一步:前往 Helm 官网下载压缩文件;

在这里插入图片描述
在这里插入图片描述
也可以直接使用以下网址进行下载,我这里使用的是 3.0.0 版本:

操作系统 Helm二进制文件下载地址(v3.0.0)
macOS https://get.helm.sh/helm-v3.0.0-darwin-amd64.tar.gz
linux/amd64 https://get.helm.sh/helm-v3.0.0-linux-amd64.tar.gz

第二步:将压缩文件上传至我们的 Linux 系统;

在这里插入图片描述

第三步:解压 helm 压缩文件;

#解压文件
tar -zxvf helm-v3.0.0-linux-amd64.tar.gz

  
 
  • 1
  • 2

解压后会有一个 linux-arm64 目录,这其中就包含了我们需要的 helm 文件;

在这里插入图片描述

第四步:将解压之后的 helm 目录复制或者移动到 /usr/local/bin 目录下;

#移动文件
mv helm /usr/local/bin

  
 
  • 1
  • 2

完成此四步的操作之后就可以直接在 Linux 系统中使用 helm 命令进行相关操作了,如果使用 helm 命令不报错,则说明 helm 安装成功。

在这里插入图片描述

2. 配置 Helm 仓库

添加仓库语法如下;

#语法
helm repo add 仓库名称 仓库地址

#eg:
#添加微软仓库
helm repo add stable http://mirror.azure.cn/kubernetes/charts
#添加阿里云仓库
helm repo add aliyun https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

仓库成功添加之后可以使用 helm repo list 命令查看已有仓库;

在这里插入图片描述

四、使用 Helm 快速部署应用

在这里我们以部署可视化工具 weave 为例。

第一步:使用命令搜索应用 weave;

helm search repo weave

  
 
  • 1

在这里插入图片描述

第二步:根据搜索到的内容选择安装;

#安装	
helm install ui stable/weave-scope

  
 
  • 1
  • 2

这里选择的是微软源的 weave-scope 进行安装,如果在安装过程中报错那就换一个源;

在这里插入图片描述

安装成功就可以使用命令 helm list 查看了;

在这里插入图片描述
接下来使用 kubectl get podskubectl get svc 就可以看到我们安装的 weave 相关内容和对外暴露端口;

在这里插入图片描述
第三步:可以看到此时并未对外暴露端口,所以我们需要修改 service 中的 yaml 文件,将 type 值改为 NodePort,使用命令 kubectl edit svc ui-weave-scope

在这里插入图片描述
修改过后再次查看 svc,此时已有端口暴露;

在这里插入图片描述

五、自定义 Chart 部署应用

我们在这里以部署自定义应用 myweb1 为例。

第一步:创建一个chart;

helm create mychart

  
 
  • 1

创建成功会自动生成一个 mychart 目录(其实也就是一个模板);

在这里插入图片描述
在生成的目录中有以下几部分:

文件 含义
charts 一个普通的空文件,一般也不会写入内容
Chart.yaml 当前 chart 属性的配置信息
templates 自己定义的 yaml 文件存于此
values.yaml 定义 yaml 文件的全局配置

第二步:进入 templates 目录,创建 deployment. yaml 文件;

[root@master mychart]# cd templates/
[root@master templates]# kubectl create deployment myweb1 --image=nginx --dry-run -o yaml > deployment.yaml
W0906 10:18:15.827722  113157 helpers.go:535] --dry-run is deprecated and can be replaced with --dry-run=client.
[root@master templates]# ls
deployment.yaml  ingress.yaml  serviceaccount.yaml  tests
_helpers.tpl     NOTES.txt     service.yaml

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

查看 deployment.yaml 文件;

在这里插入图片描述

第四步:设置对外暴露端口,创建 service.yaml 文件;

[root@master templates]# kubectl expose deployment myweb1 --port=80 --target-port=80  --type=NodePort --dry-run -o yaml > service.yaml
W0906 10:37:13.004600  126020 helpers.go:535] --dry-run is deprecated and can be replaced with --dry-run=client.
[root@master templates]# ls
deployment.yaml  ingress.yaml  serviceaccount.yaml  tests
_helpers.tpl     NOTES.txt     service.yaml

  
 
  • 1
  • 2
  • 3
  • 4
  • 5

如果这里无法导出,我们就先创建一次镜像:kubectl create deployment myweb1 --image=nginx

导出 service 后再删除此镜像:kubectl delete deployment myweb1

查看 service.yaml 文件;

在这里插入图片描述
此时在 templates 目录中已有创建的两个 yaml 文件;

在这里插入图片描述
第五步:回到 mychart 父级目录,开始安装;

[root@master linux-amd64]# helm install myweb1 mychart/

  
 
  • 1

安装成功后查看应用内容,应用节点与对外端口均创建成功;

在这里插入图片描述

myweb1 应用部署完成,此时就完成了 chart 的自定义及部署应用操作。

第六步:应用升级,每次修改 yaml 文件内容之后,我们均需对应用进行升级操作,使用如下命令。

#格式
helm upgrade 自定义应用名称 目录
#eg:
helm upgrade myweb1 mychart/

  
 
  • 1
  • 2
  • 3
  • 4

六、Helm 实现 yaml 文件高效复用

高效复用:如果若干 yaml 文件的格式和结果基本相同,只是属性值有所变化时。在使用 Helm 后,针对格式和结构基本相同的 yaml 文件就不需要一遍一遍的进行重复编写了,直接复用即可。其主要实现原理就是通过动态传递参数、动态渲染模板、动态传入参数生成 yaml 文件内容。

创建 chart 之后,目录下有一个 values.yaml 文件,基于此进行操作;

在这里插入图片描述
第一步:在 values.yaml 文件中定义全局变量和值;

在这里插入图片描述

第二步:在具体的 yaml 文件中获取定义的变量值。

原理就是以表达式的形式获取全局变量,格式为:{{ .Values.变量名称}}

此处以修改 deployment.yaml 文件为例:

在这里插入图片描述
修改后如下:

apiVersion: apps/v1
kind: Deployment
metadata:
  creationTimestamp: null
  labels:
    app: myweb1
  name: {{ .Release.Name}}-deploy
spec:
  replicas: 1
  selector:
    matchLabels:
      app: {{ .Values.label}}
  strategy: {}
  template:
    metadata:
      creationTimestamp: null
      labels:
        app: {{ .Values.label}}
    spec:
      containers:
      - image: {{ .Values.image}}
        name: nginx
        resources: {}
status: {}


  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25

七、Helm 的常用操作命令汇总

#查看仓库
helm repo list

#更新仓库
helm repo update

#删除仓库
helm repo remove 仓库名称

#搜索应用
helm search repo 名称

#安装应用
helm install 自定义应用名称 搜索出的结果名

#查看安装后的应用
helm list
helm status 应用名称	

#创建chart
helm create chart名称

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

文章来源: majinjian.blog.csdn.net,作者:Developer 小马,版权归原作者所有,如需转载,请联系作者。

原文链接:majinjian.blog.csdn.net/article/details/126693667

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。