这是什么舵?!
Kubernetes 应用很少(甚至几乎没有)只包含一个资源。举个简单的例子,你有一个运行应用的部署(Deployment)和一个用于暴露应用功能的服务(Service)。这就要求你要么使用一个包含部署和服务定义的清单文件(Manifest),要么使用两个单独的清单文件(每个资源一个)。
现在,假设你有多个应用程序,每个应用程序都需要多个清单文件才能运行。为了便于管理,你需要将它们分组到逻辑单元(或包)中。
此外,在运行微服务时,许多清单文件看起来非常相似,通常只有几个值或几行代码不同。可想而知,这很快就会变得难以管理。
这时 Helm 就派上用场了。虽然 Helm 并非新生事物,但在本文中,我将向您展示它的优势,以及如何使用一些更新的技术进一步改善 Kubernetes 体验……
请支持我们🙏
我们知道 Kubernetes 可能很复杂。因此,我们创建了 Cyclops,一个真正面向开发者的 Kubernetes 平台。它抽象化了 Kubernetes 的复杂性,让您可以通过用户界面部署和管理应用程序。由于其平台特性,用户界面本身具有高度可定制性——您可以根据自身需求进行更改。
我们正在将 Cyclops 开发成一个开源项目。如果您有兴趣尝试,可以在我们的代码仓库中找到快速入门指南🔗。如果您喜欢我们的项目,请考虑给我们点个赞⭐以示支持。
这是什么?!
Helm 帮助您管理 Kubernetes 应用程序 — Helm Charts 帮助您定义、安装和升级即使是最复杂的 Kubernetes 应用程序。
这是直接引自Helm网站的一段话🔗 ,让我们来“解读”一下它的含义……
软件包管理器
Helm 常被称为 Kubernetes 的包管理器,因为它允许你将创建应用程序的多个连接的清单分组到一个 Chart(包)中,从而使其更容易维护。
图表的结构大致如下:
my-chart
├── Chart.yaml
├── values.yaml
├── values.schema.json
└── templates
├── deployment.yaml
└── service.yaml
图表可以包含其他文件,但这些是必要的文件(例如,README.md完全符合 Helm 对图表的定义)。
该Chart.yaml文件可以被视为软件包的“元数据”,其中包含一些基本信息,例如名称、版本、维护者……
在这个/templates目录中,您可以找到构成应用程序的所有资源。所有清单文件都集中在这里(在本例中,只有一个部署文件和一个服务文件)。
kubectl图表可以让你将这些资源打包在一起,并通过一条命令将其安装到集群中,而无需单独使用和应用它们。
Helm之所以如此受欢迎,很大程度上要归功于其公开的Helm Charts仓库(例如ArtifactHub🔗或Bitnami🔗)。这使得用户能够使用其他人创建的复杂配置。许多公司会发布并维护其软件的Helm Charts,以便用户能够轻松地将其安装到自己的集群中。
模板引擎
Helm 的第二个主要特性是模板引擎。在上面的结构中,您可能已经注意到了该values.yaml文件。为了理解它的作用,让我们实际看一下我们的模板deployment.yaml。它可能看起来像这样:
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: {{ .Values.image }}
name: {{ .Values.name }}
spec:
replicas: {{ .Values.replicas }}
selector:
matchLabels:
app: {{ .Values.name }}
template:
metadata:
labels:
app: {{ .Values.name }}
spec:
containers:
- image: {{ .Values.image -}}:{{ .Values.version }}
name: {{ .Values.name }}
ports:
- containerPort: 80
name: http
你会注意到它看起来与你通常的部署清单(例如你可以在Kubernetes 文档🔗中找到的清单)略有不同。
这实际上是一个蓝图。Helm 允许你创建带有占位符的蓝图{{.Values.image}}。这些占位符的值在文件中定义values.yaml。
例如,values.yaml可能包含:
name: my-app
image: nginx
version: 1.14.2
replicas: 1
service: true
假设你有多个微服务,它们几乎都使用相同的 YAML 清单,只有少数几行或几个值有所不同。例如,它们可能只在镜像上有所差异。Helms 的模板引擎允许你为所有微服务使用相同的蓝图,并通过文件自定义具体细节values.yaml。
因此,如果您有多个微服务,则无需为每个微服务编写单独的 YAML 文件。只需创建一个模板,然后values.yaml根据需要为每个微服务进行调整即可。
开发者体验
虽然包和蓝图有助于处理大型清单文件,但对于经验不足的开发人员来说,更改此类结构中的值仍然可能是一个问题。如果您再次查看values.yaml上面的文件,很容易看出有人可能会误将字符串输入“true”为布尔值true,甚至是整数1。这是一个无心之失,但却可能耗费您数小时的调试时间。
这就是 ` values.schema.json<filename>` 的作用所在。在这个文件中,Helm 允许你定义值的类型及其限制——本质上是为值提供验证values.yaml。这使得开发人员更难犯下类似上述的错误。
但values.yaml上面的例子非常简单。你通常会找到更大的文件,其中包含更多的值(找到这些文件需要一些时间🔗)。
而这正是Cyclops🔗 的优势所在,它能进一步提升开发者的体验。Cyclops 允许您定义一个用户界面,隐藏大型模板的复杂性,并允许您定义开发者可以访问哪些字段。
截图展示了我之前用作示例的 Helm Chart,现在已用 Cyclops 渲染。您可以根据需要自定义此界面,添加更多(或更少😊)字段,让经验不足的开发人员在 Kubernetes 中部署应用程序时也能充满信心。
而独眼巨人并没有丢失验证结果,恰恰相反 → 现在它们会立即显示出来。
Cyclops 的优点在于,如果您已经熟悉 Helm,那么为您的用例创建 UI 会非常快捷简单,因为 Cyclops 会根据 Helm 渲染 UI values.schema.json。
需要说明的是,您可以导入自己已有的 Helm charts 到 Cyclops 中进行渲染!如果您将 charts 存储在私有仓库中,请查看文档🔗了解如何安全地连接它。
Cyclops 是开源的,快来试试吧!
开源嘉年华
Helm 是管理 Kubernetes 配置最流行的工具之一。它是CNCF的一个毕业项目,由Helm 社区维护。该项目是开源的,其 GitHub代码库拥有超过 2.6 万颗星和约 670 位贡献者——这足以证明其社区的规模。
虽然与 Helm 相比,Cyclops 是一个相对较新的项目,但它正沿着 Helm 的发展轨迹前进。Cyclops 已被 CNCF 接纳,并拥有一个快速发展的社区。
希望对你有帮助🙌
感谢阅读本文,希望对您有所帮助。如果您想成为 Cyclops 社区的一员,贡献代码、内容,甚至提出批评意见,请务必加入我们的Discord 社区🔗 ,并在代码仓库上点个赞🔗⭐
文章来源:https://dev.to/cyclops-ui/what-the-helm-155f
