前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何使用Helm软件包管理器在Kubernetes集群上安装软件

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

原创
作者头像
姚啊姚
修改2018-10-29 17:22:51
2K0
修改2018-10-29 17:22:51
举报

介绍

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

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

要完成本教程,您需要具备一台已经设置好可以使用sudo命令的非root账号的服务器,并且已开启防火墙。没有服务器的同学可以在这里购买,不过我个人更推荐您使用免费的腾讯云开发者实验室进行试验,学会安装后再购买服务器

准备

在本教程中,您将需要:

  • 启用了基于角色的访问控制(RBAC)的Kubernetes 1.8+群集。
  • 安装在本地计算机上的kubectl命令行工具,配置为连接到您的群集。您可以 在官方文档中阅读有关安装kubectl的更多信息。 您可以使用以下命令测试连接: kubectl cluster-info 如果您没有看到任何错误,则表示您已连接到群集。如果您用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存储库下载脚本:

代码语言:javascript
复制
cd /tmp
curl https://raw.githubusercontent.com/kubernetes/helm/master/scripts/get > install-helm.sh

chmod使脚本可执行:

代码语言:javascript
复制
chmod u+x install-helm.sh

此时,您可以使用自己喜欢的文本编辑器打开脚本并检查它以确保它是安全的。如果您满意,请运行它:

代码语言:javascript
复制
./install-helm.sh

系统可能会提示您输入密码。提供密码并按ENTER

代码语言:javascript
复制
helm installed into /usr/local/bin/helm
Run 'helm init' to configure helm.

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

第2步 - 安装tiller

Tiller是在您的群集上运行的helm命令的伴侣,从helm接收命令并直接与Kubernetes API通信,以执行创建和删除资源的实际工作。为了让Tiller获得在集群上运行所需的权限,我们将创建一个Kubernetes serviceaccount资源。

注意:我们将此绑定serviceaccount群集管理群集角色。这将为tiller服务超级用户提供对集群的访问权限,并允许它在所有名称空间中安装所有资源类型。这对于浏览Helm很好,但您可能需要为生产Kubernetes集群提供更加锁定的配置。

有关为Tiller设置不同RBAC方案的更多信息,请参阅官方Helm RBAC文档

创建tiller serviceaccount

代码语言:javascript
复制
kubectl -n kube-system create serviceaccounttiller

接下来,将tiller serviceaccount绑定到集群管理员角色:

代码语言:javascript
复制
kubectl create clusterrolebindingtiller --clusterrole cluster-admin --serviceaccount=kube-system:tiller

现在我们可以运行helm init,在我们的集群上安装Tiller,以及一些本地管理任务,例如下载稳定的 repo详细信息:

代码语言:javascript
复制
helm init --service-accounttiller
代码语言:javascript
复制
. . .
​
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

代码语言:javascript
复制
kubectl get pods --namespace kube-system
代码语言:javascript
复制
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仪表板为例进行安装。

helmstablerepo安装kubernetes-dashboard包:

代码语言:javascript
复制
helm install stable/kubernetes-dashboard --name dashboard-demo
代码语言:javascript
复制
NAME:   dashboard-demo
LAST DEPLOYED: Wed Aug  8 20:11:07 2018
NAMESPACE: default
STATUS: DEPLOYED
​
. . .

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

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

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

代码语言:javascript
复制
helm list
代码语言:javascript
复制
NAME            REVISION    UPDATED                     STATUS      CHART                       NAMESPACE
dashboard-demo    1           Wed Aug  8 20:11:11 2018    DEPLOYED    kubernetes-dashboard-0.7.1  default

我们现在可以用kubectl来验证集群上是否已部署新服务:

代码语言:javascript
复制
kubectl get services
代码语言:javascript
复制
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

代码语言:javascript
复制
helm upgrade dashboard-demo stable/kubernetes-dashboard --set fullnameOverride="dashboard"

您将看到类似于初始helm install步骤的输出。

检查您的Kubernetes服务是否反映了更新的值:

代码语言:javascript
复制
kubectl get services
代码语言:javascript
复制
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仪表板并将其检出。为此,请首先运行以下命令:

代码语言:javascript
复制
kubectl proxy

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

代码语言:javascript
复制
http://localhost:8001/api/v1/namespaces/default/services/https:dashboard:/proxy/

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

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

第5步 - 回滚版本

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

helm list来再次检查发布:

代码语言:javascript
复制
helm list
代码语言:javascript
复制
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来回滚到第一个版本:

代码语言:javascript
复制
helm rollback dashboard-demo 1

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

代码语言:javascript
复制
Rollback was a success! Happy Helming!

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

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

第6步 - 删除版本

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

代码语言:javascript
复制
helm delete dashboard-demo
代码语言:javascript
复制
release "dashboard-demo" deleted

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

代码语言:javascript
复制
Error: a release named dashboard-demo already exists.

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

代码语言:javascript
复制
helm list --deleted
代码语言:javascript
复制
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标志:

代码语言:javascript
复制
helm delete dashboard-demo --purge

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

结论

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

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

想要了解更多关于使用Helm软件包管理器在Kubernetes集群上安装软件的相关教程,请前往腾讯云+社区学习更多知识。


参考文献:《How To Install Software on Kubernetes Clusters with the Helm Package Manager》

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 介绍
  • 准备
  • 第1步 - 安装Helm
  • 第2步 - 安装tiller
  • 第3步 - 安装头盔图
  • 第4步 - 更新版本
  • 第5步 - 回滚版本
  • 第6步 - 删除版本
  • 结论
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档