目录

  • 利用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快速部署,下一篇我们再来详细说明!

往期内容链接

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

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

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

使用Kubectl部署应用

通过Service访问应用 (1)

通过Service访问应用 (2)

使用Ingress来负载分发微服务

利用Helm简化Kubernetes应用部署(1)的更多相关文章

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

    目录 定义Charts  使用Helm部署Demo  Helm常用操作命令  定义Charts 回到之前的“charts”目录,我们依次进行解读并进行简单的修改. Chart.yaml 配置示例: a ...

  2. 简化kubernetes应用部署工具之Helm应用部署

    介绍 微服务和容器化给复杂应用部署与管理带来了极大的挑战.Helm是目前Kubernetes服务编排领域的唯一开源子项目,做为Kubernetes应用的一个包管理工具,可理解为Kubernetes的a ...

  3. 简化Kubernetes应用部署工具-Helm

    [编者的话]微服务和容器化给复杂应用部署与管理带来了极大的挑战.Helm是目前Kubernetes服务编排领域的唯一开源子项目,做为Kubernetes应用的一个包管理工具,可理解为Kubernete ...

  4. 使用 Helm 包管理工具简化 Kubernetes 应用部署

    当在 Kubernetes 中已经部署很多应用时,后续需要对每个应用的 yaml 文件进行维护操作,这个过程会变的很繁琐,我们可以使用 Helm 来简化这些工作.Helm 是 Kubernetes 的 ...

  5. Helm, 在Kubernetes中部署应用的利器

    一.背景 Kubernetes(k8s)是一个基于容器技术的分布式架构领先方案.它在Docker技术的基础上,为容器化的应用提供部署运行.资源调度.服务发现和动态伸缩等一系列完整功能,提高了大规模容器 ...

  6. ksonnet 一个简化编写以及部署kubernetes的工具

    ksonnet 是一个基于jsonnet的快速简化kubernetes yaml 配置的工具,可以实现配置的复用 同时也包含一个registry 的概念,可以实现可复用组件的分发,同时支持helm 环 ...

  7. 利用 kubeasz 给 suse 12 部署 kubernetes 1.20.1 集群

    文章目录 1.前情提要 2.环境准备 2.1.环境介绍 2.2.配置静态网络 2.3.配置ssh免密 2.4.批量开启模块以及创建文件 2.5.安装ansible 2.5.1.安装pip 2.5.2. ...

  8. 在 Kubernetes 上部署 OpenStack 是什么体验

    红蓝出 CP,OpenStack 和 Kubernetes 在一起会怎样? 背景 从去年开始就想深入地学习 Kubernetes,首先想到是在 OpenStack 上能比较轻松地玩转,所以去 尝试了 ...

  9. 利用VSTS跟Kubernetes进行CI/CD

    准备VSTS管理环境 首先我们需要到www.visualstudio.com下申请好的VSTS账号,然后在账号下创建一个用Git作为代码管理的项目 创建好项目后我们就可以利用git clone将代码库 ...

随机推荐

  1. 从入门到入土的JS 随笔day01

    js 的全称是javascript ,JavaScript一种直译式脚本语言,是一种动态类型.弱类型.基于原型的语言,内置支持类型. 它的解释器被称为JavaScript引擎,为浏览器的一部分,广泛用 ...

  2. hdu-6601 Keen On Everything But Triangle

    题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=6601 Description N sticks are arranged in a row, and ...

  3. CodeForces 86 D Powerful array 莫队

    Powerful array 题意:求区间[l, r] 内的数的出现次数的平方 * 该数字. 题解:莫队离线操作, 然后加减位置的时候直接修改答案就好了. 这个题目中发现了一个很神奇的事情,本来数组开 ...

  4. 51nod 1020 逆序排列(dp,递推)

    题目链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1020 题意:是中文题. 题解:很显然要设dp[i][j]表示 ...

  5. Three.js 开发机房(三)

    之前三节都没涉及到机房,只是一些零零散散的知识点,这一节我们就开始正式画外墙. 首先我了明显理解以下啥是墙?其实说白了就是一个长方体,长不确定,宽一般也就是40cm,高也就是两米,这就是一个简单的墙, ...

  6. 技术漫谈 | 远程访问和控制云端K8S服务器的方法

    对于部署在云端的K8S容器编排系统,可以先通过SSH远程登录到K8S所在主机,然后运行kubectl命令工具来控制K8S服务系统.然而,先SSH登录才能远程访问的二阶段方式,对于使用Linux桌面或者 ...

  7. 【LeetCode】334#递增的三元子序列

    题目描述 给定一个未排序的数组,判断这个数组中是否存在长度为 3 的递增子序列. 数学表达式如下: 如果存在这样的 i, j, k, 且满足 0 ≤ i < j < k ≤ n-1, 使得 ...

  8. mysql 查询参数尾部有空格时被忽略

    最近再使用mysql时,无意见发现,当我查询参数尾部输入若干个空格时,依然可以查出和不加空格相同的结果,像这样 select * from wa where name='be ' 等同于 select ...

  9. HTML连载37-边框属性(下)、边框练习

    一.边框属性 1.连写(分别设置四条边的边框) border-width:上 右 下 左: border-style:上 右 下 左: border-color:上 右 下 左: 注意点: (1)这三 ...

  10. 操作系统原理之I/O设备管理(第六章上半部分下)

    五.I/O软件原理 输入输出软件的总体目标是将软件组织成一种层次结构 低层软件用来屏蔽硬件的具体细节 高层软件则主要是为用户提供一个简洁.规范的界面 设备管理的4个层次: 用户层软件 ->向系统 ...