编辑
2023-06-15
K8S
00
请注意,本文编写于 587 天前,最后修改于 587 天前,其中某些信息可能已经过时。

目录

1.简介
2.安装Helm
3.概念
4.使用Helm
4.1搜索 charts
4.2安装
5.查看列表
6.查看状态
7.卸载
8.安装自定义 Chart
8.1
8.2查看 chart 目录结构
8.3 自定义模板
9.验证是否存在错误
10.打包自定义 chart
11.安装 chart

1.简介

​ 官网地址: https://helm.sh/zh/

​ Helm是一个Kubernetes应用程序包管理工具,它允许你轻松管理和部署Kubernetes应用程序。Helm通过使用称为Charts的预定义模板来简化Kubernetes应用程序的部署和管理。Chart包含了一组Kubernetes对象定义,可以描述一个应用程序的完整部署和资源需求,包括Deployment、Service、ConfigMap、Secret等。使用Helm,你可以轻松地安装、升级、卸载和回滚Kubernetes应用程序。

同时,Helm还提供了一些便捷的功能,如依赖管理、全局变量、条件渲染等,可以帮助你更好地管理应用程序的部署。Helm有两个主要的组件:Helm客户端(helm)和Helm服务器(Tiller)。Helm客户端可以在本地运行,而Tiller则运行在Kubernetes集群中,并负责将Charts转换为Kubernetes对象。

2.安装Helm

下载地址: https://github.com/helm/helm/releases

3.概念

  • Chart 代表着 Helm 包。它包含在 Kubernetes 集群内部运行应用程序,工具或服务所需的所有资源定义。你可以把它看作是 Homebrew formula,Apt dpkg,或 Yum RPM 在Kubernetes 中的等价物。

  • Repository(仓库) 是用来存放和共享 charts 的地方。它就像 Perl 的 CPAN 档案库网络 或是 Fedora 的 软件包仓库,只不过它是供 Kubernetes 包所使用的。

  • Release 是运行在 Kubernetes 集群中的 chart 的实例。一个 chart 通常可以在同一个集群中安装多次。每一次安装都会创建一个新的 release。以 MySQL chart为例,如果你想在你的集群中运行两个数据库,你可以安装该chart两次。每一个数据库都会拥有它自己的 releaserelease name

4.使用Helm

4.1搜索 charts

Helm 自带一个强大的搜索命令,可以用来从两种来源中进行搜索:

#从 Artifact Hub 中查找并列出 helm charts。 Artifact Hub中存放了大量不同的仓库。

sh
helm search hub

从你添加(使用 helm repo add)到本地 helm 客户端中的仓库中进行查找。该命令基于本地数据进行搜索,无需连接互联网。

sh
helm search repo

4.2安装

sh
helm install nginx bitnami/nginx

image.png

5.查看列表

sh
helm list

6.查看状态

js
helm status nginx

7.卸载

js
helm uninstall nginx

8.安装自定义 Chart

8.1

上述安装方式只会使用 chart 的默认配置选项。很多时候,我们需要自定义 chart 来指定我们想要的配置。

sh
helm create app

8.2查看 chart 目录结构

js
app/ Chart.yaml values.yaml charts/ templates/ ...
  • templates/ 目录包括了模板文件。当Helm评估chart时,会通过模板渲染引擎将所有文件发送到templates/目录中。 然后收集模板的结果并发送给Kubernetes。

  • values.yaml 文件也导入到了模板。这个文件包含了chart的 默认值 。这些值会在用户执行helm installhelm upgrade时被覆盖。

  • Chart.yaml 文件包含了该chart的描述。你可以从模板中访问它。charts/目录 可以 包含其他的chart(称之为 子chart)。

8.3 自定义模板

编写 namespace.yaml

yml
apiVersion: v1 kind: Namespace metadata: name: {{ .Chart.Name }} namespace: {{ .Values.namespace }}

编写 deployment.yml

yml
apiVersion: apps/v1 kind: Deployment metadata: name: {{ .Chart.Name}} namespace: {{.Values.namespace}} labels: app: {{ .Chart.Name}} spec: replicas: {{ .Values.replicas }} template: metadata: name: {{ .Chart.Name}} labels: app: {{ .Chart.Name}} spec: containers: - name: {{ .Chart.Name}} image: {{ .Values.image}} imagePullPolicy: {{.Values.imagePullPolicy}} ports: - containerPort: {{.Values.containerPort}} restartPolicy: {{ .Values.restartPolicy }} selector: matchLabels: app: {{ .Chart.Name}}

编写 service.yml

yml
apiVersion: v1 kind: Service metadata: name: {{.Chart.Name}} namespace: {{.Values.namespace}} spec: selector: app: {{.Chart.Name}} ports: - port: {{.Values.service.port}} targetPort: {{.Values.containerPort}} type: {{ .Values.service.type }}

编写 Chart.yml

yml
apiVersion: v2 name: app description: A Helm chart for Kubernetes # A chart can be either an 'application' or a 'library' chart. # # Application charts are a collection of templates that can be packaged into versioned archives # to be deployed. # # Library charts provide useful utilities or functions for the chart developer. They're included as # a dependency of application charts to inject those utilities and functions into the rendering # pipeline. Library charts do not define any templates and therefore cannot be deployed. type: application # This is the chart version. This version number should be incremented each time you make changes # to the chart and its templates, including the app version. # Versions are expected to follow Semantic Versioning (https://semver.org/) version: 0.1.0 # This is the version number of the application being deployed. This version number should be # incremented each time you make changes to the application. Versions are not expected to # follow Semantic Versioning. They should reflect the version the application is using. # It is recommended to use it with quotes. appVersion: "1.16.0"

编写 values.yaml

yml
replicas: 1 namespace: app image: nginx:1.19 imagePullPolicy: IfNotPresent restartPolicy: Always containerPort: 80 service: port: 80 type: ClusterIP

9.验证是否存在错误

js
helm lint app

10.打包自定义 chart

js
helm package app

11.安装 chart

js
helm install app myapp-1.tgz

本文作者:松轩(^U^)

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!

Document