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

文章目录

  • 一. Helm 概述
    • 1.1 Helm 简介
    • 1.2 Helm重要概念
    • 1.3Helm2 组件
    • 1.4Helm2 工作原理
    • 1.5 Helm2与Helm3区别
  • 二.Helm部署
  • 三.Helm常用命令
    • 3.1 chart仓库管理
    • 3.2 查看 chart信息
    • 3.3 安装chart
    • 3.4 查询release
    • 3.5 删除 release
  • 四.Heml自定义模板
    • 4.1 chart包
    • 4.2 创建自定义chart
      • 4.2.1 chart文件介绍
      • 4.2.2 修改 chart
      • 4.2.3 打包chart
      • 4.2.4 部署chart
    • 4.3 升级chart
    • 4.4 回滚
  • 五.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 工作原理

【云原生--Kubernetes】Helm 工具安装_第1张图片

  • 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

【云原生--Kubernetes】Helm 工具安装_第2张图片

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

#删除 incubator 仓库
helm repo remove incubator

【云原生--Kubernetes】Helm 工具安装_第3张图片

3.2 查看 chart信息


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

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

【云原生--Kubernetes】Helm 工具安装_第4张图片
【云原生--Kubernetes】Helm 工具安装_第5张图片

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 随机生成一个名字

【云原生--Kubernetes】Helm 工具安装_第6张图片
【云原生--Kubernetes】Helm 工具安装_第7张图片
在这里插入图片描述

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

【云原生--Kubernetes】Helm 工具安装_第8张图片

3.4 查询release

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

【云原生--Kubernetes】Helm 工具安装_第9张图片
【云原生--Kubernetes】Helm 工具安装_第10张图片

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

【云原生--Kubernetes】Helm 工具安装_第11张图片
可以看到,一个 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

【云原生--Kubernetes】Helm 工具安装_第12张图片
查看deploment

cat nginx/templates/deployment.yaml

【云原生--Kubernetes】Helm 工具安装_第13张图片
在 templates 目录下 yaml 文件模板中的变量(go template语法)的值默认是在 nginx/values.yaml 中定义的,只需要修改 nginx/values.yaml 的内容,也就完成了 templates 目录下 yaml 文件的配置。

查看values

cat nginx/values.yaml | grep repository

【云原生--Kubernetes】Helm 工具安装_第14张图片
以上变量值是在 create chart 的时候就自动生成的默认值,你可以根据实际情况进行修改。

4.2.2 修改 chart

vim nginx/Chart.yaml
【云原生--Kubernetes】Helm 工具安装_第15张图片
vim nginx/values.yaml
【云原生--Kubernetes】Helm 工具安装_第16张图片
【云原生--Kubernetes】Helm 工具安装_第17张图片

4.2.3 打包chart

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

【云原生--Kubernetes】Helm 工具安装_第18张图片

4.2.4 部署chart

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

【云原生--Kubernetes】Helm 工具安装_第19张图片
测试:
需要安装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

【云原生--Kubernetes】Helm 工具安装_第20张图片
主机域名映射

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

访问测试:

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

【云原生--Kubernetes】Helm 工具安装_第21张图片

4.3 升级chart

再次修改values.yaml,测试升级
vim nginx/values.yaml
【云原生--Kubernetes】Helm 工具安装_第22张图片
vim nginx/templates/service.yaml
【云原生--Kubernetes】Helm 工具安装_第23张图片
升级

helm upgrade nginx nginx

【云原生--Kubernetes】Helm 工具安装_第24张图片
访问测试:
在这里插入图片描述

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'

【云原生--Kubernetes】Helm 工具安装_第25张图片

五.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          #日志路径

【云原生--Kubernetes】Helm 工具安装_第26张图片

#安装带有 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”,访问级别勾选 “公开”,点击 “确定” 按钮,创建新项目
【云原生--Kubernetes】Helm 工具安装_第27张图片

添加仓库

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

【云原生--Kubernetes】Helm 工具安装_第28张图片
推送 chart 到 harbor 中

cd /opt/helm
helm push nginx harbor

【云原生--Kubernetes】Helm 工具安装_第29张图片
在Harbor仓库查看 chart_repo 项目中的 Helm Charts
【云原生--Kubernetes】Helm 工具安装_第30张图片

你可能感兴趣的:(K8s,kubernetes,云原生,容器,docker)