官网地址: 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对象。
下载地址: https://github.com/helm/helm/releases
Chart 代表着 Helm 包。它包含在 Kubernetes 集群内部运行应用程序,工具或服务所需的所有资源定义。你可以把它看作是 Homebrew formula,Apt dpkg,或 Yum RPM 在Kubernetes 中的等价物。
Repository(仓库) 是用来存放和共享 charts 的地方。它就像 Perl 的 CPAN 档案库网络 或是 Fedora 的 软件包仓库,只不过它是供 Kubernetes 包所使用的。
Release 是运行在 Kubernetes 集群中的 chart 的实例。一个 chart 通常可以在同一个集群中安装多次。每一次安装都会创建一个新的 release。以 MySQL chart为例,如果你想在你的集群中运行两个数据库,你可以安装该chart两次。每一个数据库都会拥有它自己的 release 和 release name。
Helm 自带一个强大的搜索命令,可以用来从两种来源中进行搜索:
#从 Artifact Hub 中查找并列出 helm charts。 Artifact Hub中存放了大量不同的仓库。
shhelm search hub
从你添加(使用 helm repo add
)到本地 helm 客户端中的仓库中进行查找。该命令基于本地数据进行搜索,无需连接互联网。
shhelm search repo
shhelm install nginx bitnami/nginx
shhelm list
jshelm status nginx
jshelm uninstall nginx
上述安装方式只会使用 chart 的默认配置选项。很多时候,我们需要自定义 chart 来指定我们想要的配置。
shhelm create app
jsapp/
Chart.yaml
values.yaml
charts/
templates/
...
templates/
目录包括了模板文件。当Helm评估chart时,会通过模板渲染引擎将所有文件发送到templates/
目录中。 然后收集模板的结果并发送给Kubernetes。
values.yaml
文件也导入到了模板。这个文件包含了chart的 默认值 。这些值会在用户执行helm install
或 helm upgrade
时被覆盖。
Chart.yaml
文件包含了该chart的描述。你可以从模板中访问它。charts/
目录 可以 包含其他的chart(称之为 子chart)。
编写 namespace.yaml
ymlapiVersion: v1
kind: Namespace
metadata:
name: {{ .Chart.Name }}
namespace: {{ .Values.namespace }}
编写 deployment.yml
ymlapiVersion: 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
ymlapiVersion: 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
ymlapiVersion: 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
ymlreplicas: 1
namespace: app
image: nginx:1.19
imagePullPolicy: IfNotPresent
restartPolicy: Always
containerPort: 80
service:
port: 80
type: ClusterIP
jshelm lint app
jshelm package app
jshelm install app myapp-1.tgz
本文作者:松轩(^U^)
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!