如何使用Helm2包管理器在Kubernetes集群上安装软件
介绍
Helm 是 Kubernetes 的包管理器,它允许开发人员和运营商更轻松地在 Kubernetes 集群上配置和部署应用程序。
在本教程中,我们将设置 Helm 并使用它来安装、重新配置、回滚,然后删除 Kubernetes Dashboard 应用程序 的实例。 仪表板是基于 Web 的官方 Kubernetes GUI。
有关 Helm 及其打包生态系统的概念概述,请阅读我们的文章 Helm 简介。
注意: 本教程介绍了在 Kubernetes 集群上安装软件的工作流程,使用版本 2 的 Helm 包管理器,需要 Tiller。 如果您正在使用 Helm 3 版,请遵循我们的教程 如何使用 Helm 3 包管理器 在 Kubernetes 集群上安装软件。
先决条件
对于本教程,您将需要:
启用了基于角色的访问控制 (RBAC) 的 Kubernetes 1.8+ 集群。
安装在本地计算机上的
kubectl
命令行工具,配置为连接到您的集群。 您可以在官方文档中阅读更多关于安装kubectl
的信息。您可以使用以下命令测试您的连接性:
kubectl cluster-info
如果您没有看到任何错误,则说明您已连接到集群。 如果您使用
kubectl
访问多个集群,请务必确认您选择了正确的集群上下文:kubectl config get-contexts
OutputCURRENT NAME CLUSTER AUTHINFO NAMESPACE * do-nyc1-k8s-example do-nyc1-k8s-example do-nyc1-k8s-example-admin docker-for-desktop docker-for-desktop-cluster docker-for-desktop
在此示例中,星号 (
*
) 表示我们已连接到do-nyc1-k8s-example
集群。 要切换集群,请运行:kubectl config use-context context-name
当您连接到正确的集群后,继续执行步骤 1 开始安装 Helm。
第 1 步 — 安装 Helm
首先,我们将在本地机器上安装 helm
命令行实用程序。 Helm 提供了一个脚本来处理 MacOS、Windows 或 Linux 上的安装过程。
切换到可写目录并从 Helm 的 GitHub 存储库下载脚本:
cd /tmp curl https://raw.githubusercontent.com/kubernetes/helm/master/scripts/get > install-helm.sh
使用 chmod
使脚本可执行:
chmod u+x install-helm.sh
此时,您可以使用您喜欢的文本编辑器打开脚本并检查它以确保它是安全的。 当你满意时,运行它:
./install-helm.sh
系统可能会提示您输入密码。 提供它并按 ENTER
。
Outputhelm installed into /usr/local/bin/helm Run 'helm init' to configure helm.
接下来,我们将通过在集群上安装一些 Helm 组件来完成安装。
第 2 步 — 安装 Tiller
Tiller 是在集群上运行的 helm
命令的伴侣,它接收来自 helm
的命令并直接与 Kubernetes API 通信以执行创建和删除资源的实际工作。 为了赋予 Tiller 在集群上运行所需的权限,我们将创建一个 Kubernetes serviceaccount
资源。
注意:我们将这个serviceaccount
绑定到cluster-admin集群角色。 这将使 tiller
服务超级用户访问集群并允许它在所有命名空间中安装所有资源类型。 这对于探索 Helm 来说很好,但您可能希望为生产 Kubernetes 集群提供更锁定的配置。
有关为 Tiller 设置不同 RBAC 场景的更多信息,请参阅 Helm RBAC 官方文档。
创建 分蘖 serviceaccount
:
kubectl -n kube-system create serviceaccount tiller
接下来,将 tiller serviceaccount
绑定到 cluster-admin 角色:
kubectl create clusterrolebinding tiller --clusterrole cluster-admin --serviceaccount=kube-system:tiller
现在我们可以运行 helm init
,它会在我们的集群上安装 Tiller,以及一些本地管理任务,例如下载 stable 存储库详细信息:
helm init --service-account tiller
Output. . . Tiller (the Helm server-side component) has been installed into your Kubernetes Cluster. Please note: by default, Tiller is deployed with an insecure 'allow unauthenticated users' policy. For more information on securing your installation see: https://docs.helm.sh/using_helm/#securing-your-helm-installation Happy Helming!
要验证 Tiller 是否正在运行,请列出 kube-system 命名空间中的 pod:
kubectl get pods --namespace kube-system
OutputNAME READY STATUS RESTARTS AGE . . . kube-dns-64f766c69c-rm9tz 3/3 Running 0 22m kube-proxy-worker-5884 1/1 Running 1 21m kube-proxy-worker-5885 1/1 Running 1 21m kubernetes-dashboard-7dd4fc69c8-c4gwk 1/1 Running 0 22m tiller-deploy-5c688d5f9b-lccsk 1/1 Running 0 40s
Tiller pod 名称以前缀 tiller-deploy-
开头。
现在我们已经安装了两个 Helm 组件,我们可以使用 helm
来安装我们的第一个应用程序。
第 3 步 — 安装 Helm Chart
Helm 软件包称为 charts。 Helm 预配置了一个名为 stable 的精选图表存储库。 您可以在他们的 GitHub 存储库 中浏览可用的图表 。 我们将以安装 Kubernetes Dashboard 为例。
使用 helm
从 stable
repo 安装 kubernetes-dashboard
包:
helm install stable/kubernetes-dashboard --name dashboard-demo
OutputNAME: dashboard-demo LAST DEPLOYED: Wed Aug 8 20:11:07 2018 NAMESPACE: default STATUS: DEPLOYED . . .
请注意上面示例输出中突出显示的 NAME
行。 在这种情况下,我们指定了名称 dashboard-demo
。 这是我们的 版本 的名称。 Helm release 是具有特定配置的一个图表的单一部署。 您可以部署同一图表的多个版本,每个版本都有自己的配置。
如果您没有使用 --name
指定您自己的发布名称,Helm 将为您创建一个随机名称。
我们可以向 Helm 询问此集群上的发布列表:
helm list
OutputNAME REVISION UPDATED STATUS CHART NAMESPACE dashboard-demo 1 Wed Aug 8 20:11:11 2018 DEPLOYED kubernetes-dashboard-0.7.1 default
我们现在可以使用 kubectl
来验证是否在集群上部署了新服务:
kubectl get services
OutputNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE dashboard-demo-kubernetes-dashboard ClusterIP 10.32.104.73 <none> 443/TCP 51s kubernetes ClusterIP 10.32.0.1 <none> 443/TCP 34m
请注意,默认情况下,与我们的版本对应的服务名称是 Helm 版本名称和图表名称的组合。
现在我们已经部署了应用程序,让我们使用 Helm 更改其配置并更新部署。
第 4 步 — 更新版本
helm upgrade
命令可用于升级具有新图表或更新图表的版本,或更新其配置选项。
我们将对我们的 dashboard-demo
版本进行简单更改以演示更新和回滚过程:我们将仪表板服务的名称更新为 dashboard
,而不是 dashboard-demo-kubernetes-dashboard
。
kubernetes-dashboard
图表提供了 fullnameOverride
配置选项来控制服务名称。 让我们使用此选项集运行 helm upgrade
:
helm upgrade dashboard-demo stable/kubernetes-dashboard --set fullnameOverride="dashboard"
您将看到类似于初始 helm install
步骤的输出。
检查您的 Kubernetes 服务是否反映了更新后的值:
kubectl get services
OutputNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.32.0.1 <none> 443/TCP 36m dashboard ClusterIP 10.32.198.148 <none> 443/TCP 40s
我们的服务名称已更新为新值。
注意: 此时您可能希望在浏览器中实际加载 Kubernetes Dashboard 并查看它。 为此,首先运行以下命令:
kubectl proxy
这将创建一个代理,让您可以从本地计算机访问远程集群资源。 根据前面的说明,您的仪表板服务被命名为 kubernetes-dashboard
,它在 default
命名空间中运行。 您现在可以通过以下 url 访问仪表板:
http://localhost:8001/api/v1/namespaces/default/services/https:dashboard:/proxy/
如有必要,将您自己的服务名称和命名空间替换为突出显示的部分。 实际使用仪表板的说明超出了本教程的范围,但您可以阅读 Kubernetes 仪表板官方文档 了解更多信息。
接下来我们将看看 Helm 回滚版本的能力。
第 5 步 — 回滚版本
当我们在上一步更新我们的 dashboard-demo
版本时,我们创建了该版本的第二个 修订版。 Helm 会保留以前版本的所有详细信息,以防您需要回滚到以前的配置或图表。
使用 helm list
再次检查发布:
helm list
OutputNAME REVISION UPDATED STATUS CHART NAMESPACE dashboard-demo 2 Wed Aug 8 20:13:15 2018 DEPLOYED kubernetes-dashboard-0.7.1 default
REVISION
列告诉我们这是第二次修订。
使用 helm rollback
回滚到第一个版本:
helm rollback dashboard-demo 1
您应该看到以下输出,表明回滚成功:
OutputRollback was a success! Happy Helming!
此时,如果您再次运行 kubectl get services
,您会注意到服务名称已更改回之前的值。 Helm 使用修订版 1 的配置重新部署了应用程序。
接下来,我们将研究使用 Helm 删除版本。
第 6 步 — 删除版本
可以使用 helm delete
命令删除 Helm 版本:
helm delete dashboard-demo
Outputrelease "dashboard-demo" deleted
尽管该版本已被删除并且仪表板应用程序不再运行,但 Helm 会保存所有修订信息,以防您想要重新部署该版本。 如果你现在尝试 helm install
一个新的 dashboard-demo
版本,你会得到一个错误:
Error: a release named dashboard-demo already exists.
如果您使用 --deleted
标志列出已删除的版本,您会看到该版本仍然存在:
helm list --deleted
OutputNAME REVISION UPDATED STATUS CHART NAMESPACE dashboard-demo 3 Wed Aug 8 20:15:21 2018 DELETED kubernetes-dashboard-0.7.1 default
要 really 删除版本并清除所有旧版本,请使用 --purge
标志和 helm delete
命令:
helm delete dashboard-demo --purge
现在版本已经真正被删除了,你可以重用版本名称。
结论
在本教程中,我们安装了 helm
命令行工具及其 tiller
配套服务。 我们还探索了安装、升级、回滚和删除 Helm 图表和版本。
有关 Helm 和 Helm 图表的更多信息,请参阅 Helm 官方文档。