目录
利用Helm简化Kubernetes应用部署
Helm基础
安装Helm
使用Visual Studio 2019为Helm编写一个简单的应用
利用Helm简化Kubernetes应用部署
Helm是Kubernetes生态系统中的一个软件包管理工具,有点类似于Linux操作系统里面的“apt-get”和“yum”。结合上一节内容,对Kubernetes集群进行部署应用时,我们面临了以下问题:
如何管理、编辑和更新这些这些分散的 Kubernetes 应用配置文件。
如何把一套相关的配置文件作为一个应用进行管理。
如何分发和重用 Kubernetes 的应用配置。
Helm 的出现就是为了很好地解决上面这些问题。Helm Chart是用来封装Kubernetes原生应用程序的一系列YAML文件。我们可以在部署应用的时候自定义应用程序的一些 Metadata,以便于应用程序的分发。对于应用发布者而言,可以通过 Helm 打包应用、管理应用依赖关系、管理应用版本并发布应用到软件仓库。对于使用者而言,使用 Helm 后不用需要编写复杂的应用部署文件,可以以简单的方式在 Kubernetes 上查找、安装、升级、回滚、卸载应用程序。总之,Helm大大简化了应用管理的难度,其主要有以下优势:
管理复杂应用。Charts能定义哪怕是再复杂的应用,并且提供了可重复使用应用程序部署定义。
易于更新升级。
易于共享。Charts无论是在私有服务器还是公共服务器上,都非常易于升级、共享和托管。
轻松回滚。
Helm基础
Helm
Helm 是一个命令行下的客户端工具。主要用于 Kubernetes 应用程序 Chart 的创建、打包、发布以及创建和管理本地和远程的 Chart 仓库。
Tiller
Tiller 是 Helm 的服务端,部署在 Kubernetes 集群中。Tiller 用于接收 Helm 的请求,并根据 Chart 生成 Kubernetes 的部署文件( Helm 称为 Release ),然后提交给 Kubernetes 创建应用。Tiller 还提供了Release 的升级、删除、回滚等一系列功能。
Chart
Helm 的软件包,采用 TAR 格式。类似于APT的DEB包或者YUM的RPM包,其包含了一组定义 Kubernetes 资源相关的 YAML 文件。
Repoistory
Helm 的软件仓库,其保存了一系列的 Chart 软件包以供用户下载,并且提供了一个该 Repository 的 Chart 包的清单文件以供查询。Helm 可以同时管理多个不同的 Repository。
Config
应用程序实例化部署运行时的配置信息。
Release
使用 helm install 命令在 Kubernetes 集群中部署的 Chart 称为 Release。Helm 中提到的 Release和我们通常概念中的版本有所不同,这里的 Release 可以理解为 Helm 使用 Chart包部署的一个应用实例。在同一个集群中,一个Chart可以使用不同的配置(Config)安装多次,每次安装都会创建一个Release。
安装Helm
1.安装Helm客户端
推荐使用官方脚本一键安装:
curl https://raw.githubusercontent.com/helm/helm/master/scripts/get > get_helm.sh chmod get_helm.sh ./get_helm.sh
如果安装包无法下载,可以复制脚本输出的下载链接手动下载然后再解压复制到bin目录,如下所示:
tar -zxvf helm-v2.14.2-linux-amd64.tar.gz
cp linux-amd64/helm /usr/local/bin/
2.安装服务端——Tiller
安装脚本如下所示:
Kubernetes 的服务帐号和绑定角色
kubectl create serviceaccount --namespace kube-system tiller
kubectl create clusterrolebinding tiller-cluster-rule --clusterrole=cluster-admin --serviceaccount=kube-system:tiller
#初始化安装tiller,并制定服务账户和镜像
helm init --service-account tiller --tiller-image gcr.azk8s.cn/kubernetes-helm/tiller:v2.14.2 --skip-refresh
其中,Helm初始化指定了第三方镜像。安装过程如下所示:
安装完成后,我们可以执行以下命令来查看安装的版本以及账户授权:
helm version
kubectl get deploy --namespace kube-system tiller-deploy --output yaml|grep serviceAccount
值得注意的是,tiller安装完成后,会运行在Pod之中,我们可以通过标签“app=helm”来查看tiller是否安装成功:
kubectl get pods -o wide -n kube-system -lapp=helm
如果安装过程中出现问题需要重新安装,可以执行以下命令再重装:
kubectl delete deployment tiller-deploy --namespace=kube-system
kubectl delete service tiller-deploy --namespace=kube-system
rm -rf ~/.helm/
安装完成之后,我们编写一个简单的应用然后来使用Helm进行部署。
使用Visual Studio 2019为Helm编写一个简单的应用
Visual Studio 2019提供了一个犀利的扩展工具——Visual Studio Kubernetes Tool来辅助我们编写Helm应用,如果还没有安装的小伙伴可以在扩展中查找并安装此扩展。
VS除了可以自动编写dockerfile,构建并推送docker镜像之外,还能自动添加Helm的配置模板,接下来我们按照以下步骤来创建我们第一个Helm应用工程。
1.创建项目,选择Kubernetes项目模板。如下图所示:
2.填写项目名称等信息。
3.选择项目模板类型。
4.添加【容器业务流程协调程序支持】。
5.选择【Kubernetes/Helm】。
6.查看解决方案目录,确认Chart。
如上图所示,VS自动为我们创建了charts目录,相关目录和文件说明如下所示:
Chart.yaml 用于描述这个Char的相关信息,包括应用名称、描述以及版本等。
values.yaml 用于存储templates目录中模板文件中用到变量的值。
NOTES.txt 用于介绍 Chart 部署后的一些信息,例如:如何使用这个 Chart、列出缺省的设置等。
Templates 目录下是YAML文件的模板,比如deployment、service、secrets等模板,该模板文件遵循 Go template 语法。
注意:如上图所示的charts目录,我们也可以通过命令“helm create mychart”来创建。
至此,一个简单的Helm应用模板创建完成,接下来我们来将此应用通过Helm快速部署,下一篇我们再来详细说明!