前言

在我们的日常生活中,我们经常在不同的平台上处理各种应用,比如从苹果应用商店下载的淘宝、高德和支付宝,或者安装在电脑上的Word、Photoshop和Steam。对于用户来说,这些平台上的大多数应用程序只能通过点击和安装来使用。

然而,在云上,部署应用程序通常并不那么简单。如果您想将应用程序部署到云中,您必须首先准备它需要的环境,将其打包到Docker映像中,然后将映像放入部署文件中,配置服务、应用程序所需的帐户和角色、名称空命名空间、关键信息和持久性卷。即编写一系列相互关联的YAML配置文件,并将它们部署在Kubernetes集群上。

然而,即使应用程序开发人员可以将这些Docker映像存储在公共仓库中,并向用户提供所需的YAML资源文件,用户仍然需要自己找到这些资源文件并逐个部署它们。如果用户想修改开发者提供的默认资源,比如使用更多的副本或者修改服务端口,他还需要找出这些资源文件需要修改的地方,更不用说版本变更和维护会给开发者和用户带来多大的麻烦。

可见Kubernetes最原始的应用形式并不方便。

Helm 与 Helm Chart

在这种环境下,一系列基于Kubernetes的应用包管理工具空诞生了。今天的主角赫尔姆是最受欢迎的选择之一。

开发人员根据Helm Chart的格式,将应用所需的资源文件打包,通过Templating向用户公开一些变量字段,最后将打包后的应用包即Helm Chart存储在统一的仓库中,供用户浏览下载。

从用户的角度来看,用户只需一个简单的命令就可以安装、卸载和升级应用程序。也可以通过helm list或native kubectl查询安装后的状态。

创作 Helm Chart

那么从开发者的角度来说,应该如何创建一个Helm应用包呢?

准备工作

首先,我们需要一个可以部署的映像。这个映像可以是一个Java程序,一个Python脚本,甚至是一个运行几个命令的空的linux映像。

这里我们使用一个简单的基于golang的hello world HTTP服务。该服务通过读取环境变量USERNAME获得用户定义的名称,然后监听端口80。对于任何HTTP请求,返回Hello ${USERNAME}。例如,如果USERNAME=world,服务将返回Hello world。

然后我们使用Dockerfile对图像进行打包。首先编译Golang代码,然后将编译后的程序放入基于alpine的图像中,以减少图像体积。

Docker建立映像后,我们将映像上传到仓库,如Docker Hub或阿里巴巴云容器映像仓库。准备工作完成后,我们可以开始创建舵图。

开始创作

运行helm create my-hello-world,会得到一个由helm自动生成的空图。这张图表中的名字是我的世界。需要注意的是,我的-hello-world在Chart中的名称应该与生成的Chart文件夹的名称一致。如果修改my-hello-world,需要进行一致的修改。现在,我们看到图表的文件夹目录如下:

在根目录下的Chart.yaml文件中,声明了当前Chart的名称、版本等基本信息,在Chart入库后,由用户进行浏览和检索。例如,我们可以将图表的设计更改为“我的第一个hello world helm图表”。Chart.yaml中有两个版本相关的字段,其中版本表示Chart的版本,也就是我们应用包的版本;而appVersion指的是内部实际使用的应用程序版本。

在模板文件夹中,存储了各种应用程序部署所需的YAML文件。在我们当前的应用程序中,我们只需要一个部署,而有些应用程序可能包含不同的组件,需要多个部署,因此我们可以将deploymentA、deployment TB等放在templates文件夹下。同样,如果需要配置serviceaccount、secret、volumes等,也可以在其中添加相应的配置文件。

Helm Chart不仅集成了应用打包的部署、服务和其他资源。我们可以看到,deployment.yaml和service.yaml文件被放置在templates/文件夹中,它比原来的Kubernetes配置有更多可注入的字段用于呈现。例如,在deployment.yaml的spec . replications中,使用Values.replicaCount代替Kubernetes本身的静态值。用于控制应用程序在Kubernetes上应该有多少运行副本的字段在不同的应用程序部署环境中可以有不同的值,该值由注入的值提供。

在根目录下,我们可以看到有一个values.yaml文件,它提供了安装过程中应用程序的默认参数。在默认值中,我们看到复制计数:1,这意味着应用程序在默认部署状态下只有一个副本。

为了使用我们要部署的应用程序的映像,我们可以在deployment.yaml中看到,在spec.template.spec.containers中,image和imagePullPolicy都使用值。图像字段包括。Values.image.repository和。图表。版本..

看到这里,学生应该知道需要更改的字段:一个是values.yaml中的image.repository,另一个是Chart.yaml中的AppVersion将它们与我们需要部署的应用程序的docker映像进行匹配。这里,我们将values.yaml中的image.repository设置为somefive/hello-world,并将Chart.yaml中的AppVersion设置为1.0.0。

同样,我们可以在service.yaml中查看要部署的服务,主配置也在values.yaml中,默认生成的服务公开了Kubernetes集群内部的端口80。这部分暂时不需要修改。

当部署的hello-world服务从环境变量中读取USERNAME环境变量时,这个配置被添加到deployment.yaml

现在,我们的deployment.yaml模板将从values.yaml加载Username字段,因此,我们也相应地在values.yaml中添加Username: AppHub。这样,我们的应用程序将从values.yaml读取Username,将其放入镜像环境变量并启动它。

校验打包

在准备好我们的应用程序后,我们可以使用Helm lint来粗略地检查图表中是否有语法错误。如果没有问题,我们可以使用helm package命令打包我们的图表文件夹。打包后可以得到一个my-hello-world-0.1.0.tgz的应用包,这是我们完成的应用。

我们可以使用helm install命令来尝试安装刚刚完成的应用程序包,然后使用kubectl来检查pod的运行状态。通过端口转发命令将pod的端口映射到本地端口。此时,您可以通过访问localhost来访问部署的应用程序。

参数重载

有些同学可能会有疑问。虽然我们的应用程序开发人员在values.yaml中公开了可配置的信息,但是当用户想要修改应用程序的时候应该怎么做呢?答案很简单。用户只需在安装时使用set参数,并设置他们想要覆盖的参数。

应用开发者只在Chart的值配置中提供默认的安装参数,用户也可以在安装时指定自己的配置。同样,如果用户可以用升级命令替换安装,则可以根据原始部署的应用程序来更改配置。

修改提示信息

我们注意到安装图表命令运行后,屏幕输出将出现:

这里的注释是由Chart中的templates/NOTES.txt提供的。

我们注意到“app = { { template”my-hello-world。名字”。}},release = {{.release. name}} "用原NOTES写的和用deployment.yaml写的配置差别很大,可以改成" app . kuberniets . io/name = { { template " my-hello-world . name "。}},app.kubernites.io/instance = { { . release . name } }”,并将values.yaml中的版本更新为0.1.1。然后重新打包图表以获得新的my-hello-world-0.1.1.tgz,然后升级原始图表

应用分享

那么完成的应用怎么和别人分享呢?Helm正式推出的ChartMuseum提供了一种构建图表仓库的方法,可以用来创建自己的图表仓库。但是自己维护一个仓库的成本也不小,如果每个开发者都是自己的仓库,就需要把所需应用对应的仓库添加到自己的搜索列表中,不利于应用的传播和共享。

我们的团队最近推出了一个开放的云原生应用中心,云原生应用中心,它同步各种应用,并为开发人员提供上传应用的渠道。

在我们的开放云本地应用中心,应用来自两个渠道:

一方面,我们定期从一些国外的知名 Helm 仓库同步 Chart 资源,在同步的过程中,会对 Chart 内部使用的一部分 Docker 镜像进行同步替换(例如 gcr.io 或者 quay.io 的镜像),方便国内用户访问使用;另一方面,我们和 Helm 官方库一样在 Github 上接受开发者通过 Pull Request 的形式提交自己的应用。提交成功的应用会在短期内同步至云原生应用中心,和其他官方应用展示在一起供其他用户使用。

云原生应用开发大赛

点击进入:https://developer.aliyun.com/special/apphubchallenge

参考 Helm Chart 创作指南 https://cloudnativeapp.gitbook.io/handbook/helm-chart-creation-tutorial开放云原生应用中心 - Cloud Native App Hub https://developer.aliyun.com/hub开放云原生应用中心 Github 仓库 https://github.com/cloudnativeapp/charts

-

作者:一艘绿色的船

原文链接:https://yq.aliyun.com/articles/716558? UTM _ content = g _ 1000074644

本文是云起社区的原始内容,未经许可不得转载。

1.《chart 从入门到实践:创作一个自己的 Helm Chart》援引自互联网,旨在传递更多网络信息知识,仅代表作者本人观点,与本网站无关,侵删请联系页脚下方联系方式。

2.《chart 从入门到实践:创作一个自己的 Helm Chart》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。

3.文章转载时请保留本站内容来源地址,https://www.lu-xu.com/yule/1691885.html