08 Kubernetes核心技术Helm


前言

Helm就是一个包管理工具【类似于npm】
在这里插入图片描述


为什么引入 Helm?

首先在原来的项目中都是基于 yaml 文件来进行部署发布的,而目前项目大部分微服务化或者模块化,会分成很多个组件来部署,每个组件可能对应一个 deployment.yaml ,一个service.yaml ,一个 ingress.yaml 还可能存在各种依赖关系,这样一个项目如果有五个组件,很可能就有15个不同的yaml 文件,这些yaml 分散存放,如果某天进行项目恢复的话,很难知道部署顺序,依赖关系等,而所以这些包括:

  • 基于yaml 配置的集中存放

  • 基于项目的打包

  • 组件间的依赖
    但是这种方式部署,会有什么问题呢?

  • 如果使用之前部署单一应用,少数服务的应用,比较合适

  • 但如果部署微服务项目,可能有几十个服务,每个服务都有一套yaml文件,需要维护大量的yaml文件,版本管理特别不方便
    Helm的引入,就是为了解决这个问题

  • 使用Helm可以把这些YAML文件作为整体管理

  • 实现YAML文件高效复用

  • 使用helm应用级别的版本管理

Helm 介绍

Helm 是一个 k8s 的包管理工具,就像Linux 下的包管理器,如 yum apt 等,可以很方便的将之前打包好的yaml 文件部署到 k8s 上
Helm 三个概念:

  • Helm : 一个命令行客户端工具,主要用于 k8s 应用 chart 的创建、打包、发布和管理
  • Chart : 应用描述,一系列用于描述 k8s 资源相关文件的集合
  • Release: 基于 Chart 的部署实体,一个 chart 被 helm 运行后将会生成对应的 Release ,将在K8S中创建出真实的运行资源对象。也就是应用级别的版本管理
  • Repository:用于发布和存储Chart的仓库

Helm 组件及架构

Helm 采用 C/S架构,有如下组件组成:

  • Helm CLI 是 Helm 客户端,可以在本地执行
  • Tiller 是服务端组件,在 k8s 集群上运行,并管理 k8s 应用程序
  • Repository 是 Chart 仓库,Helm 客户端通过 HTTP 协议来访问仓库中 Chart 索引文件和压缩包
    在这里插入图片描述

Helm v3 变化

2019年11月13日,Helm团队发布了Helm v3的第一个稳定版本

该版本主要变化如下

  • 架构变化
    • 最明显的变化是Tiller的删除
    • V3版本删除Tiller
    • relesase可以在不同命名空间重用

V3 之前:
在这里插入图片描述
V3 版本

在这里插入图片描述

Helm 配置

首先我们需要去 官网下载

第一步,下载helm安装压缩文件,上传到linux系统中
第二步,解压helm压缩文件,把解压后的helm目录复制到 usr/bin 目录中
使用命令:helm
我们都知道yum需要配置yum源,那么helm就就要配置helm源

Helm 仓库

添加仓库

helm repo add 仓库名 仓库地址

例如

# 配置微软源
helm repo add stable http://mirror.azure.cn/kubernetes/charts
# 配置阿里源
helm repo add aliyun https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
# 配置google源
helm repo add google https://kubernetes-charts.storage.googleapis.com/

# 更新
helm repo update

然后可以查看我们添加的仓库地址

# 查看全部
hemol repo list 
# 查看某一个
helm search repo stable

在这里插入图片描述
或者我们可以删除我们添加的源

helm repo remove stable

Helm 基本命令

  • chart install
  • chart upgrade
  • chart rollback

使用 Helm 快速部署应用

使用命令搜索应用

首先我们使用命令,搜索我们需要安装的应用

# 搜索 weave 仓库
helm search repo weave

在这里插入图片描述

根据搜索内容选择安装

搜索完成后,使用命令进行安装

helm install 安装之后名称 搜索之后应用名称
helm install ui aliyun/weave-scope

可以通过下面命令,来下载yaml文件【如果】

kubectl apply -f weave-scope.yaml

安装完成后,通过下面命令即可查看

helm list 

在这里插入图片描述
同时可以通过下面命令,查看更新具体的信息

helm status ui

但是我们通过查看 svc 状态,发现没有对外暴露端口
在这里插入图片描述
所以我们需要修改service的yaml文件,添加NodePort

kubectl edit svc ui-weave-scope

在这里插入图片描述
这样就可以对外暴露端口了
在这里插入图片描述
然后我们通过 ip + 32185 即可访问

如果自己创建Chart

使用命令,自己创建 Chart

helm create mychart

创建完成后,我们就能看到在当前文件夹下,创建了一个 mychart目录
在这里插入图片描述
目录格式:

  • templates : 编写 yaml 文件存放到这个目录
  • values.yaml : 存放的是全局的yaml 文件
  • chart.yanl: 当前 chart 属性配置信息

在templates文件夹创建两个文件

创建两个文件:

  • deployment.yaml
  • service.yaml
    我们可以通过下面命令创建出yaml 文件
# 导出deployment.yaml
kubectl create deployment web1 --image=nginx --dry-run -o yaml > deployment.yaml
# 导出service.yaml 【可能需要创建 deployment,不然会报错】
kubectl expose deployment web1 --port=80 --target-port=80 --type=NodePort --dry-run -o yaml > service.yaml

安装mychart

执行命令创建

helm install web1 mychart 

在这里插入图片描述

应用升级

当我们修改了mychart中的东西后,就可以进行升级操作

helm upgrade web1 mychart 

chart 模板使用

在这里插入图片描述

通过传递参数,动态渲染模板,yaml 内容动态传入参数生成

在这里插入图片描述
刚刚我们创建 mychart 的时候,看到有 values.yaml 文件,这个文件就是一些全局的变量,然后在templates中能取到变量的值,下面我们可以利用这个,来完成动态模板

  • 在values.yaml 定义变量和值
  • 具体 yaml 文件,获取定义变量值
  • yaml 文件中大体有几个地方不同
    • image
    • tag
    • label
    • port
    • replicas

定义变量和值

在values.yaml定义变量和值
在这里插入图片描述

获取变量和值

我们通过表达式形式 使用全局变量 {{.Values.变量名称}}

例如: {{.Release.Name}}
在这里插入图片描述

安装应用

在我们修改完上述的信息后,就可以尝试的创建应用了

helm install --dry-run web2 mychart 

在这里插入图片描述

总结

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

尼古拉斯-kq

支持一下,感谢!!!!!!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值