每个成功的软件平台都有一个优秀的打包系统,比如 Debian、Ubuntu 的 apt,Redhat、Centos 的 yum。而 Helm 则是 Kubernetes 上的包管理器。

本章我们将讨论为什么需要 Helm,它的架构和组件,以及如何使用 Helm。

1.Why Helm

Helm 到底解决了什么问题?为什么 Kubernetes 需要 Helm?

答案是:Kubernetes 能够很好地组织和编排容器,但它缺少一个更高层次的应用打包工具,而 Helm 就是来干这件事的。

先来看个例子。
比如对于一个 MySQL 服务, Kubernetes 需要部署下面这些对象:

1.Service,让外界能够访问到 MySQL。

2.Secret,定义 MySQL 的密码。

3.PersistentVolumeClaim,为 MySQL 申请持久化存储空间。

4.Deployment,部署 MySQL Pod,并使用上面的这些支持对象。

我们可以将上面这些配置保存到对象各自的文件中,或者集中写进一个配置文件,然后通过 kubectl apply -f 部署。

到目前为止,Kubernetes 对服务的部署支持得都挺好,如果应用只由一个或几个这样的服务组成,上面的部署方式完全足够了。

但是,如果我们开发的是微服务架构的应用,组成应用的服务可能多达十个甚至几十上百个,这种组织和管理应用的方式就不好使了:

  1. 很难管理、编辑和维护如此多的服务。每个服务都有若干配置,缺乏一个更高层次的工具将这些配置组织起来。

  2. 不容易将这些服务作为一个整体统一发布。部署人员需要首先理解应用都包含哪些服务,然后按照逻辑顺序依次执行 kubectl apply。即缺少一种工具来定义应用与服务,以及服务与服务之间的依赖关系。

  3. 不能高效地共享和重用服务。比如两个应用都要用到 MySQL 服务,但配置的参数不一样,这两个应用只能分别拷贝一套标准的 MySQL 配置文件,修改后通过 kubectl apply 部署。也就是说不支持参数化配置和多环境部署。

  4. 不支持应用级别的版本管理。虽然可以通过 kubectl rollout undo 进行回滚,但这只能针对单个 Deployment,不支持整个应用的回滚。

  5. 不支持对部署的应用状态进行验证。比如是否能通过预定义的账号访问 MySQL。虽然 Kubernetes 有健康检查,但那是针对单个容器,我们需要应用(服务)级别的健康检查。

Helm 能够解决上面这些问题,Helm 帮助 Kubernetes 成为微服务架构应用理想的部署平台。

2.Helm架构

Helm 有两个重要的概念:chart 和 release。

chart 是创建一个应用的信息集合,包括各种 Kubernetes 对象的配置模板、参数定义、依赖关系、文档说明等。chart 是应用部署的自包含逻辑单元。可以将 chart 想象成 apt、yum 中的软件安装包。

release 是 chart 的运行实例,代表了一个正在运行的应用。当 chart 被安装到 Kubernetes 集群,就生成一个 release。chart 能够多次安装到同一个集群,每次安装都是一个 release。

Helm 是包管理工具,这里的包就是指的 chart。Helm 能够:

  1. 从零创建新 chart。

  2. 与存储 chart 的仓库交互,拉取、保存和更新 chart。

  3. 在 Kubernetes 集群中安装和卸载 release。

  4. 更新、回滚和测试 release。

Helm 包含两个组件:Helm 客户端 和 Tiller 服务器。

Helm 客户端是终端用户使用的命令行工具,用户可以:

  1. 在本地开发 chart。

  2. 管理 chart 仓库。

  3. 与 Tiller 服务器交互。

  4. 在远程 Kubernetes 集群上安装 chart。

  5. 查看 release 信息。

  6. 升级或卸载已有的 release。

Tiller 服务器运行在 Kubernetes 集群中,它会处理 Helm 客户端的请求,与 Kubernetes API Server 交互。Tiller 服务器负责:

  1. 监听来自 Helm 客户端的请求。

  2. 通过 chart 构建 release。

  3. 在 Kubernetes 中安装 chart,并跟踪 release 的状态。

  4. 通过 API Server 升级或卸载已有的 release。

简单的讲:Helm 客户端负责管理 chart;Tiller 服务器负责管理 release。

3.Helm的部署

3.1Helm 客户端

通常,我们将 Helm 客户端安装在能够执行 kubectl 命令的节点上,只需要下面一条命令:(需要FQ)

curl https://raw.githubusercontent.com/kubernetes/helm/master/scripts/get | bash

执行 helm version 验证。

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

目前只能查看到客户端的版本,服务器还没有安装。

3.2Tiller 服务器

Tiller 服务器安装非常简单,只需要执行 helm init

Tiller 本身也是作为容器化应用运行在 Kubernetes Cluster 中的:

查看日志

kubectl describe pod --namespace=kube-system

没法FQ镜像pull失败,于是在网上找了个镜像压缩包

根据日志tiller需要版本v2.11.0而现在我们这个是v2.9.0需要改一下tag

docker tag gcr.io/kubernetes-helm/tiller:v2.9.0 gcr.io/kubernetes-helm/tiller:v2.11.0

将镜像打包 分发给工作节点node1 和node2

docker save  gcr.io/kubernetes-helm/tiller:v2.11.0 tiller-v2.11.0.tar

可以看到 Tiller 的 Service、Deployment 和 Pod。

现在, helm version 已经能够查看到服务器的版本信息了。

Helm 部署完毕,能***的最好用*** 下载最新的,不然在使用的时候版本不一致会出现问题。

4.Helm的使用

Helm 安装成功后,可执行 helm search 查看当前可安装的 chart。

这个列表很长,这里只截取了一部分。大家不禁会问,这些 chart 都是从哪里来的?

前面说过,Helm 可以像 apt 和 yum 管理软件包一样管理 chart。apt 和 yum 的软件包存放在仓库中,同样的,Helm 也有仓库。

Helm 安装时已经默认配置好了两个仓库:stable 和 localstable 是官方仓库,local 是用户存放自己开发的 chart 的本地仓库。

helm search 会显示 chart 位于哪个仓库,比如 local/cool-chart 和 stable/acs-engine-autoscaler

用户可以通过 helm repo add 添加更多的仓库,比如企业的私有仓库,仓库的管理和维护方法请参考官网文档 https://docs.helm.sh

与 apt 和 yum 一样,helm 也支持关键字搜索:

包括 DESCRIPTION 在内的所有信息,只要跟关键字匹配,都会显示在结果列表中。

安装 chart 也很简单,执行如下命令可以安装 MySQL。

helm install stable/mysql

如果看到如下报错,通常是因为 Tiller 服务器的权限不足。

执行如下命名添加权限:

kubectl create serviceaccount --namespace kube-system tiller
kubectl create clusterrolebinding tiller-cluster-rule --clusterrole=cluster-admin --serviceaccount=kube-system:tiller
kubectl patch deploy --namespace kube-system tiller-deploy -p '{"spec":{"template":{"spec":{"serviceAccount":"tiller"}}}}'

需要添加仓库

helm repo list    #列出所有源,当前还没有添加源
# 添加一个国内可以访问的阿里源,不过好像最近不更新了
helm repo add ali https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
如果能连外网,可以加google,f8
helm repo add google https://kubernetes-charts.storage.googleapis.com
helm repo add fabric8 https://fabric8.io/helm
# 更新源
helm repo update

无法***,只好老实的加一条阿里的仓库

输出分为三部分:

① chart 本次部署的描述信息:

NAME 是 release 的名字,因为我们没用 -n 参数指定,Helm 随机生成了一个,这里是 piquant-parrot

NAMESPACE 是 release 部署的 namespace,默认是 default,也可以通过 --namespace 指定。

STATUS 为 DEPLOYED,表示已经将 chart 部署到集群。

② 当前 release 包含的资源:Service、Deployment、Secret 和 PersistentVolumeClaim,其名字都是 fun-zorse-mysql,命名的格式为 ReleasName-ChartName

③ NOTES 部分显示的是 release 的使用方法。比如如何访问 Service,如何获取数据库密码,以及如何连接数据库等。

通过 kubectl get 可以查看组成 release 的各个对象

因为我们还没有准备 PersistentVolume,当前 release 还不可用。

helm list 显示已经部署的 release,helm delete 可以删除 release

转载于:https://www.cnblogs.com/benjamin77/p/9963250.html

k8s的应用打包工具Helm相关推荐

  1. k8s上安装并初始化Helm。minikube

    helm简介 Helm 可以理解为 Kubernetes 的包管理工具,可以方便地发现.共 享和使用为Kubernetes构建的应用. Helm 采用客户端/服务器架构,有如下组件组成: Helm C ...

  2. k8s上安装并初始化Helm,helm基础使用教程

    全栈工程师开发手册 (作者:栾鹏) 架构系列文章 helm的github地址:https://github.com/helm/helm?spm=a2c4g.11186623.2.7.Qr9c2B he ...

  3. webpack打开项目命令_webpack前端模块打包工具基本使用的详细记录(一)

    webpack简介 我们都知道,Webpack 是当下最热门的前端资源模块化管理和打包工具.它可以将许多松散的模块按照依赖和规则打包成符合生产环境部署的前端资源.还可以将按需加载的模块进行代码分隔,等 ...

  4. 镜像打包工具clonezilla

    镜像打包工具clonezilla clonezilla 百度云盘链接:https://pan.baidu.com/s/1LOEPqNE9O0Z4QJmNExlgeA 提取码:zlso 使用方法: 1. ...

  5. python 打包 .app 运行 控制台窗口_Python打包工具

    1 Python打包工具 目前在windows平台上将Python程序打包成exe文件主要有三个工具. 今天将一个Tkinter写的界面程序打包成exe文件,三个工具都试了一遍,感觉PyInstall ...

  6. linux系统打包工具,Linux 压缩、解压缩和打包工具

    前言:你是否曾经因为某个文件占用空间较大,而空间紧缺的U盘无法存放此文件.你是否曾经因为软件里有太多文件而不方便复制和携带.你是否曾因需要备份太过零散而头疼.那么基于"文件压缩和打包&quo ...

  7. Python打包工具Pyintealler打包py文件为windows exe文件过程及踩坑记录+实战例子

    Python打包工具Pyintealler打包py文件为windows exe文件过程及踩坑记录+实战例子 目录 Python打包工具Pyintealler打包py文件为windows exe文件过程 ...

  8. 用InstallShield 打包工具 打 Win32 程序 (depends.exe 用看程序都依赖了哪些dll)

    InstallShield 打包工具 1.InstallShield Limited Edition 安装教程 转载:http://www.cnblogs.com/javawebsoa/archive ...

  9. Web Bundler CheatSheet, 选择合适的构建打包工具

    题注:Web Bundler CheatSheet 属于 Awesome-CheatSheet 系列,盘点数个常用的开发打包工具清单.欢迎加入阿里南京前端团队,欢迎关注阿里南京技术专刊了解更多讯息. ...

最新文章

  1. linux文件上传,给文件或目录添加apache权限
  2. Docker selenium自动化 - 使用python操作docker,python运行、启用、停用和查询容器实例演示
  3. pandas基础(part2)--DataFrame
  4. 爆测一周,22年必看最细致代码托管工具测评
  5. mysql rpl_MySQL管理工具MySQL Utilities — mysqlrplcheck(44)
  6. 5个步骤带你入门FPGA设计流程
  7. 语言的开题报告范文_【开题系列】刘凤朝:撰写文科博士学位论文开题报告应注意的几个问题...
  8. 虚拟机安装python包会出问题吗_虚拟机CentOS7安装python3.6.2及requests模块的问题汇总...
  9. java jave1.0.2_GitHub - dadiyang/jave at v1.0.2
  10. 读Excel发送工资条小工具
  11. talib安装error: Microsoft Visual C++ 14.0 or greater is required. Get it with Microsoft C++ Build的解决方案
  12. 微信小号赚钱(转载)
  13. amd cpu 安卓模拟器_AMD的CPU如何运行安卓模拟器?
  14. 【操作系统】BIOS篇
  15. EPICS -- pyDevice
  16. 华为无线网代理服务器端口是什么意思,华为ES1D2G48SFA0 48端口十兆/百兆/千兆以太网电接口板(FA,RJ45) (适用于华为S7700系列交换机)...
  17. 容器技术解决了什么问题?有何优缺点?
  18. hadoop slaves
  19. 【SPH模型入门】很适合于新手的一篇文章
  20. python取元素_python 如何提取对象内的元素

热门文章

  1. 瞎折腾-CentOS 7.4 编译4.16.2版kernel 并安装
  2. ffmpeg rtmp 推流错误WriteN, RTMP send error 10053 10038
  3. node.js学习-整理
  4. 003 - JQuery APP viewport rem
  5. 常见排序算法的原理与实现(js)
  6. JS:ES6-5 rest参数与扩展运算符
  7. (进阶)LeetCode(258)——各位相加(JavaScript)
  8. Linux_c++线程函数的使用
  9. JavaScript学习(七十一)—call、apply、bind学习总结
  10. 怎样让一个心浮气躁的孩子静下心学习?