16.helm入门

一、介绍

Helm是Kubernetes的一个包管理工具,用来简化Kubernetes应用的部署和管理。可以把Helm比作CentOS的yum工具。

yum不光要解决包之间的依赖关系,还要提供具体的程序包。但是helm仓库里面只有配置清单文件,而没有镜像,镜像还是由镜像仓库来提供,比如hub.docker.com等;

1、基本概念

Helm有如下几个基本概念:

Chart: 是Helm管理的安装包,里面包含需要部署的安装包资源。可以把Chart比作CentOS yum使用的rpm文件。每个Chart包含下面两部分:包的基本描述文件Chart.yaml,放在templates目录中的一个或多个Kubernetes manifest文件模板

Release:是chart的部署实例,一个chart在一个Kubernetes集群上可以有多个release,即这个chart可以被安装多次

Repository:chart的仓库,用于发布和存储chart。http/https服务器。

2、程序架构

Helm:是一个命令行下的客户端工具。主要用于 Kubernetes 应用程序 Chart 的创建、打包、发布以及创建和管理本地和远程的 Chart 仓库。不是必须部署在k8s集群主机之上。

Tiller:是 Helm 的服务端,部署在 Kubernetes 集群中,也可运行在集群之外,但运行在集群之外很麻烦。Tiller 用于接收 Helm 的请求,并根据 Chart 生成 Kubernetes 的部署文件( Helm 称为 Release ),然后提交给 Kubernetes 创建应用。Tiller 还提供了Release 的升级、删除、回滚等一系列功能。

helm提供了一个应用所需要的所有清单文件。比如对于一个nginx,我们需要一个deployment的清单文件、一个service的清单文件、一个hpa的清单文件。我们把这三个文件打包到一起,就是一个应用程序的程序包,我们称之为Chart。

Helm把Kubernetes资源(比如deployments、services或 ingress等) 打包到一个chart中,而chart被保存到chart仓库。通过chart仓库可用来存储和分享chart。

3、工作流程

helm是工作在k8s集群之外的,是一个命令行客户端工具。helm不直接操作apiserver,而是和Tiller交互。Tiller再和apiserver交互,最后由Apiserver把chart使用config赋值(值文件),最后部署成为release。

在helm工作中,helm先去检查chart是否存在,存在就把chart下载到helm本机当前用户的家目录下。然后helm把chart交给tiller,tiller再和api server交互。api server一旦把chart部署在k8s集群上,就不再叫chart了,而叫release。

所以,一个chart赋值不同,完全可以部署出多个release出来的,所以我们可以把chart看做是一个安装包的模板。

如果发现chart更新了,helm就自动滚动更新,而且helm还支持一键回滚的操作。

 

二、部署

GitHub:https://github.com/helm/helm

官网:https://helm.sh/docs/using_helm/#installing-helm

[root@master helm]# wget https://get.helm.sh/helm-v2.14.3-linux-amd64.tar.gz
[root@master helm]# tar xf helm-v2.14.3-linux-amd64.tar.gz

1、安装helm客户端

[root@master helm]# mv linux-amd64/helm /usr/local/bin/helm
[root@master helm]# helm help

2、安装tiller服务端

安装Tiller的最简单方式是helm init, 该命令会检查helm本地环境设置是否正确(会使用kubectl的kube-config配置文件),helm init会连接kubectl默认连接的kubernetes集群(可以通过kubectl config view查看),一旦连接集群成功,tiller会被安装到kube-system namespace中。

(1)Tiller运行在K8s集群之上,也必须拥有集群的管理权限,也就是需要一个serviceaccount,创建一个clusterrolebinding到cluster-admin

rbac配置示例文件:https://github.com/helm/helm/blob/master/docs/rbac.md

 

[root@master helm]# kubectl apply -f rbac.yaml
[root@master helm]# helm init --service-account tiller --history-max 200

拉取镜像,添加仓库失败了,因为网络问题。

[root@master ~]# helm reset  # 重置
[root@master ~]# helm init -i registry.cn-hangzhou.aliyuncs.com/google_containers/tiller:v2.14.3 --service-account=tiller --stable-repo-url https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts  #指定了安装时使用的tiller镜像的地址,同时指定了默认的chart仓库的地址。
[root@master ~]# helm version  # tiller运行成功,并且版本对应

Tips:chart仓库用来存储和分享打包的chart,分为公共仓库和私有仓库,其中官方仓库由Kubernetes Charts维护,地址是https://github.com/helm/charts  --- https://kubernetes-charts.storage.googleapis.com/。但是在国内访问官方仓库,访问不了或者慢。所以在国内环境中,公共仓库推荐使用阿里云chart仓库,地址为https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts

三、使用helm

简化了部署的使用,但并没有降低使用的门槛及难度,因为没有学习之前的配置清单编写,就看不懂它的配置清单,无法定性定制化。

1、简单使用

官方可用的Chart仓库列表:https://hub.kubeapps.com  # 可以搜索很多仓库的chart

[root@master ~]# helm repo list  # 查看默认仓库,stable 是官方仓库,local 是用户存放自己开发的chart的本地仓库。

[root@master ~]# helm search redis  #查找chart

[root@master ~]# helm inspect stable/redis  #查看某个chart的详细信息
[root@master ~]# helm install –name mem1 stable/memcached  # 安装

[root@master ~]# helm status mem1  # 查看release状态信息

[root@master ~]# kubectl describe pod mem1-memcached-2

# 没有部署成功,是因为集群规模问题。

[root@master ~]# helm delete mem1  # 删除指定release;--purge永久删除,release名字可以重新被使用
[root@master ~]# helm list –a # 列出所有release,包括已删除的。

[root@master example]# helm fetch stable/redis  # 下载一个chart

2、Helm常用命令

Release管理,chart管理

helm help
helm -h
helm常用命令:
- helm search:    搜索charts
- helm fetch:     下载charts到本地目录
- helm install:   安装charts
- helm list:      列出charts的所有版本
用法:
  helm [command]

命令可用选项:
  completion  为指定的shell生成自动补全脚本(bash或zsh)
  create      创建一个新的charts
  delete      删除指定版本的release
  dependency  管理charts的依赖
  fetch       下载charts并解压到本地目录
  get         下载一个release
  history     release历史信息
  home        显示helm的家目录
  init        在客户端和服务端初始化helm
  inspect     查看charts的详细信息
  install     安装charts
  lint        检测包的存在问题
  list        列出release
  package     将chart目录进行打包
  plugin      add(增加), list(列出), or remove(移除) Helm 插件
  repo        add(增加), list(列出), remove(移除), update(更新), and index(索引) chart仓库
  reset       卸载tiller
  rollback    release版本回滚
  search      关键字搜索chart
  serve       启动一个本地的http server
  status      查看release状态信息
  template    本地模板
  test        release测试
  upgrade     release更新
  verify      验证chart的签名和有效期
  version     打印客户端和服务端的版本信息

3、chart目录结构

使用inspect就会把chart下载到本地,所有的chart要部署成release都会先下载到本地。

 

[root@master archive]# tar xf redis-1.1.15.tgz

Chart.yaml           #chart元数据描述信息(版本...)
templates            #资源定义清单模板文件,使用了大量的go模板语法
values.yaml          #为 templates中的资源定义清单设置自定义属性值
requirements.yaml    #当前chart是否依赖其他chart,这个文件是可选的。
charts/              #里面放置的是当前chart所要依赖的其他chart,这个是可选的

#可以通过chart官方手册,来了解以上每项的详细含义:https://docs.helm.sh/developing_charts/#charts

4、创建自定义chart

可参考文档:https://www.cnblogs.com/breezey/p/9398927.html

[root@master example]# helm create myapp  # 生成基础chart示例性文件

按照需求修改相应的值,如果有需要依赖的chart也可以自己编写requirement.yaml里,或者直接把需要依赖的chart放在charts目录里。

此处就修改几个基础值示例:

[root@master myapp]# vim Chart.yaml
[root@master myapp]# vim values.yaml

[root@master myapp]# helm lint .  # 检查语法
[root@master myapp]# helm lint ../myapp/

[root@master example]# helm  package myapp/

[root@master example]# helm serve  # 把当前目录启动为本地库

[root@master example]# helm search myapp

 

[root@master ~]# helm install --name=myapp1 local/myapp # 从本地库安装myapp
[root@master ~]# helm status myapp1

原文地址:https://www.cnblogs.com/cmxu/p/12259203.html