利用Helm简化Kubernetes应用部署(1)

时间:2021-08-12 05:04:17

目录

  • 利用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/

利用Helm简化Kubernetes应用部署(1)

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简化Kubernetes应用部署(1)

安装完成后,我们可以执行以下命令来查看安装的版本以及账户授权:

helm version
kubectl get deploy --namespace kube-system tiller-deploy --output yaml|grep serviceAccount

利用Helm简化Kubernetes应用部署(1)

值得注意的是,tiller安装完成后,会运行在Pod之中,我们可以通过标签“app=helm”来查看tiller是否安装成功:

kubectl get pods -o wide -n kube-system -lapp=helm

利用Helm简化Kubernetes应用部署(1)

如果安装过程中出现问题需要重新安装,可以执行以下命令再重装:

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项目模板。如下图所示:

利用Helm简化Kubernetes应用部署(1)

2.填写项目名称等信息。

利用Helm简化Kubernetes应用部署(1)

3.选择项目模板类型。

利用Helm简化Kubernetes应用部署(1)

4.添加【容器业务流程协调程序支持】。

利用Helm简化Kubernetes应用部署(1)

5.选择【Kubernetes/Helm】。

利用Helm简化Kubernetes应用部署(1)

6.查看解决方案目录,确认Chart。

利用Helm简化Kubernetes应用部署(1)

如上图所示,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快速部署,下一篇我们再来详细说明!

往期内容链接

集群故障处理之处理思路以及健康状态检查(三十二)

集群故障处理之处理思路以及听诊三板斧(三十三)

开源导入导出通用库Magicodes.ExporterAndImporter发布

使用Kubectl部署应用

通过Service访问应用 (1)

通过Service访问应用 (2)

使用Ingress来负载分发微服务