19.Helm

Helm

简介

  • Helm本质就是让K8s的应用管理(Deployment、Service等)可配置,可以通过类似于传递环境变量的方式能动态生成。通过动态生成K8s资源清单文件(deployment.yaml、service.yaml)。 然后调用 Kubectl 自动执行 K8s 资源部署。

  • Helm具备如下的能力:

    • 简化部署 : Helm允许使用单个命令轻松部署和管理应用程序,从而简化了整个部署过程
    • 高度可配置: Helm Charts提供了高度可配置的选项,可以轻松自定义和修改应用程序的部署配置
    • 版本控制 : Helm允许管理应用程序的多个版本,从而轻松实现版本控制和回滚
    • 模板化:Helm Charts使用YAM模板来定义Kubernetes对象的配置,从而简化了配置过程,并提高了可重复性和可扩展性
    • 应用程序库:Helm具有应用程序库的概念,可以轻松地其享和重用Helm Charts,从而简化了多个应用程序的部署和管理
    • 插件系统: Helm拥有一个强大的插件系统,允许您扩展和定制Helm的功能,以满足特定的需求和要求。
  • Helm 本质就是一个k8s的包管理器

三个概念

  • Helm 是官方提供的类似于 YUM 的包管理器,是部署环境的流程封装。Helm 有三个重要的概念:Chart 、Repository 和 Release

    • Chart:Helm 的软件包,采用 TAR 格式。是创建一个应用的信息集合,包括各种 Kubernetes 对象的配置模板、参数定义、依赖关系、文档说明等。chart 是应用部署的自包含逻辑单元。 可以将 chart 想象成 apt、yum 中的软件安装包。
    • Release:是 chart 的运行实例,代表了一个正在运行的应用。当 chart 被安装到 Kubernetes 集群,就生成一个 release。chart 能够多次安装到同一个集群,每次安装都是一个 release。
    • Repository(仓库):Charts 仓库,用于集中存储和分发 Charts。Repository 本质上是一个 Web 服务器,该服务器保存了一系列的 Chart 软件包以供用户下载,并且提供了一个该 Repository 的 Chart 包的清单文件以供查询。Helm 可以同时管理多个不同的 Repository。
  • 总结:Helm 安装 charts 到 Kubernetes 集群中,每次安装都会创建一个新的 release。你可以在 Helm 的 chart repositories 中寻找新的 chart。

版本

  • Helm3 与 Helm2 的区别:
  • Helm2 是 C/S 架构,主要分为客户端 helm 和服务端 Tiller。在 Helm 2 中,Tiller 是作为一个 Deployment 部署在 kube-system 命名空间中,很多情况下,我们会为 Tiller 准备一个 ServiceAccount ,这个 ServiceAccount 通常拥有集群的所有权限。
    用户可以使用本地 Helm 命令,自由地连接到 Tiller 中并通过 Tiller 创建、修改、删除任意命名空间下的任意资源。
  • 在 Helm 3 中,Tiller 被移除了。新的 Helm 客户端会像 kubectl 命令一样,读取本地的 kubeconfig 文件,使用我们在 kubeconfig 中预先定义好的权限来进行一系列操作。
  • Helm 的官方网站 https://helm.sh/

在这里插入图片描述

部署Helm

  • 下载二进制 Helm client 安装包
  • https://github.com/helm/helm/tags
tar -zxvf helm-v3.6.0-linux-amd64.tar.gz

mv linux-amd64/helm /usr/local/bin/helm

helm version

在这里插入图片描述

Helm命令

##命令补全
source <(helm completion bash)
##添加常用的 chart 仓库,
helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo add stable http://mirror.azure.cn/kubernetes/charts
helm repo add aliyun https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
helm repo add incubator https://charts.helm.sh/incubator
##查看  chart 仓库列表
helm repo list

在这里插入图片描述

##更新  chart 仓库
helm repo update

在这里插入图片描述

##搜索仓库中的软件包
helm search repo stable

在这里插入图片描述

删除 stable 仓库
helm repo remove stable

在这里插入图片描述

查看 chart 信息
helm show chart stable/mysql     #查看指定 chart 的基本信息


helm show all stable/mysql		 #获取指定 chart 的所有信息

在这里插入图片描述

##安装 chart
helm install my-redis bitnami/redis -n default --version=

#指定 release 的名字为 my-redis,
-n 指定部署到 k8s 的 namespace

helm install bitnami/redis --generate-name    
#不指定 release 的名字时,需使用 
–generate-name 随机生成一个名字

在这里插入图片描述

在这里插入图片描述

##查看所有 release
helm ls 
helm list -n default

在这里插入图片描述

##查看指定的 release 状态
helm status my-redis   

在这里插入图片描述

##删除指定的 release
helm uninstall my-redis 

在这里插入图片描述

Helm 自定义模板

##拉取 chart

mkdir /opt/helm
cd /opt/helm

helm pull bitnami/nginx

在这里插入图片描述

在这里插入图片描述

  • chart.yaml:软件包自描述文件。这个文件必须有 name 和 version (chart版本)的定义。用于述这 chart的基本信息,包括名字、描述信息以及版术等
  • templates :目录里面存放所有yaml模板文件。deployment.yaml、service.yaml、ingress.yaml等
    • deployment.yaml :创建 deployment 的资源清单文件
    • service.yaml :为 deployment 创建 service 的资源清单文件
    • ingress.yaml :创建 ingress 对象的资源清单文件
  • values.yaml:用于存储templates目录中模板文件中用到的变量的值
  • NOTES.txt :用于介绍chart帮助信息,helm install 部署后展示给用户
  • _helpers.tpl :放置模板的地方,可以在整个chart中重复使用
##在  demplates的目录中

例如     vim deployment.yaml    文件

"{{ .Values.busybox.image}}:{{ .Values.busybox.tag }}"
表示:

在 /opt/helm/mysql  中
values.yaml  配置文件中的

busybox:
  image: "busybox"
  tag: "1.32"

字段的对应的值

.Values   字段是  values.yaml文件中的
template  字段是  templates/_helpers.tpl  文件中的
.Chart    表示     Chart.yaml  文件中的字段值
include   表示     _helpers.tpl 文件中的对应

基于原有的软件包进行修改

##拉取软件包
helm pull bitnami/apache
tar xf apache-10.0.5.tgz

在这里插入图片描述

自建软件包

##自建软件
helm create test01

#在目录中会包含一些需要的文件
##定义基本的信息

vim Chart.yaml


apiVersion: v2
name: test01
description: this is a test

type: application

version: 0.0.1

appVersion: "v1"
##定义 deployment 资源配置模板的变量的值

vim values.yaml

#定义镜像相关
image:
  repository: soscscs/myapp
  pullPolicy: Always
  tag: "v1"

#定义副本数
replicaCount: 2

#定义 resources
  limits:
    cpu: 500m
    memory: 512Mi
  requests:
    cpu: 100m
    memory: 128Mi

在这里插入图片描述

在这里插入图片描述

#定义  service 资源的配置

#定义类型
vim values.yaml

service:
  type: ClusterIP
  port: 8080

在这里插入图片描述

##查看配置是否错误
helm lint test01/

在这里插入图片描述

##打包软件包
helm package test01/

##用软件包创建
helm install test-demo1 -n test test01-0.0.1.tgz

在这里插入图片描述

在这里插入图片描述

软件包升级

#定义  service 资源的配置

#定义类型
vim values.yaml
  tag: "v2"

service:
  type: NodePort
  nodePort: 30080
  port: 8080
##修改配置模板文件

vim templates/service.yaml

添加
nodePort: {{ .Values.service.nodePort }}
##查看配置是否错误
helm lint test01/

##打包软件包
helm package test01/

在这里插入图片描述

##利用新的软件包进行升级
helm upgrade -n test test-demo1 test01-0.0.2.tgz

在这里插入图片描述

在这里插入图片描述

软件包升级和创建ingress

##先安装ingress控制器
##创建ingress资源

vim values.yaml


ingress:
  enabled: true
  className: "nginx"
  annotations: {}
    # kubernetes.io/ingress.class: nginx
    # kubernetes.io/tls-acme: "true"
  hosts:
    - host: www.a.com
      paths:
        - path: /
          pathType: Prefix
##超级头痛的 ingress 内部访问错误

kubectl get ValidatingWebhookConfiguration
kubectl delete -A ValidatingWebhookConfiguration ingress-nginx-admission
把那个该死的 admission 删掉

在这里插入图片描述

在这里插入图片描述

回滚版本

##查看版本
helm history -n test test-demo1

##回滚版本
helm rollback -n test test-demo1 1

在这里插入图片描述

在这里插入图片描述

仓库关联

部署harbor

##事先部署docker  harbor仓库
修改配置文件
##首先,先修改   daemon.json  配置文件
##所有装有  docker的节点都要修改

vim /etc/docker/daemon.json

{
  "insecure-registries": ["http://192.168.242.67"],   
    ##注意在末尾添加  ,
    
  "registry-mirrors": ["镜像加速URL"]
}


##重启Docker服务
systemctl restart docker 
##修改  harbor  配置文件

cd /opt/harbor

vim  harbor.yml


---第5行---
hostname: 192.168.242.67

---第13行---
注释掉https的配置项

---第27行
harbor_admin_password: Harbor12345
##记住harbor的密码

---第70行
absolute_url: enabled
##安装 harbor
./install.sh --with-clair --with-chartmuseum

在这里插入图片描述

安装 push 插件

##离线安装

wget https://github.com/chartmuseum/helm-push/releases/download/v0.8.1/helm-push_0.8.1_linux_amd64.tar.gz
##移动软件

mkdir -p ~/.local/share/helm/plugins/helm-push

tar -zxvf helm-push_0.8.1_linux_amd64.tar.gz -C ~/.local/share/helm/plugins/helm-push

cd ~/.local/share/helm/plugins/helm-push
##添加仓库
helm repo add harbor http://192.168.242.69:85/chartrepo/test01 --username=admin --password=Harbor12345

在这里插入图片描述

##上传 包到仓库中
helm push test01-0.0.1.tgz harbor

在这里插入图片描述

在这里插入图片描述

总结

  • Helm 是K8S的软件包(Chart包)管理器
  • 可以实现将软件应用所有所需的资源配置打包在一起,资源配置还能实现高度的可配置化,并可以通过单个helm命令一键管理部署
  • Helm 的三大概念:Chart(软件包) Release(基于Chart运行的实例) Repository(存放Chart的仓库)
  • Helm 仓库管理命令:
helm repo list                               #查看chart仓库列表
          add <仓库名称> <仓库URL地址>          #添加chart仓库
          update                             #更新chart仓库
          remove <仓库名称>                    #删除chart仓库
helm search repo <仓库名称>                   #查看仓库中可用的chart包列表
helm search repo <仓库名/软件包> -l            #查看仓库中此软件包的所有历史版本列表
helm show chart <仓库名/软件包>               #查看chart软件包的基本概要信息
helm show all <仓库名/软件包>                 #查看chart软件包的所有详细信息
##Helm 的包安装、卸载命令:

helm install <实例名>  <仓库名/软件包>  -n <命名空间> [--version=<chart版本>]    #根据chart包安装实例

helm ls|list  -n <命名空间>                                                  #查看指定命名空间下的实例列表

helm status <实例名> -n <命名空间>                                            #查看实例的状态

helm uninstall <实例名> -n <命名空间>                                          #卸载实例
Helm chart软件包管理命令:
helm pull <仓库名/软件包>                      #从仓库拉取chart压缩包
helm create  <chart名称>                       #创建一个chart目录
helm lint <chart目录>                          #检查chart配置语法
helm package <chart包目录>                     #打包成chart压缩包
helm upgrade <实例名>  <chart包>  -n <命名空间>     #升级实例
helm history <实例名>  -n <命名空间>                #查看实例的历史版本列表
helm rollback <实例名> <版本序号> -n <命名空间>     #回滚实例到指定历史版本
helm repo add <私有仓库名> <私钥仓库地址> --username= --password= #添加chart私钥仓库,harbor私钥仓库地址格式为:http://私钥仓库URL地址/chartrepo/项目名

helm push <chart包> <私有仓库名>        #推送chart包到私钥仓库
  • chart包的关键组成:

  • Chart.yaml:描述chart的元信息,包括chart名称(name)、chart版本(version)、应用版本(appVersion)、chart api接口(apiVersion)等

  • templates目录:目录里存放部署应用所需要的各种资源对象的yaml配置模板文件+

    • values.yaml:存储 templates目录中yaml配置模板文件中变量的值
      (yaml配置模板文件变量 {{ .Values.image.repository }} 即对应着 values.yaml 文件中 image.repository 字段的值)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Helm Charts 是 Kubernetes 的一种包管理工具,用于将 Kubernetes 应用程序的部署、配置和管理打包成可重复使用的包。使用 Helm Charts 可以大大简化 Kubernetes 应用程序的部署和管理。 以下是 Helm Charts 的学习文档: 1. Helm 官方文档:https://helm.sh/docs/ Helm 官方文档提供了 Helm 的概述、安装、使用、开发等方面的详细介绍,是学习 Helm 的最佳资源。 2. Helm Charts 官方文档:https://helm.sh/docs/topics/charts/ Helm Charts 官方文档介绍了 Helm Charts 的结构、模板、依赖关系、值文件等方面的内容,可以帮助你了解如何编写和使用 Helm Charts。 3. Kubernetes 官方文档:https://kubernetes.io/docs/home/ Kubernetes 官方文档提供了 Kubernetes 的概述、安装、使用、开发等方面的详细介绍,是学习 Kubernetes 的最佳资源。 4. Helm Tutorials:https://helm.sh/docs/topics/tutorials/ Helm Tutorials 提供了一系列的教程,包括如何使用 Helm 安装应用程序、如何编写自己的 Helm Charts 等方面的内容。 5. Helm Hub:https://hub.helm.sh/ Helm Hub 是一个 Helm Charts 的社区库,包含了大量的 Helm Charts,可以帮助你快速找到并部署所需要的应用程序。 6. Helm Best Practices:https://helm.sh/docs/chart_best_practices/ Helm Best Practices 提供了一系列的最佳实践,包括如何编写高质量的 Helm Charts、如何管理 Helm Charts 的版本等方面的内容,可以帮助你编写更好的 Helm Charts。 总之,学习 Helm Charts 需要掌握 Helm 的基本概念和使用方法,熟悉 Kubernetes 的基本概念和使用方法,并且有一定的编写经验。通过不断地学习和实践,你可以成为一个熟练的 Helm Charts 开发者。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

夜海赤竹

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值