Helm 简介
Helm 是 Kubernetes 的包管理工具,用于创建、打包和部署应用程序。它使用称为 Chart 的打包文件来描述 Kubernetes 资源对象的集合,从而简化了 Kubernetes 应用程序的部署和管理。
Helm 包含两个组件:
Helm 客户端:用于创建、打包和部署 Chart。
Tiller 服务器:在 Kubernetes 集群中运行,负责管理已安装的 Chart。(Helm 3 中,Tiller 服务器被移除,因此不再需要单独安装 Tiller)
Helm 客户端与 Tiller 服务器通过 Kubernetes API 通信,以创建、更新和删除 Kubernetes 资源对象。
Helm 架构
以下是 Helm 的架构图:
Helm 客户端通过与 Chart 存储库通信获取 Chart,然后使用 Tiller 服务器将 Chart 安装到 Kubernetes 集群中。Helm 客户端与 Tiller 服务器之间的通信通过 Kubernetes API 完成。
Helm 安装部署教程
如何在 Kubernetes 集群中安装和使用 Helm。
步骤1:安装 Helm 客户端
要安装 Helm 客户端,请访问 Helm Releases 页面,下载适用于您操作系统的最新版本的 Helm 客户端。
在 Linux 上,您可以使用以下命令下载和安装 Helm:
Kubernetes集群(版本为1.8或更高版本)
kubectl命令行工具
curl命令行工具
首先,我们需要从Helm官方网站下载Helm二进制文件。请根据您的操作系统下载相应的二进制文件。例如,在Linux系统上,我们可以使用以下命令来下载Helm v3.7.0:
curl https://get.helm.sh/helm-v3.7.0-linux-amd64.tar.gz -o helm.tar.gz
然后,我们需要将二进制文件解压缩并将可执行文件移动到系统路径中。例如,在Linux系统上,我们可以使用以下命令:
tar -zxvf helm.tar.gz
sudo mv linux-amd64/helm /usr/local/bin/helm
验证 Helm 是否正确安装:
$ helm version
version.BuildInfo{Version:"v3.7.1", GitCommit:"7c41e2e8c431300e09b832f417b56bab5f61cae6", GitTreeState:"clean", GoVersion:"go1.17.4"}
步骤2:安装 Tiller 服务器(helm3不用执行)
在 Helm 3 中,Tiller 服务器被移除,因此不再需要单独安装 Tiller。相反,Helm 3 使用 Kubernetes 的原生机制与 Kubernetes API 通信,以管理已安装的 Chart。
步骤3:创建 Chart
要创建 Chart,请使用 Helm CLI 工具创建一个名为“mychart”的新 Chart:
$ helm create mychart
这将在当前目录中创建一个名为“mychart”的新 Chart 目录,其中包含一些默认的 Chart 文件和目录。
我们可以使用以下命令查看Chart的目录结构:
输出应如下所示:
mychart
├── Chart.yaml
├── charts
├── templates
│ ├── NOTES.txt
│ ├── _helpers.tpl
│ ├── deployment.yaml
│ ├── ingress.yaml
│ ├── service.yaml
│ └── serviceaccount.yaml
└── values.yaml
Chart.yaml: Chart的元数据,包括Chart名称、版本、描述、维护者等信息。
values.yaml: 包含Chart的默认值和配置选项。使用者可以通过自定义values来覆盖默认值。
charts/: 包含Chart所依赖的其他Chart。这些依赖项也称为子Chart。
templates/: 包含Kubernetes资源的模板文件。这些模板文件使用Go语言的模板引擎来渲染Kubernetes YAML文件。
helpers/: 包含一些通用的Go语言模板文件,可以在其他模板文件中重用。
LICENSE: Chart的许可证。
README.md: Chart的文档,包括如何使用Chart、如何配置Chart等等。
下面是一些常用的目录和文件:
templates/deployment.yaml: 用于定义Kubernetes Deployment资源的模板文件。
templates/service.yaml: 用于定义Kubernetes Service资源的模板文件。
templates/ingress.yaml: 用于定义Kubernetes Ingress资源的模板文件。
templates/configmap.yaml: 用于定义Kubernetes ConfigMap资源的模板文件。
templates/secret.yaml: 用于定义Kubernetes Secret资源的模板文件。
values.yaml: 包含Chart的默认值和配置选项。使用者可以通过自定义values来覆盖默认值。
Chart.yaml: Chart的元数据,包括Chart名称、版本、描述、维护者等信息。
该目录包含了一些默认的Kubernetes资源,例如Deployment、Service和Ingress。这些资源的定义位于templates目录中。
部署应用
创建 Helm Chart
在 Helm 中,我们使用 Chart 来打包应用,类似于 Kubernetes 的 Deployment。Chart 中包含了应用所需要的所有资源和配置,方便部署和管理。
首先,我们需要创建一个 Helm Chart。在终端中运行以下命令:
$ helm create mywebapp
这会在当前目录下创建一个名为 mywebapp 的目录,其中包含了 Chart 所需的文件和目录结构。
4.2 配置 Chart
接下来,我们需要配置 Chart,指定应用名称、镜像等信息。在 mywebapp 目录下,打开 values.yaml 文件,将其修改为如下内容:
replicaCount: 1
image:
repository: nginx
tag: stable
pullPolicy: IfNotPresent
nameOverride: ""
fullnameOverride: ""
service:
type: ClusterIP
port: 80
ingress:
enabled: false
annotations: {}
path: /
hosts:
- chart-example.local
tls: []
resources:
limits:
cpu: 100m
memory: 128Mi
requests:
cpu: 100m
memory: 128Mi
nodeSelector: {}
tolerations: []
affinity: {}
在这里,我们指定了应用使用的镜像为 nginx 的 stable 版本,并配置了服务类型、资源限制等信息。具体内容可以根据实际情况进行修改。
安装 Chart
接下来,我们就可以使用 Helm 来安装 Chart。在 mywebapp 目录下,运行以下命令:
$ helm install mywebapp .
这会将 Chart 打包成一个 Helm Release,并将其部署到 Kubernetes 集群中。你可以通过以下命令查看该 Release 的状态:
$ helm status mywebapp
如果一切正常,你应该能够看到输出类似于以下内容:
NAME: mywebapp
LAST DEPLOYED: Wed Dec 22 10:34:07 2021
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
1. Get the application URL by running these commands:
export POD_NAME=$(kubectl get pods --namespace default -l "app.kubernetes.io/name=mywebapp,app.kubernetes.io/instance=mywebapp" -o jsonpath="{.items[0].metadata.name}")
echo "Visit http://127.0.0.1:8080 to use your application"
kubectl --namespace default port-forward $POD_NAME 8080:80
这表示应用已经成功部署到 Kubernetes 集群中了。
卸载 Chart
当你不再需要该应用时,可以使用以下命令将其卸载:
$ helm uninstall mywebapp
这会删除所有与该 Release 相关的资源和对象,包括应用的所有 Pod、Service、Deployment 等。
部署应用程序
现在可以使用Helm部署应用程序了。例如,您可以使用Helm部署Nginx:
helm install nginx stable/nginx-ingress
此命令将安装Nginx Ingress Controller到Kubernetes集群中。您可以使用kubectl命令检查它是否成功安装:
kubectl get pods
您应该看到一个名为nginx-ingress-controller的Pod在运行。
同样,您可以使用Helm部署其他应用程序,例如WordPress,Joomla,GitLab等等。只需在命令中指定相应的chart即可。
helm install wordpress stable/wordpress
helm install joomla stable/joomla
helm install gitlab gitlab/gitlab
这些命令将安装相应的应用程序,并为它们创建Kubernetes资源。安装完成后,您可以使用kubectl命令检查是否已成功创建资源。
删除应用程序
如果您想从Kubernetes集群中删除应用程序,您可以使用Helm删除命令。
例如,如果您要删除WordPress应用程序,可以运行以下命令:
helm delete wordpress
这将删除Kubernetes集群中与该应用程序相关的所有资源。同样,您可以使用相应的命令删除其他应用程序。
通过使用Helm,您可以更轻松地管理Kubernetes应用程序。Helm提供了一种简单而灵活的方法来安装,升级和删除Kubernetes应用程序。与手动创建和管理Kubernetes资源相比,使用Helm可以大大提高生产力,并简化管理过程。