介绍
Helm是Kubernetes的软件包管理器,允许开发人员和操作员更轻松地在Kubernetes集群上配置和部署应用程序。
在本教程中,我们将设置Helm并使用它来安装,重新配置,回滚,然后删除Kubernetes Dashboard应用程序的实例。 仪表板是基于Web的官方Kubernetes GUI。
有关Helm及其包装生态系统的概念性概述,请阅读我们的文章 。
先决条件
在本教程中,您将需要:
- 启用了基于角色的访问控制(RBAC)的Kubernetes 1.8+群集。
kubectl
命令行工具安装在本地计算机上,配置为连接到您的群集。 您可以在官方文档中阅读有关安装kubectl
更多信息。您可以使用以下命令测试连接:
kubectl cluster-info
如果您没有看到任何错误,则表示您已连接到群集。 如果使用
kubectl
访问多个集群,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是在集群上运行的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
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软件包称为图表 。 Helm预先配置了一个名为stable的策划图表存储库。 您可以在他们的GitHub仓库中浏览可用的图表。 我们将以Kubernetes仪表板为例进行安装。
使用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 版本是具有特定配置的一个图表的单个部署。 您可以部署同一图表的多个版本,每个版本都有自己的配置。
如果您没有使用--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仪表板并将其检出。 为此,请首先运行以下命令:
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
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
要真正删除发行版并清除所有旧版本,请使用带有helm delete
命令的--purge
标志:
helm delete dashboard-demo --purge
现在该版本已被真正删除,您可以重用该版本名称。
结论
在本教程中,我们安装了helm
命令行工具及其tiller
伴随服务。 我们还探讨了安装,升级,回滚和删除Helm图表和版本。
有关Helm和Helm图表的更多信息,请参阅官方Helm文档 。