IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> 使用Helm进行项目打包 -> 正文阅读

[系统运维]使用Helm进行项目打包

一. 前言

Helm

我们可以将Helm看作K8s下的apt-get/yum。Helm是一个用于kubernetes的包管理器。,对于应用发布者而言,可以通过Helm打包应用,管理应用依赖关系,管理应用版本并发布应用到软件仓库。

Helm 是一个命令行下的客户端工具。主要用于 Kubernetes 应用程序 Chart 的创建、打包、发布以及创建和管理本地和远程的 Chart 仓库。

Chart

chart是helm的应用打包格式。chart是描述相关的一组Kubernetes资源的文件集合。单个chart可能用于部署简单的东西,比如nginx,或者一些复杂的东西,比如完整的具有HTTP服务,数据库,缓存等的Web应用程序堆栈。

关于helm的更多内容,可参考:https://helm.sh/docs/chart_best_practices/conventions/

二. 环境配置

  1. 前置环境

  • (必须)Kubectl
  • (可选)kubectx
  • (可选)kubens

以上所有前置环境安装,请参考:本地配置kubectl环境链接集群

  1. 安装Helm

对于MacOS/Linux系统

  1. 从官网下载最新版本的二进制安装包到本地:https://github.com/kubernetes/helm/releases

在这里插入图片描述

  1. 解压压缩包(根据最新的压缩包名修改命令 )
tar -zxvf helm-v3.8.0-linux-amd64.tar.gz

  1. cd进解压文件夹,把helm放到**bin目录**下。
mv helm /usr/local/bin/helm

  1. 验证安装成功
helm help

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zTo7omiv-1647060130213)(https://zhiyuanbang.feishu.cn/space/api/box/stream/download/asynccode/?code=NmNkZTU3ZGU3ODRmNjI4NTEzZmM3MTJlZmIzMzcyMDRfdDVSM3RGczA4eHJVMXh0TDFjVWpVQ1ZIQmVjc00weXFfVG9rZW46Ym94Y243UUloZVd3SUpBVUFLakNybzNuUEpnXzE2NDcwNjAxMjQ6MTY0NzA2MzcyNF9WNA)]

  1. Helm即安装完成。

对于Windows系统

  1. 从官网下载最新版本的二进制安装包到本地:https://github.com/kubernetes/helm/releases

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EUU57Vyd-1647060130213)(https://zhiyuanbang.feishu.cn/space/api/box/stream/download/asynccode/?code=NTgzMjYzOGFiZGJkMjE0YTY0ODFlZWVlMjM2OGI0ZTFfaW1xSVZLQjhuN1IySmU5dEpjVzR4N2swaGFhd3ZnVFVfVG9rZW46Ym94Y25xdmNTelNvMnRJVHQxWjdSUkswNjFkXzE2NDcwNjAxMjQ6MTY0NzA2MzcyNF9WNA)]

  1. 解压下载的压缩包,复制此文件路径。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RjcMUWRS-1647060130213)(https://zhiyuanbang.feishu.cn/space/api/box/stream/download/asynccode/?code=N2I2OGVhMDVkMGIyMWMwMTY2NTJkZjJhMDFkZDA0NjJfRkRQQmswZ3ZwSmpncmxTNGxQVTJzZFpZTFBLRWdJSTZfVG9rZW46Ym94Y25iU0VmU05jM1dlVEVZemxjT052OUlmXzE2NDcwNjAxMjQ6MTY0NzA2MzcyNF9WNA)]

  1. 将此文件路径添加到您的环境变量中即可。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fCgZzWVa-1647060130214)(https://zhiyuanbang.feishu.cn/space/api/box/stream/download/asynccode/?code=YjY2NDE4MDk3MDViYWU5MjQwZGYyYWQxNDA0MzBjMGRfMlhDVlpTQm96Y1lReGdZUjFjVlZCZzJLUW9va0NFTFlfVG9rZW46Ym94Y25wTWxNRVBvdXBSc1pEeENMeFBPUndlXzE2NDcwNjAxMjQ6MTY0NzA2MzcyNF9WNA)]

三. 项目打包

  1. 准备工作

首先我们需要一个准备部署的镜像。这个镜像可以是一个 Java 程序、一个 Python 脚本、甚至是一个空的 linux 镜像跑几条命令。

这里我们使用一个简单的基于 golang 的 hello world HTTP 服务。该服务通过读取环境变量 USERNAME 获得用户自己定义的名称,然后监听 80 端口。对于任意 HTTP 请求,返回 Hello ${USERNAME}。比如如果设置 USERNAME=world(默认场景),该服务会返回 Hello world

  1. 开始打包

运行helm create命令,会得到一个 helm 自动生成的空 chart。

helm create my-hello-world

这个 chart 里的名称是 my-hello-world。 需要注意的是,Chart 里面的 my-hello-world 名称需要和生成的 Chart 文件夹名称一致。如果修改 my-hello-world,则需要做一致的修改。

现在,我们看到 Chart 的文件夹目录如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wsKzOGAd-1647060130214)(https://zhiyuanbang.feishu.cn/space/api/box/stream/download/asynccode/?code=ZWI5YzhlMTQyMmQ2NDllZWFhYWJkZjM2ZGUwNjBhM2NfZnRTcVJSTHN3eDFOZEJyYnBKc2xiMkZ4RGduQzBkWHFfVG9rZW46Ym94Y255N3VISEt1cHhZOThqem1ERGdaMlJoXzE2NDcwNjAxMjQ6MTY0NzA2MzcyNF9WNA)]

**Chart.yaml 文件:**声明了当前 Chart 的名称、版本等基本信息,这些信息会在该 Chart 被放入仓库后,供用户浏览检索。在 Chart.yaml 里有两个跟版本相关的字段,其中 version 指明的是 Chart 的版本,也就是我们应用包的版本;而 appVersion 指明的是内部实际使用的应用版本。

**templates 文件夹:**存放了各类应用部署所需要使用的 YAML 文件,比如 deployment.yamlservice.yaml。在我们当前的应用内,我们只需要一个 deployment,而有的应用可能包含不同组件,需要多个 deployment,那么我们就可以在 templates 文件夹下放置 deploymentA、deploymentB 等。同样的,如果我们需要配置 serviceaccount, secret, volumes 等内容,也可以在里面添加相应的配置文件。

Helm Chart 对于应用的打包,不仅仅是将 Deployment 和 Service 以及其它资源整合在一起。我们看到 deployment.yamlservice.yaml 文件被放在 templates/ 文件夹下,相较于原生的 Kubernetes 配置,多了很多渲染所用的可注入字段。比如在 deployment.yaml 的 spec.replicas 中,使用的是 .Values.replicaCount 而不是 Kubernetes 本身的静态数值。这个用来控制应用在 Kubernetes 上应该有多少运行副本的字段,在不同的应用部署环境下可以有不同的数值,而这个数值便是由注入的 Values 提供。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hzzaL3Yd-1647060130215)(https://zhiyuanbang.feishu.cn/space/api/box/stream/download/asynccode/?code=ZmQzMGE5NTMwMDM2ZTJhOTA1NDI0NTgyMDIzNjMyMTlfMkRtWUg3bmlJczRFYlBJV1RwRFZJallNdmZ0c1NiN2hfVG9rZW46Ym94Y25IZUt0N0pwY0RidEs4VTlQRG43UlFmXzE2NDcwNjAxMjQ6MTY0NzA2MzcyNF9WNA)]

在根目录下我们看到有一个 values.yaml 文件,这个文件提供了应用在安装时的默认参数。在默认的 Values 中,我们看到 replicaCount: 1,说明该应用在默认部署的状态下只有一个副本。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tWF4At0G-1647060130215)(https://zhiyuanbang.feishu.cn/space/api/box/stream/download/asynccode/?code=ZDFjMmU4MmE2YTU2ZmMyYmZkZDk2NDBjOTk1NTMyYWFfeHBRZlU4T0JCUUpTbDF5ejdVZzJMYjN1clBvSlZhWVJfVG9rZW46Ym94Y241Zjh0OHRTYlBaWGIzQ0ZvWndlOGZnXzE2NDcwNjAxMjQ6MTY0NzA2MzcyNF9WNA)]

为了使用我们要部署应用的镜像, 打开deployment.yaml ,在 spec.template.spec.containers 里, image 和 imagePullPolicy 都使用了 values.yaml 中的值。其中 image 字段由 .Values.image.repository和.Values.image.tag 和 .Chart.AppVersion 组成。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bXULyy7E-1647060130216)(https://zhiyuanbang.feishu.cn/space/api/box/stream/download/asynccode/?code=M2U4Yzc0OWY3MTI2OGY1ZjEyN2M5NTkxOTIwZDVjNTBfaVlEUXFUeDRRQ2dyZm1RZTVNaVJ3ejk5aXNZMXdpbGZfVG9rZW46Ym94Y24zc1FMcVdDSEFrRHpMbmlVdW5xdTdiXzE2NDcwNjAxMjQ6MTY0NzA2MzcyNF9WNA)]

看到这里,应该就知道需要变更的字段:两个是位于 values.yaml 内的 image.repository和image.tag,另一个是位于 Chart.yaml 里的 AppVersion。将它们与我们需要部署应用的 docker 镜像匹配起来,这里我们把 values.yaml 里的 image.repository 设置成 somefive/hello-world,image.tag设置为版本号:1.0.0,把 Chart.yaml 里的 AppVersion 也设置成 1.0.0 即可。

类似的,我们可以查看 service.yaml 内要部署的服务,其中的主要配置也在 values.yaml中。默认生成的服务将 80 端口暴露在 Kubernetes 集群内部。我们暂时不需要对这一部分进行修改。

由于部署的 hello-world 服务会从环境变量中读取 USERNAME 环境变量,所以将这个配置加入 deployment.yaml

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bxTv2C3b-1647060130216)(https://zhiyuanbang.feishu.cn/space/api/box/stream/download/asynccode/?code=OGNjMDQzOTRkNjI2MWJhZDk1ZWY4Yzk2ZjA1NDUwZjdfUFNkS1F4VVpKZklTbE1tVGt5UVFLNnpMVEpiODc3eUxfVG9rZW46Ym94Y25QWU1yY2I4ZUVjaDNDOFF0VHdBeU5jXzE2NDcwNjAxMjQ6MTY0NzA2MzcyNF9WNA)]

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

  1. 校验打包

在准备好我们的应用后,我们可以使用helm lint命令来粗略地检查一下制作的 Chart 有没有什么语法上的错误。

helm lint --strict my-hello-world

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-73KwbxXf-1647060130217)(https://zhiyuanbang.feishu.cn/space/api/box/stream/download/asynccode/?code=ZjlkNzUyNTJiMDAzNjUxZWJlMjc5NGYyOTE5MjRjYzJfbUhSMWpOcFpKeno1Rjl1ZGZEbHJJSFZ3RHFNaVloZGlfVG9rZW46Ym94Y25PdElVdXdFTHNaWXphSEtqbjZ4ZU5oXzE2NDcwNjAxMjQ6MTY0NzA2MzcyNF9WNA)]

如果没有问题的话,就可以使用 helm package 命令对我们的 Chart 文件夹进行打包,打包后我们可以得到一个 my-hello-world-0.1.0.tgz 的应用包。这个便是我们完成的应用了。

helm package my-hello-world

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fxQNdRxu-1647060130217)(https://zhiyuanbang.feishu.cn/space/api/box/stream/download/asynccode/?code=MzE2NWI4ODBlNmViMmEzNTQ1NzhmZDY0YjU1NjRkMDlfVFdueFNxSHZQd0ZQejhqR0hQbVJvUHFsVHMxUkZaOVRfVG9rZW46Ym94Y25aZkNrZHJWNUNMUVNPTU1rcFFEQ0ZnXzE2NDcwNjAxMjQ6MTY0NzA2MzcyNF9WNA)]

  1. 参数重载

虽然我们应用开发者把可配置的信息暴露在 values.yaml 中,用户使用应用的时候想要修改该怎么办呢?答案:用户只需要在 install 时使用 **--set** 参数,设置想要覆盖的参数即可。

应用开发者在 Chart 的 values 配置中只是提供了默认的安装参数,用户也可以使用-f参数在安装时指定自己的配置。类似的,如果用户可以用 upgrade 命令替代 install,实现在原有部署好的应用的基础上变更配置。

helm install my-app my-hello-world-0.1.0.tgz --set Username = "lilei"

helm install my-app-new my-hello-world-0.1.0.tgz -f values-lilei.yaml

helm upgrade my-app-new my-hello-world-0.1.0.tgz -f values-lilei.yaml

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2022-03-13 22:13:16  更:2022-03-13 22:16:17 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/16 2:16:22-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码