如果你刚刚开始使用Kubernetes,你可能已经发现为应用程序创建完整的堆栈清单是多么具有挑战性。你花时间熟悉应用程序和服务的部署方式,这会变得容易得多,但即便如此,编写完整的清单也可能是一项艰巨的任务。
这就是Helm发挥作用的地方。Helm是Kubernetes的包管理器和应用程序管理工具,使部署应用程序和服务变得相当容易。
可以把Helm想象成Kubernetes式的apt或dnf。使用此应用程序,你可以更轻松地将预构建的应用程序部署(甚至自定义)到Kubernetes集群。
Helm背后的神奇之处在于Helm Charts,它是一个预先配置的资源的打包集合,用于部署应用程序和服务。通过使用Helm,你可以显著提高Kubernetes的生产效率,同时也可以更轻松地一次又一次地重新创建成功的部署。
让我们了解一下安装Helm的过程,使用它查找并下载Helm chart,然后使用这些chart将应用程序部署到Kubernetes集群。
Helm Chart
让我们先谈谈Helm chart的结构。典型的Helm chart由以下文件组成:
——.helmignore–:包含打包chart时将被忽略的所有文件。
——Chart.yaml:包含有关正在打包的chart的所有信息(例如类型、版本和appVersion)。
——Values.yaml:包含要注入模板的所有定义。
——charts:包含chart所依赖的其他charts的目录。
——templates:存放要部署的清单的目录。
创建或下载chart后,目录结构可能如下所示:
├── charts
├── Chart.yaml
├── templates
│ ├── deployment.yaml
│ ├── _helpers.tpl
│ ├── hpa.yaml
│ ├── ingress.yaml
│ ├── NOTES.txt
│ ├── serviceaccount.yaml
│ ├── service.yaml
│ └── tests
│ └── test-connection.yaml
└── values.yaml
安装Helm
在安装Helm之前,你必须首先确保你已经安装了Kubernetes。一旦Kubernetes启动并运行,就可以安装Helm了。
Helm的安装非常简单。登录到Kubernetes机器(你将从中开发)并发出以下命令:
curl https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 |bash
系统会提示你输入管理员密码。一旦成功验证,安装将启动并完成。然后,你可以使用以下命令验证安装:
helm version --short
你应该看到:
v3.8.1+g5cb9af4
这表明,Helm已经安装好了。
下载稳定存储库
下一个任务是下载稳定的存储库(其中包含大量预先配置的Helm charts)。要执行此操作,请发出以下命令:
helm repo add stable https://charts.helm.sh/stable
使用以下命令测试以确保已成功下载存储库:
helm repo list
你应该看到:
1 2 | NAME URL stable https://charts.helm.sh/stable |
如何在存储库中搜索chart
如果你想了解稳定存储库中有哪些chart可用,请发出以下命令:
helm search repo stable
当你运行该搜索命令时,你将看到大多数chart都已弃用(图1)。
图1:在稳定存储库中发现的弃用Helm charts。
其原因是CNCF不再愿意支付单个集中式存储库的成本上升。因此,这些chart现在通过几个不同的组织托管在不同的存储库中。
幸运的是,在ArtifactHub中有一个解决方案。在这个网站上,你可以搜索任何你想象得到的Helm chart。
例如,假设想下载Kubernetes仪表板的Helm char,可以去ArtifactHub,搜索该应用程序,然后查看chart的所有必要信息。甚至还有一个安装链接,弹出一个窗口,提供安装repo和图chart所需的命令(图2)。
图2:Kubernetes仪表板的安装说明。
要安装Helm chart,首先使用以下命令添加存储库:
helm repo add k8s-dashboard https://kubernetes.github.io/dashboard
立即用以下内容更新存储库:
helm repo update
使用以下内容搜索新添加的存储库:
helm search repo k8s-dashboard
你应该看到存储库中包含的所有应用程序(在本例中,只有一个)。
添加存储库后,使用以下内容安装chart:
helm install my-kubernetes-dashboard k8s-dashboard/kubernetes-dashboard --version 5.3.1
my kubernetes dashboard是你为chart指定的唯一名称(这使得可以多次下载chart)。下载chart可能需要一些时间(取决于文件的大小和数量)。
在~/。cache/helm/repository/directory,你应该会看到kubernetes-dashboard-5.3.1.tgz文件。使用以下命令解压缩该文件:
tar xvzf ~/.cache/helm/repository/kubernetes-dashboard-5.3.1.tgz
现在,ni 应该在当前工作目录中看到一个新目录kubernetes dashboard。该目录的结构如下所示:
├── Chart.lock
├── charts
│ └── metrics-server
│ ├── Chart.yaml
│ ├── ci
│ │ └── ci-values.yaml
│ ├── README.md
│ ├── templates
│ │ ├── apiservice.yaml
│ │ ├── clusterrole-aggregated-reader.yaml
│ │ ├── clusterrolebinding-auth-delegator.yaml
│ │ ├── clusterrolebinding.yaml
│ │ ├── clusterrole.yaml
│ │ ├── deployment.yaml
│ │ ├── _helpers.tpl
│ │ ├── NOTES.txt
│ │ ├── pdb.yaml
│ │ ├── psp.yaml
│ │ ├── rolebinding.yaml
│ │ ├── serviceaccount.yaml
│ │ └── service.yaml
│ └── values.yaml
├── Chart.yaml
├── README.md
├── templates
│ ├── clusterrolebinding-metrics.yaml
│ ├── clusterrolebinding-readonly.yaml
│ ├── clusterrole-metrics.yaml
│ ├── clusterrole-readonly.yaml
│ ├── configmap.yaml
│ ├── deployment.yaml
│ ├── _helpers.tpl
│ ├── ingress.yaml
│ ├── networkpolicy.yaml
│ ├── NOTES.txt
│ ├── pdb.yaml
│ ├── psp.yaml
│ ├── rolebinding.yaml
│ ├── role.yaml
│ ├── secret.yaml
│ ├── serviceaccount.yaml
│ ├── servicemonitor.yaml
│ ├── service.yaml
│ └── _tplvalues.tpl
└── values.yaml
你可以梳理这些文件,并对部署进行必要的更改。
安装完chart后,你将在底部看到部署说明。例如,Kubernetes仪表板部署是通过以下命令处理的。
通过运行以下命令获取Kubernetes仪表板URL:
export POD_NAME=$(kubectl get pods -n default -l "app.kubernetes.io/name=kubernetes-dashboard,app.kubernetes.io/instance=my-kubernetes-dashboard" -o jsonpath="{.items[0].metadata.name}")
如果pod成功运行,你应该看到如下输出:
echo https://127.0.0.1:8443/
最后,将本地端口转发到pod中的一个端口:
kubectl -n default port-forward $POD_NAME 8443:8443
一切就绪并运行后,你应该能够访问Kubernetes仪表板(或与Helm一起部署的任何应用程序/服务)。
这就是你开始与Helm合作的方式。熟悉这个Kubernetes包管理系统,你就可以节省时间和精力来部署Kubernetes。
即使您实际上没有使用Helm charts部署应用程序,这也是了解创建Kubernetes清单的细节的好方法。下载各种chart,并研究Chart.yaml文件,以了解有关如何创建这些清单的更多信息。
原文链接:
https://thenewstack.io/get-started-with-the-helm-kubernetes-package-manager/