Introduction to Kubernetes Deployment Using Helm

Helm是Kubernetes软件包管理器,用于管理Kubernetes应用程序。 借助Helm,您可以定义,安装和升级Kubernetes应用程序。 它可以用于Kubernetes应用程序的可复制构建。 就像Kubernetes的apt / yum / homebrew一样。

要使用Helm,必须先安装Kubernetes才能使用Helm图表,并且还应该了解Kubernetes。

安装Helm
不同方式安装Helm

根据您的操作系统从此处下载二进制文件,然后将Helm添加到路径中,或导航到终端中包含Helm的文件夹
使用包管理器

Macos:

Windows:

Using Chocolatey:

 

验证Helm版本:

输入如下:

初始化舵图
图表是Helm中使用的包装格式。 图表是多个文件,文件夹和模板的集合,用于定义多个Kubernetes资源。 模板是Kubernetes资源的定义,您可以通过将动态值注入模板来将同一图表用于多个不同的发行版。 模板由各种指令组成,您可以根据需要自定义它们,并注入您的发行版独有的值。 这样,您可以通过向模板注入特定于您的发行版的动态值(例如Docker映像名称,该实例的副本数等),为所有发行版重用同一图表。

您可以通过添加可用的各种Helm图表存储库,使用正式的Helm图表存储库或任何其他存储库来初始化Helm图表存储库:

仓库改变后升级:

您可以使用以下命令列出上述存储库中所有可用的稳定图表,也可以将其中的任何图表用作基础图表:

Helm
Helm用于在Kubernetes上安装和管理应用程序,因此,要使用Helm,Kubernetes群集应已启动并正在运行。 您可以在本地计算机上将minikube单节点群集用于Kubernetes,也可以从Docker在桌面上运行Kubernetes单节点群集。 如果您在Windows上使用Docker桌面,则可以右键单击系统任务栏中的Docker图标并转到设置,然后导航到Kubernetes并在Docker桌面启动时启用Kubernetes。 这将启用单节点Kubernetes集群,您可以使用以下命令进行验证:

打开一个新的终端。

Helm
Helm图表包含在Kubernetes上运行应用程序所需的所有资源的所有定义。它包含用于部署,服务,入口等的定义模板。存储库是存储所有已发布图表的地方。您可以像在本教程前面所述的那样,将多个存储库添加到Helm中。

该发行版是图表的一个实例,并且在您安装任何图表时都会创建一个新发行版。每次安装图表时,都会使用不同的发行名称创建一个新发行。

Helm将特定图表中可用的Kubernetes资源安装到Kubernetes集群中。

搜索图表
查找图表有两种方法,一种是从公共Helm集线器中找到的,其中包含来自多个存储库的图表。您可以使用以下命令在Helm集线器中进行搜索,方法是提供要查找的图表的全名或部分名称,此命令将列出所有具有该名称的匹配图表。例如,如果要搜索MySQL图表:

另一种方法是搜索已添加到Helm中的存储库。 您可以首先使用以下命令列出您添加到Helm的所有存储库,这将列出您在Helm中配置的所有存储库

查询:

Helm 安装:

 

在这里,release-name是可选的。这是您要为发行版指定的名称,如果您不提供发行版名称,则必须提供另一个标志“ — generate-name”,然后Helm会自动为您选择发行版名称,并将其打印在该命令的结果。第二个选项是图表名称。它是您要安装的图表的名称,您可以通过在Helm集线器或已配置的存储库中进行搜索来找到该名称。

该命令将使用提供的名称创建一个新版本,并将其安装在Kubernetes集群上,这意味着如果您安装MySQL图表,则会在Kubernetes集群上发布一个新的MySQL实例。如果要发布两个MySQL数据库,请安装两次MySQL图表。它将释放该图中存在于Kubernetes集群中的各种资源,例如部署荚,服务,入口等。您可以使用任何Kubernetes kubectl命令(kubectl get pods-列出Kubernetes集群中所有已发布的Pod)来列出Pod,也可以使用Helm命令列出发行版。这类似于使用kubectl API将所有资源一一安装到Kubernetes。

您可以通过:

通过使用上述命令进行安装,您将释放默认图表。 如果要修改配置,可以使用以下命令,该命令将列出该图表的所有配置,并且可以在安装过程中通过提供YAML格式的文件来修改任何变量。

配置修改:

你也可以用-set 取代f-f去修改变量,多变量用逗号隔开 ,例如:

 

因此,通过Helm安装,您可以一次性释放图表定义上可用的所有资源。 如果您希望重复相同的配置,则可以发布图表,任何人都可以使用该图表在Kubernetes上发布具有类似配置的图表。

头盔升级和回滚
当您想更改现有发行版的配置时,可以使用Helm upgrade命令。 此命令将用于基于您提供的新配置来更新现有发行版。 Helm将仅更新根据新配置修改的那些资源,并保持发行版中的其他资源不变。 在这个新的配置YAML文件中,您可以将值更新为任何变量,如果要使用更新的映像更新发行版,则可以提供新的Docker映像或标签。

你也可以获取所有的值,

如果出了什么问题,而您想回滚到某个较早的版本,则非常简单。 您可以首先使用history命令检查发行版本的历史记录,然后从历史记录中选择正确的回滚修订版,然后可以使用以下命令回滚到该特定发行版:

 

发行版本号是与您要回滚的发行版相对应的编号。 每次升级或回滚一个版本时,该版本号的增量为1,从首次安装版本开始。

Helm install命令将在不等待Pod出现的情况下完成,但是如果您希望该命令等待Pod出现并且服务具有IP地址,则可以在安装时使用以下标志

花费时间设置:

 

Helm Uninstall

如果要从Kubernetes卸载发行版,可以使用Helm进行卸载。 默认情况下,Helm不保留任何已卸载版本的历史记录。

如果要保留任何已卸载版本的历史记录,则可以在卸载时通过下面的标志进行保存

使用Helm list命令中的“ uninstalled”标志,您可以查看使用“ keep history”标志卸载的所有发行版,还可以使用“ all”标志列出所有活动的或通过“ keep history”标志卸载的发行版。 。

创建自己的图表
我们一直在研究Helm Hub提供的预定义图表,但是如果我们要创建自己的图表怎么办? 要创建自己的图表Helm,请提供一个实用程序,它将初始化图表的基本结构。

创建后目录结构如下:

 

Chart.yaml包含有关图表的描述。

“图表/文件夹”可以包含其他子图表,默认情况下此文件夹为空。

“ values.yaml”是YAML文件,其中包含发行版配置默认值的键/值对。它包含副本数(您要在Kubernetes中实例化的Pod数量),映像名称,资源配置(内存和CPU限制)的值。您可以通过在安装或升级Helm时提供自定义的配置YAML文件来覆盖它们,正如我们先前在使用预定义图表时所讨论的那样。

“模板/文件夹”包含用于部署,服务,入口等的多个模板文件。Helm通过模板呈现引擎将所有模板文件与提供的默认配置值或安装时提供的自定义值进行组合来评估所有模板文件。您可以将这些文件视为Kubernetes资源的静态模板,该模板接受来自values.yaml或运行时的动态值(例如docker映像名称,所需的任何Pod的副本数等),并将提供的资源文件提供给Kubernetes。

图表中的部署模板是用于在Kubernetes中部署Pod的YAML文件。它是一个模板,接受Docker映像名称,副本数以及与Pod部署相关的其他详细信息。

服务模板用于在Kubernetes中设置服务资源,该服务资源用于在具有相似功能的多个Pod之间实现负载平衡,并定义访问Pod的策略。服务资源使用选择器仅针对特定的Pod集。选择器不过是Pod部署中定义的标签。

入口模板是入口模板。入口有助于将HTTP和HTTPS请求从群集外部路由到群集内的服务。流量路由由Ingress资源上定义的规则控制。

您可以删除所有模板并从头开始创建自己的模板,也可以仅针对要释放的Kubernetes资源创建模板。您可以通过导航到终端中包含chart文件夹的目录并使用以下命令安装该图中存在的所有内容来安装上述图表。这将基于图表中提供的所有配置在Kubernetes中创建一个新版本。

它将为Kubernetes发行版分配一个名称,并在上述命令的结果中为您显示该名称。 您可以使用以下带有发行版本名称的命令来检查在Kubernetes上发行的每个Kubernetes资源的实际模板。

您可以使用以下命令卸载具有相同发行版名称的任何发行版。

当您在模板文件中提供任何资源的名称时,请认为它是唯一的。 要使其具有唯一性,您可以在发行版名称后加上资源类型,以使其在Kubernetes集群中具有唯一性。 Kubernetes中的此名称字段仅限于63个字符,因此请相应地计划发行版本名称。

 

上面的模板指令将注入发行版名称,并在其后附加“ -deployment”,以在部署模板中命名部署资源。 “ Release”对象是Helm中的内置对象,我们通过使用“”从该对象访问“ Name”。 ”运算符。 最初的 ” 。 ”之前的“”表示这是顶层对象。

您可以通过使用模板文件中的{{.Values.fieldname}}指令将values.yaml文件中的任何值注入到模板中。

有时您不确定此模板在渲染后会变成什么,因此您可以使用“ debug”标志仅查看最终模板,而无需在Kubernetes上安装任何内容。 您可以使用以下命令,该命令不会在Kubernetes上安装任何内容,但会在Helm渲染并将值注入模板后打印最终模板。

如果要使用单个命令进行升级和安装,即如果不存在则使用该名称安装发行版,否则使用单个命令进行升级,则可以使用-install标志,该命令指示Helm如果使用该名称发行 还不存在,请运行安装,也可以使用-强制标志替换任何失败的发行版。

您可以检查Helm中的各种指令和内置对象并通过创建自己的图表进行练习,也可以按照Helm自动生成的模板来了解Helm发布模板的基本结构。