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

目录

  • 利用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 700 get_helm.sh

./get_helm.sh

如果安装包无法下载,可以复制脚本输出的下载链接手动下载然后再解压复制到bin目录,如下所示:

tar -zxvf helm-v2.14.2-linux-amd64.tar.gz	
cp linux-amd64/helm /usr/local/bin/

640

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初始化指定了第三方镜像。安装过程如下所示:

640

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

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

640

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

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

640

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

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

640

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

640

3.选择项目模板类型。

640

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

640

5.选择【Kubernetes/Helm】。

640

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

640

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

往期内容

Docker+ Kubernetes已成为云计算的主流(二十六)

容器化之后如何节省云端成本?(二十七)

了解Kubernetes主体架构(二十八)

使用Minikube部署本地Kubernetes集群(二十九)

使用kubectl管理k8s集群(三十)

使用Kubeadm创建k8s集群之部署规划(三十一)

使用Kubeadm创建k8s集群之节点部署(三十二)

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

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

使用WebDeploy部署远程IIS网站

使用Kubectl部署应用

通过Service访问应用 (1)

通过Service访问应用 (2)

使用Ingress来负载分发微服务

640?wx_fmt=png


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/313738.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

设计模式——行为型模式

一:目录 1. 策略模式(Strategy) 2.状态模式(State) 3.责任链模式(Chain Of Responsibility) 4.解释器模式(Interpreter) 5.命令模式(Command) 6.观…

2019 ICPC Asia Yinchuan Regional(9 / 13)

2019 ICPC Asia Yinchuan Regional A - Girls Band Party(分组背包) 每个物品有两个标签,名字,颜色,当名字是设置为奖赏时会对整体加上0.1 的贡献,如果颜色符合要求时 会对整体加上 0.2 的的贡献 但是有…

网络编程——常用协议解析

** 1、网络基础知识 ** 1.1> 什么是OSI模型 OSI 模型(Open System Interconnection model)是一个由国际标准化组织?提出的概念模型,试图?供一个使各种不同的计算机和网络在世界范围内实现互联的标准框架。 它将计算机网络体系结构划分为七层,每层都可以提供抽象良好的…

在 ABP vNext 中编写仓储单元测试的问题一则

一、问题新项目是基于 ABP vNext 框架进行开发的,所以我要求为每层编写单元测试。在同事为某个仓储编写单元测试的时候,发现了一个奇怪的问题。他的对某个聚合根的 A 字段进行了更新,随后对某个导航属性 B 也进行了变更,最后通过仓…

TCP协议——三次握手与四次关闭

1. TCP协议基础 网络编程基础见,传送门 TCP是面向连接的,无论哪一方向另一方发送数据之前,都必须先在双方之间建立一条连接。 在TCP/IP协议中,TCP协议提供可靠的连接服务,连接是通过三次握手进行初始化的。 三次握手…

在 .NET Core 3.0 中实现 JIT 编译的 JSON 序列化,及一些心得与随想

源码:https://github.com/Martin1994/JsonJitSerializerNuGet:https://www.nuget.org/packages/MartinCl2.Text.Json.Serialization/简介:Just-in-time 编译的 JSON 序列化,基于 System.Text.Json.NET Core 3.0 即将正式发布&…

E. Company(Codeforces Round #520 (Div. 2))

E. Company 给定一颗有nnn个节点的树,有mmm次询问,每次询问给定[l,r][l, r][l,r],我们可以选择删除其中的一个点ppp,然后找到一个深度最深的rtrtrt,使得剩下的点都在rtrtrt的子树上。 考虑对编号为[l,r][l, r][l,r]中…

TCP协议——流量控制和拥塞控制

** 一、流量控制 ** 1.1 什么是流量控制 Sender won’t overflow receiver’s buffer by transmitting too much, too fast. (防止发送方发的太快,耗尽接收方的资源,从而使接收方来不及处理) 1.2 流量控制的一些知识点 &#x…

征集.NET中国峰会议题

月初做的调查《》,参与人数576人,愿意参与分享.NET Core经验的142人,今天发起分会场主题演讲和闪电演讲议题.2014年微软组织成立.NET基金会,微软在成为主要的开源参与者的道路上又前进了一步。2014年以来已经有众多知名公司加入.N…

TCP协议——粘包与拆包

TCP的基础 TCP协议基础,传送门 TCP协议流量控制,传送门 1.1 什么是TCP粘包/拆包 TCP是个“流”协议,所谓流,就是没有界限的一串数据。大家可以想想河里的流水,是连成一片的,其间并没有分界线。TCP底层并…

B. Lynyrd Skynyrd(倍增 + 区间最小值)

B. Lynyrd Skynyrd(segment tree redouble) 给定一个长度为nnn的排列ppp,一个长度为mmm的数组aaa,有mmm次询问,每次询问给定l,rl, rl,r,问在数组aaa中是否存在一个子序列构成的串是ppp的循环位移串&#…

你的通勤时间都去哪了?

大家好,我是Z哥。今天我来唠叨一下。最近无意间看到一份报告,关于我们职场人士上下班通勤时间的。有时候想想也挺无奈的,我们越想去发达一些的城市打拼,反而越被通勤这种琐碎的事情给耽误更多的奋斗时间。但是没办法,在…

规模化敏捷必须SAFe

引子:规模化敏捷转型从来不是一件容易的事情。当只有1-2个敏捷团队进行协同的时候,计划和工作同步是可控的。团队和产品负责人互相聊一聊,基本就能搞清楚需要做什么,一个简单的SOS架构(Scrum of Scrums)就能…

http1.0 http1.1 http2 之间的区别

一、HTTP基础 1.1 HTTP定义 HTTP协议(HyperTextTransferProtocol,超文本传输协议)是用于从WWW服务器传输超文本到本地浏览器的传输协议。 1.2 HTTP发展史 1.3 HTTP1.0 早先1.0的HTTP版本,是一种无状态、无连接的应用层协议。 …

B. Alyona and a tree(dsu on tree + bit)

B. Alyona and a tree(dsu on tree bit) 给定一颗以111号节点为根的树,每个点有点权aia_iai​,边有边权,如果vvv控制了点uuu,当且仅当uuu是vvv的子树中的节点且dis(u,v)≤audis(u, v) \leq a_udis(u,v)≤…

HTTP get post put delte等

超文本传输协议(HTTP, HyperText Transfer Protocol)是一种无状态的协议,它位于OSI七层模型的传输层。HTTP客户端会根据需要构建合适的HTTP请求方法,而HTTP服务器会根据不同的HTTP请求方法做出不同的响应。 HTTP版本与HTTP请求方…

P1600 [NOIP2016 提高组] 天天爱跑步(线段树合并,lca)

P1600 [NOIP2016 提高组] 天天爱跑步 给定一颗有nnn个点的树,有mmm个人在树上移动,第iii个人从sis_isi​点,移动到tit_iti​点,且他们按照最短路移动,每秒移动一条边的距离, 点iii在wiw_iwi​时刻有一个观…

漫画:程序员一时单身一时爽,一直单身...有点惨

1妹子没吃早饭早啊敲哥,你在吃早饭啊嗯啊,你吃了吗?没呢,早上实在是太赶了,没来得及嗯...那我还是换个地方吃吧免得馋着你。。。2代码重要还是女朋友重要女朋友能哄好,代码能哄好吗?写代码是赚钱…

P3564 [POI2014]BAR-Salad Bar(ST表 + 二分)

P3564 [POI2014]BAR-Salad Bar 给定一个长度为nnn的数组,里面元素只有111跟−1-1−1,问选出一个长度为lenlenlen的区间使得,这个区间的前缀和时刻大于零,后缀和时刻大于零,输出最大长度lenlenlen, 考虑枚…

【招聘(深圳)】迈瑞招.NET 开发Leader和PM

应用开发管理(开发leader)工作职责:1.负责应用开发小组管理;2.协助项目经理制定项目计划和控制项目进度;3.评估用户需求,设计解决方案、系统功能,并带领开发小组进行交付;4.对开发过…