如何使用Helm软件包管理器在Kubernetes集群上安装软件

Helm是Kubernetes的软件包管理器,允许开发人员和操作员更轻松地在Kubernetes集群上配置和部署应用程序。在本教程中,我们将安装Helm并使用它来安装,重新配置,回滚,然后删除...

介绍

Helm是Kubernetes的软件包管理器,允许开发人员和操作员更轻松地在Kubernetes集群上配置和部署应用程序。

在本教程中,我们将设置Helm并使用它来安装,重新配置,回滚,然后删除Kubernetes Dashboard应用程序的实例。 仪表板是基于Web的官方Kubernetes GUI。

有关Helm及其包装生态系统的概念性概述,请阅读我们的文章“Helm简介”

先决条件

在本教程中,您将需要:

  • 启用了基于角色的访问控制(RBAC)的Kubernetes 1.8+群集。
  • kubectl命令行工具安装在本地计算机上,配置为连接到您的群集。 您可以在官方文档中阅读有关安装kubectl更多信息。

    您可以使用以下命令测试连接:

    kubectl cluster-info
    

    如果您没有看到任何错误,则表示您已连接到群集。 如果使用kubectl访问多个集群, kubectl确保验证是否已选择正确的集群上下文:

    kubectl config get-contexts
    
    CURRENT   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

helm installed into /usr/local/bin/helm
Run 'helm init' to configure helm.

接下来,我们将通过在群集上安装一些Helm组件来完成安装。

第2步 - 安装分蘖

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,以及一些本地管理任务,例如下载稳定的 repo详细信息:

helm init --service-account tiller
. . .

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
NAME                                    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软件包称为图表 Helm预先配置了一个名为stable的策划图表存储库。 您可以在他们的GitHub仓库中浏览可用的图表。 我们将以Kubernetes仪表板为例进行安装。

使用helmstable repo安装kubernetes-dashboard包:

helm install stable/kubernetes-dashboard --name dashboard-demo
NAME:   dashboard-demo
LAST DEPLOYED: Wed Aug  8 20:11:07 2018
NAMESPACE: default
STATUS: DEPLOYED

. . .

注意NAME行,在上面的示例输出中突出显示。 在这种情况下,我们指定了名称dashboard-demo 这是我们发布的名称。 Helm 版本是具有特定配置的一个图表的单个部署。 您可以部署同一图表的多个版本,每个版本都有自己的配置。

如果您没有使用--name指定自己的版本名称,Helm将为您创建一个随机名称。

我们可以向Helm索取此群集上的发布列表:

helm list
NAME            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
NAME                                   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
NAME                   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仪表板并将其检出。 为此,请首先运行以下命令:

kubectl proxy

这将创建一个代理,允许您从本地计算机访问远程群集资源。 根据之前的说明,您的仪表板服务名为kubernetes-dashboard并且它在default命名空间中运行。 您现在可以访问以下网址的信息中心:

http://localhost:8001/api/v1/namespaces/default/services/https:dashboard:/proxy/

如有必要,请将自己的服务名称和名称空间替换为突出显示的部分。 实际使用仪表板的说明超出了本教程的范围,但您可以阅读官方Kubernetes仪表板文档以获取更多信息。

接下来我们将看看Helm回滚版本的能力。

第5步 - 回滚版本

当我们在上一步中更新我们的dashboard-demo版本时,我们创建了该版本的第二个版本 如果您需要回滚到先前的配置或图表,Helm会保留以前版本的所有详细信息。

使用helm list再次检查发布:

helm list
NAME            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

您应该看到以下输出,表明回滚成功:

Rollback was a success! Happy Helming!

此时,如果再次运行kubectl get services ,您会注意到服务名称已更改回其先前的值。 Helm已使用修订版1的配置重新部署了该应用程序。

接下来我们将研究使用Helm删除版本。

第6步 - 删除版本

可以使用helm delete命令删除Helm版本:

helm delete dashboard-demo
release "dashboard-demo" deleted

虽然已删除该版本并且仪表板应用程序不再运行,但Helm会保存所有修订信息,以防您要重新部署该版本。 如果您现在尝试helm install新的dashboard-demo版本,则会出现错误:

Error: a release named dashboard-demo already exists.

如果您使用--deleted标志列出已删除的版本,您将看到该版本仍然存在:

helm list --deleted
NAME            REVISION    UPDATED                     STATUS  CHART                       NAMESPACE
dashboard-demo  3           Wed Aug  8 20:15:21 2018    DELETED kubernetes-dashboard-0.7.1  default

真正删除发行版并清除所有旧版本,请使用带有helm delete命令的--purge标志:

helm delete dashboard-demo --purge

现在该版本已被真正删除,您可以重用该版本名称。

结论

在本教程中,我们安装了helm命令行工具及其tiller伴随服务。 我们还探讨了安装,升级,回滚和删除Helm图表和版本。

有关Helm和Helm图表的更多信息,请参阅官方Helm文档