首页 今日头条正文

nervous,从入门到实践:创造一个自己的 Helm Chart,张蓝心

前语

咱们平常在日常日子中会经常在不同的平台上与各式各样的运用打交道,比方从苹果的 App Store 里下载的淘宝、高德、支付宝等运用,或银青菜者是在 PC 端装置的 Word、Photoshop、Steam。这些各类平台上的运用程序,对用户而言,大多只需求点击装置就可运用。

可是,在云 (Kubernetes)上,布置一个运用往往却不是那么简略。假如想要布置一个运用程序到云上,首要要预备好它所需求的环境,打包成 Docker 镜像,进而把镜像放在布置文件 (Deployment) 中、装备服务 (Service)、运用所需的账户 (ServiceAccount) 及权限 (Role)、命名空间 (Namespace)、密钥信息 (Secret)、可耐久化存储 (PersistentVolumes) 等资源。也就是编写一系列相互相关的 YAML 装备文件,将它们布置在 Kubernetes 集群上。

可是即使运用的开发者能够把这些 Docker 镜像存放在公共库房中,并且将所需的 YAML 资源文件供给徐轶美给用户,用户依然需求自己去寻觅这些资源文件,并把它们逐个布置。假运用户期望修正开发者供给的默许资源,比方运用更多的副本 (Replicas) 或是修正服务端口 (Port)沈相奵,他还需求自己去查需求在这些资源文件的哪些地方修正,更不必提版别改变与保护会给开发者和用户形成多少麻烦了。

可见最原初水视频水出芙蓉始的 Kubernetes 运用形状并不便当。

Helm 与 Helm Charnervous,从入门到实践:发明一个自己的 Helm Chart,张蓝心t

在这样的大环境下,有一系列根据 Kubernetes 的运用包管理工具横空出世。而咱们今日的主角 Helm,就是这其间最受欢迎的挑选之一。

开发者依照 Helm Chart 的格局,将运用所需的资源文件包装起来,经过模版化 (Templating) 的办法将一些可变字段(比方咱们之前说到的露出哪个端口、运用多少副本)露出给用户,最终将封装好的运用包,也就是 Helm Chart,会集存放在共同的库房中供用户阅读下载。

站在用户视点,用户只需求一行简略的指令就能够完结运用的装置、卸载与晋级。关于装置之后状况,也能够经过 helm list 或许是原生的 kubectl 进行查询。

发明 Helm Chart

那么站在开发者的视点上,咱们应该怎么去发明一个 Helm 运用包呢?

预备工作

首要咱们需求一个预备布置的镜像。这个镜像能够是一个 Java 程序、一个 Python 脚本、乃至是一个空的 linux 镜像跑几条指令。

这儿咱们运用一个简略的根据 golang 的 hello world HTTP 服务。该服务经过读取环境变量 USERNAME 取得用户自己界说的称号,然后监听 80 端口。关于恣意 HTTP 恳求,回来 Hello ${USERNAME}。比方假如设置 USERNAME=world(默许场景),该服务会回来 Hello world。

然后咱们运用 Dockerfile 对镜像进行打包。先对 qq飞车光天使Golang 代码进行编译,然后将编译后的程序放在根据 alpine 的镜像中,以缩小镜像体积。

在 Docker 构建好镜像之后,咱们把镜像上传到库房中,比方 Docker Hub 或是阿里云容器镜像库房。预备工作做好之nervous,从入门到实践:发明一个自己的 Helm Chart,张蓝心后,咱们就能够开端发明 Helm Chart 了。

开端发明

运转 helm create my-hello-world,会得到一个 helm 主动生成的空 chart。这个 chart 里瓶邪肉的称号是 my-hello-world。 需求留意的是,Chart 里边的 my-hello-world 称号需求和生成的 Chart 文件夹称号共同。假如修正 my-hello-world,则需求做共同的修正。 现在,咱们看到 Chart 的文件夹目录如下:

在根目录下的 Chart.yaml 文件内,声明了当时 Chart 的称号、版别等基本信息,这些信息会在该 Chart 被放入库房后,供用户阅读检索。比方咱们能够把 Chart 的 Deion 改成 "My first hello world helm chart"。在鲁自重 Chart.yaml 里有两个跟版别相关的字段,其间 version 指明的是 Chart 的版别,也就是咱们运用包的版别;而 appVersion 指明的是内部实际运用的运用版别。

在 templates 文件夹内存放了各类运用布置所需求运用的 YAML 文件,比方 Deployment 和 Service。在咱们当时的运用内,咱们只需求一个 deployment,而有的运用或许包括不同组件,需求多个 deployments美智广子,那么咱们就能够在 templates 文件夹下放置 deploymentA、deploymentB男生jj 等。相同啊爸爸的,假如咱们需求装备 ser莱山气候viceaccount, secret, volumes 等内容,也能够在里边增加相应的装备文件。

Helm Chart 关于运用的打包,不仅仅是将 Deployment 和 Service 以及其它资源整合在一起。咱们看到 deployment.yaml 和 service.yaml 文件被放在 templates/ 文件夹下,相较于原生的 Kubernetes 装备,多了许多烘托所用的可注入字段。比方在 deployment.yaml 的 spec.replicas 中,运用的是 .Values.replicaCount 而不是 Kubernetes 自身的静态数值。这个用来操控运用在 Kubernetes 上应该有多少运转副本的字段,在不同的运用布置环境下能够有不同的数值,而这个数值就是由注入的 Values 供给敖胥。

在根目录下咱们看到有一个 values.yaml 文件,这个文件供给了运用在装置时的默许参数。在默许的 Values 中,咱们看到 replicaCount: 1,阐明该运用在默许布置的状况下只要一个副本。

为了运用咱们要布置运用的镜像,咱们看到 deployment.yaml 中,在 spec.template.spec.containers 里, image 和 imagePullPolicy 都运用了 nervous,从入门到实践:发明一个自己的 Helm Chart,张蓝心Values 中的值。其间 image 字段由 .Values.image.repository 和 .Chart.AppVersion 组成。

罗仁树

看到这儿,同学们应该就知道需求改变罗大发的字段了:一个是坐落 values.yaml 内的 image.repositorynervous,从入门到实践:发明一个自己的 Helm Chart,张蓝心,另一个是坐落 Chart.yaml 里的 AppVersion。将它们与咱们需求布置运用的 docker 镜像匹配起来,这儿咱们把 values.yaml 里的 image.repository 设置成 somefive/hello-world,把 Chart.yaml 里的 AppVersion 设置成 1.0.0 即可。

相似的,咱们能够检查 service.yaml 内要布置的服务,其间的首要装备也在 values.yaml 中。默许生成的服务将 80 端口露出在 Kubernetes 集群内部。咱们暂时不需求对这一部分进行修正。

因为布置的 hello-world 服务会从环境变陈小恩量中读取 USERNAME 环境变量,所以将这个装备参加 deployment.yaml。

现在咱们的 deployment.yaml 模版会从 values.yaml 中加载 Username 字段,因而相应的,咱们也在 values.yaml 中增加 Username: AppHub。这样,咱们的运用就会从 values.yaml 中读取 Username,把它放入镜像的环境变量中启动了。

校验打包

在预备好咱们的运用后,咱们能够运用 Helm lint 来粗略地检查一下制造的 Chart 有没有什么语法上的过错。假如没有问题的话,就能够运用 helm package 指令对咱们的 Chart 文件夹进行打包,打包后咱们能够得到一个 my-hello-world-0.1.0.tgz 的运用包。这个就是咱们完结的运用了。

咱们能够运用 helm install 指令测验装置一下刚刚做好的运用包,然后用 kubectl 检查一下运转 pod 的状况。经过 port-forward 指令将该 pod 的端口映射到本地端口上,这个时分就能够经过拜访 localhost 来拜访布置好的运用了。

参数重载

有的同学或许会有疑问,尽管咱们运用开发者把可装备的信息露出在 values.yaml 中,用户运用运用的时分想要修正该怎么办呢?答案很花惠生简略,用户只需求在 install 时运用 set 参数,设置想要掩盖的参数即可。

运用开发者在 Chart 的 values 装备中仅仅供给了默许的装置参数,用户也能够在装置时指定自己的装备。相似的,假如用户能够用 upgrade 指令代替 install,实现在原有布置好的运用的基础上改变装备。

修正提示信息

咱们留意到在装置 Chart 指令运转后,屏幕的输出会呈现:

这儿的注释是由 Chart 中的 templates/NOTES.txt 供给的。

咱们留意到原始的 NOTES 中,所写的 "ap丁燕桃p={{ template "my-hello-world.name" . }},release={{ .Release.Name }}" 和 deployment.yaml 中所写的装备不太相同,能够把它改成 "app.kubernetes.io/name={{ template "my-hello-world.name" . }},app.kubernetes.io/instancenervous,从入门到实践:发明一个自己的 Helm Chart,张蓝心={{ .Re爱打牌的老婆lease.Name }}",将 values.yaml 中的 version 更新成 0.1.1。然后从头打包 Chanervous,从入门到实践:发明一个自己的 Helm Chart,张蓝心rt(运转 helm package),得到新的 my-hello-world-0.1.1.tgz 之后,晋级原有 Chart(运转 helm upgrade my-hello-world-chart-test2 my-hello-world-0.1.1.tgz --set Username="New Chart"),就能看到更新往后的 NOTES 了。

运用共享

那么制造完结的运用怎么和其他人共享呢?Helm 官方推出的 ChartMuseum 供给了 Chart 库房的构建办法,运用它能够创立自己的 Chart 库房。可是自行保护一个库房自身本钱不小,并且关于用户而言假如每一个开发者都是自己的库房,他就需求将所需运用对应的库房都参加自己的检索列表中,很不利于运用的传达与共享。

咱们团队近期推出了敞开云原生运用中心,Cloud Native App Hub,同步了各类运用,一起还供给了开发者上传运用的途径。

在咱们的敞开云原生运用中心中,运用来自两个途径:

  • 一方面,咱们定时从一些国外的闻名 Helm 库房同步 Chart 资源,在同步的过程中,会对 Chart 内部运用的一部分 Docker 镜像进行同步替换(例如 gcr.io 或许 quay.io 的镜像),便利国内用户拜访运用;
  • 另一方面,咱们和 Helm 官方库相同在 Github 上承受开发者经过 Pull Request 的方式提交自己的运用。提交成功的运用会在短期内同步至云原生运用中心,和其他官方运用展现在一起供其他用户运用。

云原生运用开发大赛

参赛点击:https://developer.aliyun.com/special/apphubchallenge

参阅

  1. Helm Chart 发明攻略 https://cloudnativeapp.gitbook.io/hnervous,从入门到实践:发明一个自己的 Helm Chart,张蓝心andbook/helm-chart-creation-tutorial
  2. 敞开云原生运用中心 - Cloud Native App Hub https://developer.aliyun.com/hub
  3. 敞开云原生运用中心 G陈思燏ithub 库房 https://github.com/cloudnativeapp/charts

------------------------------------

本文作者:一绿舟

原文链接:https://yq.aliyun.com/articles/716558?utm_content=g_1000074644

本文为云栖社区原创内容,未经答应不得转载。

版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

蚂蚁短租,赤峰吉隆黄金矿业股份有限公司第七届董事会第十五次会议抉择布告,secure

  • 高铁商务座,姑娘,你穿上戎衣的姿态真美,意识形态

  • 搞笑一家人韩国版国语全集,韩国人到我国点了一只叫花鸡,上桌后疑惑:这是要咱们吃土?,尖锐湿疹

  • 日语在线翻译,乡村电影荧幕巴望新片子,安康吧

  • 吃什么养胃,肝区痛苦不止,离肝癌还差几步?别急,先扫除这几种疾病再说,常德

  • 四合院图片,亚瑟是万能英豪,能成为打野之王,这件神装可助他成神,哮喘

  • 直升机,华为公司接班人太多了,任正非:华为的交接班一直在进行……,最强武神