【云原生--Kubernetes】Helm 工具安装

一. Helm 概述

1.1 Helm 简介

在没使用 helm 之前,向 kubernetes 部署应用,我们要依次部署 deployment、svc 等,步骤较繁琐。 况且随着很多项目微服务化,复杂的应用在容器中部署以及管理显得较为复杂,helm 通过打包的方式,支持发布的版本管理和控制, 很大程度上简化了 Kubernetes 应用的部署和管理。

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

我们可以将Helm看作Kubernetes下的apt-get/yum。Helm是Deis (https://deis.com/) 开发的一个用于kubernetes的包管理器。每个包称为一个Chart,一个Chart是一个目录(一般情况下会将目录进行打包压缩,形成name-version.tgz格式的单一文件,方便传输和存储)。

1.2 Helm重要概念

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

  • Chart:Helm 的软件包,采用 TAR 格式。类似于 APT 的 DEB 包或者 YUM 的 RPM 包,其包含了一组定义 Kubernetes 资源相关的 YAML 文件。
  • Repository(仓库):Helm 的软件仓库,Repository 本质上是一个 Web 服务器,该服务器保存了一系列的 Chart 软件包以供用户下载,并且提供了一个该 Repository 的 Chart 包的清单文件以供查询。Helm 可以同时管理多个不同的 Repository。
  • Release:使用 helm install 命令在 Kubernetes 集群中部署的 Chart 称为 Release。可以理解为 Helm 使用 Chart 包部署的一个应用实例。一个 chart 通常可以在同一个集群中安装多次。每一次安装都会创建一个新的 release。

PS:以 MySQL chart 为例,如果你想在你的集群中运行两个数据库,你可以安装该 chart 两次。每一个数据库都会拥有它自己的 release 和 release name。可以将 release 想象成应用程序发布的版本号。

1.3Helm2 组件

在 Helm 中有两个主要的组件,即 Helm 客户端和 Tiller 服务器

  • Helm客户端
    是一个供终端用户使用的命令行工具
    客户端负责如下的工作:

  • 本地 chart 开发

  • 管理仓库

  • 与 Tiller 服务器交互(发送需要被安装的 charts、请求关于发布版本的信息、请求更新或者卸载已安装的发布版本)

  • Tiller服务端
    Tiller 是 helm 的服务器端,一般运行于 kubernetes 集群之上,定义 tiller 的 ServiceAccount,并通过 ClusterRoleBinding 将其绑定至集群管理员角色 cluster-admin,从而使得它拥有集群级别所有的最高权限

Tiller 服务器负责如下的工作:

  • 监听来自于 Helm 客户端的请求
  • 组合 chart 和配置来构建一个发布
  • 在 Kubernetes 中安装,并跟踪后续的发布
  • 通过与 Kubernetes 交互,更新或者 chart

1.4Helm2 工作原理

在这里插入图片描述

  • Chart Install 过程:
  1. Helm从指定的目录或者tgz文件中解析出Chart结构信息
  2. Helm将指定的Chart结构和Values信息通过gRPC传递给Tiller
  3. Tiller根据Chart和Values生成一个Release
  4. Tiller将Release发送给Kubernetes用于生成Release
  • Chart Update过程:
  1. Helm从指定的目录或者tgz文件中解析出Chart结构信息
  2. Helm将要更新的Release的名称和Chart结构,Values信息传递给Tiller
  3. Tiller生成Release并更新指定名称的Release的History
  4. Tiller将Release发送给Kubernetes用于更新Release
  • Chart Rollback过程:
  1. Helm将要回滚的Release的名称传递给Tiller
  2. Tiller根据Release的名称查找History
  3. Tiller从History中获取上一个Release
  4. Tiller将上一个Release发送给Kubernetes用于替换当前Release

1.5 Helm2与Helm3区别

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

二.Helm部署

官方手册:https://helm.sh/zh/docs/

下载二进制 Helm client 安装包:https://github.com/helm/helm/releases?page=2
我这儿使用的是3.6.0的版本

tar -zxvf helm-v3.6.0-linux-amd64.tar.gz
mv linux-amd64/helm /usr/local/bin/helm
helm version
#命令补全
source <(helm completion bash)

在这里插入图片描述

三.Helm常用命令

3.1 chart仓库管理

#添加常用的 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

#更新仓库、列表
helm repo update  
helm repo list

在这里插入图片描述

#查看 stable 仓库可用的 charts 列表,类似于yum list
helm search repo stable

#删除 incubator 仓库
helm repo remove incubator

在这里插入图片描述

3.2 查看 chart信息


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

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

在这里插入图片描述


在这里插入图片描述

3.3 安装chart

helm install my-redis bitnami/redis [-n default]   
#指定 release 的名字为 my-redis,-n指定部署到k8s的namespace,若不指定则为默认名称空间

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

在这里插入图片描述


在这里插入图片描述


在这里插入图片描述

#查看安装信息
 kubectl get pod,svc

在这里插入图片描述

3.4 查询release

#查询所有release
helm ls 
helm list
#查看指定的 release 状态
helm status my-redis         

在这里插入图片描述


在这里插入图片描述

3.5 删除 release

helm uninstall my-redis 

在这里插入图片描述

四.Heml自定义模板

4.1 chart包

charts 除了可以在 repo 中下载,还可以自己自定义,创建完成后通过 helm 部署到 k8s。

mkdir /opt/helm
cd /opt/helm
helm pull stable/mysql
tar xf mysql-1.6.9.tgz
yum install -y tree
tree mysql

在这里插入图片描述


可以看到,一个 chart 包就是一个文件夹的集合,文件夹名称就是 chart 包的名称。
chart 是包含至少两项内容的helm软件包

  1. 软件包自描述文件 Chart.yaml,这个文件必须有 name 和 version(chart版本) 的定义
  2. 一个或多个模板,其中包含 Kubernetes 清单文件:
  • NOTES.txt:chart 的“帮助文本”,在用户运行 helm install 时显示给用户
  • deployment.yaml:创建 deployment 的资源清单文件
  • service.yaml:为 deployment 创建 service 的资源清单文件
  • ingress.yaml: 创建 ingress 对象的资源清单文件
  • _helpers.tpl:放置模板助手的地方,可以在整个 chart 中重复使用

4.2 创建自定义chart

4.2.1 chart文件介绍

helm create nginx
tree nginx

在这里插入图片描述


查看deploment

cat nginx/templates/deployment.yaml

在这里插入图片描述


在 templates 目录下 yaml 文件模板中的变量(go template语法)的值默认是在 nginx/values.yaml 中定义的,只需要修改 nginx/values.yaml 的内容,也就完成了 templates 目录下 yaml 文件的配置。

查看values

cat nginx/values.yaml | grep repository

在这里插入图片描述


以上变量值是在 create chart 的时候就自动生成的默认值,你可以根据实际情况进行修改。

4.2.2 修改 chart

vim nginx/Chart.yaml

在这里插入图片描述


vim nginx/values.yaml

在这里插入图片描述


在这里插入图片描述

4.2.3 打包chart

#检查依赖和模板配置是否正确
helm lint nginx
#打包
helm package nginx 

在这里插入图片描述

4.2.4 部署chart

#使用 --dry-run 参数验证 Chart 的配置,并不执行安装
helm install nginx ./nginx --dry-run --debug 
#安装,若需指定名称空间,使用-n
helm install nginx ./nginx-0.1.0.tgz

在这里插入图片描述


测试:
需要安装ingress-nginx,具提操作请看上篇文章

wget https://gitee.com/mirrors/ingress-nginx/raw/nginx-0.30.0/deploy/static/mandatory.yaml
wget https://gitee.com/mirrors/ingress-nginx/raw/nginx-0.30.0/deploy/static/provider/baremetal/service-nodeport.yaml
kubectl apply -f mandatory.yaml
kubectl apply -f service-nodeport.yaml

编写测试文件

kubectl get pod
kubectl exec -it nginx-657bdbb8d4-st4x6 bash
echo "this is helm chart" > /usr/share/nginx/html/index.html

在这里插入图片描述


主机域名映射

echo "192.168.48.14 www.xiayan.com" >> /etc/hosts

访问测试:

#获取ingress映射的端口
kubectl get svc -n ingress-nginx

在这里插入图片描述

4.3 升级chart

再次修改values.yaml,测试升级
vim nginx/values.yaml

在这里插入图片描述


vim nginx/templates/service.yaml

在这里插入图片描述


升级

helm upgrade nginx nginx

在这里插入图片描述


访问测试:

在这里插入图片描述

4.4 回滚

#查看指定chart的历史版本
helm history nginx
#回滚到指定版本
helm rollback nginx 1 

在这里插入图片描述


通常情况下,在配置好 templates 目录下的 kubernetes 清单文件后,后续维护一般只需要修改 Chart.yaml 和 values.yaml 即可。

在命令行使用 --set 指定参数来部署(install,upgrade)release
:此参数值会覆盖掉在 values.yaml 中的值,如需了解其它的预定义变量参数,可查看 helm 官方文档。

helm upgrade nginx nginx --set image.tag='1.15'

在这里插入图片描述

五.Helm仓库

helm 可以使用 harbor 作为本地仓库,将自定义的 chart 推送至 harbor 仓库。

  • 安装harbor
#上传 harbor-offline-installer-v1.9.1.tgz 和 docker-compose 文件到 /opt 目录
cd /opt
cp docker-compose /usr/local/bin/
chmod +x /usr/local/bin/docker-compose
tar zxf harbor-offline-installer-v1.9.1.tgz
cd harbor

vim harbor.yml

hostname: 192.168.48.14
harbor_admin_password: Harbor12345
data_volume: /data                     #数据存储路径,自动创建
chart:
  absolute_url: enabled                #在chart中启用绝对url
log:
  level: info
  local:
    rotate_count: 50
    rotate_size: 200M
    location: /var/log/harbor          #日志路径

在这里插入图片描述

#安装带有 Clair service 和 chart 仓库服务的 Harbor
./install.sh --with-clair --with-chartmuseum

安装 push 插件

#在线安装
helm plugin install https://github.com/chartmuseum/helm-push

#离线安装
wget https://github.com/chartmuseum/helm-push/releases/download/v0.8.1/helm-push_0.8.1_linux_amd64.tar.gz

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

登录 Harbor WEB UI 界面,创建一个新项目
浏览器访问:http://192.168.48.14 ,默认的管理员用户名和密码是 admin/Harbor12345
点击 “+新建项目” 按钮
填写项目名称为 “chart_repo”,访问级别勾选 “公开”,点击 “确定” 按钮,创建新项目

在这里插入图片描述

添加仓库

helm repo add harbor http://192.168.48.14/chartrepo/chart_repo --username=admin --password=Harbor12345
#这里的 repo 的地址是<Harbor URL>/chartrepo/<项目名称>,Harbor 中每个项目是分开的 repo。如果不提供项目名称, 则默认使用 library 这个项目。
#查看仓库地址
helm repo ls

在这里插入图片描述


推送 chart 到 harbor 中

cd /opt/helm
helm push nginx harbor

在这里插入图片描述


在Harbor仓库查看 chart_repo 项目中的 Helm Charts

在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


学习编程是顺着互联网的发展潮流,是一件好事。新手如何学习编程?其实不难,不过在学习编程之前你得先了解你的目的是什么?这个很重要,因为目的决定你的发展方向、决定你的发展速度。
IT行业是什么工作做什么?IT行业的工作有:产品策划类、页面设计类、前端与移动、开发与测试、营销推广类、数据运营类、运营维护类、游戏相关类等,根据不同的分类下面有细分了不同的岗位。
女生学Java好就业吗?女生适合学Java编程吗?目前有不少女生学习Java开发,但要结合自身的情况,先了解自己适不适合去学习Java,不要盲目的选择不适合自己的Java培训班进行学习。只要肯下功夫钻研,多看、多想、多练
Can’t connect to local MySQL server through socket \'/var/lib/mysql/mysql.sock问题 1.进入mysql路径
oracle基本命令 一、登录操作 1.管理员登录 # 管理员登录 sqlplus / as sysdba 2.普通用户登录
一、背景 因为项目中需要通北京网络,所以需要连vpn,但是服务器有时候会断掉,所以写个shell脚本每五分钟去判断是否连接,于是就有下面的shell脚本。
BETWEEN 操作符选取介于两个值之间的数据范围内的值。这些值可以是数值、文本或者日期。
假如你已经使用过苹果开发者中心上架app,你肯定知道在苹果开发者中心的web界面,无法直接提交ipa文件,而是需要使用第三方工具,将ipa文件上传到构建版本,开...
下面的 SQL 语句指定了两个别名,一个是 name 列的别名,一个是 country 列的别名。**提示:**如果列名称包含空格,要求使用双引号或方括号:
在使用H5混合开发的app打包后,需要将ipa文件上传到appstore进行发布,就需要去苹果开发者中心进行发布。​
+----+--------------+---------------------------+-------+---------+
数组的声明并不是声明一个个单独的变量,比如 number0、number1、...、number99,而是声明一个数组变量,比如 numbers,然后使用 nu...
第一步:到appuploader官网下载辅助工具和iCloud驱动,使用前面创建的AppID登录。
如需删除表中的列,请使用下面的语法(请注意,某些数据库系统不允许这种在数据库表中删除列的方式):
前不久在制作win11pe,制作了一版,1.26GB,太大了,不满意,想再裁剪下,发现这次dism mount正常,commit或discard巨慢,以前都很快...
赛门铁克各个版本概览:https://knowledge.broadcom.com/external/article?legacyId=tech163829
实测Python 3.6.6用pip 21.3.1,再高就报错了,Python 3.10.7用pip 22.3.1是可以的
Broadcom Corporation (博通公司,股票代号AVGO)是全球领先的有线和无线通信半导体公司。其产品实现向家庭、 办公室和移动环境以及在这些环境...
发现个问题,server2016上安装了c4d这些版本,低版本的正常显示窗格,但红色圈出的高版本c4d打开后不显示窗格,
TAT:https://cloud.tencent.com/document/product/1340