Helm是Kubernetes的软件包管理器,允许开发人员和操作员更轻松地在Kubernetes集群上配置和部署应用程序。
在本教程中,我们将设置Helm并使用它来安装,重新配置,回滚,然后删除Kubernetes Dashboard应用程序的实例。仪表板是基于Web的官方Kubernetes GUI。
要完成本教程,您需要具备一台已经设置好可以使用sudo
命令的非root账号的服务器,并且已开启防火墙。没有服务器的同学可以在这里购买,不过我个人更推荐您使用免费的腾讯云开发者实验室进行试验,学会安装后再购买服务器。
在本教程中,您将需要:
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。
首先,我们将在本地计算机上安装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组件来完成安装。
Tiller是在您的群集上运行的helm
命令的伴侣,从helm
接收命令并直接与Kubernetes API通信,以执行创建和删除资源的实际工作。为了让Tiller获得在集群上运行所需的权限,我们将创建一个Kubernetes serviceaccount
资源。
注意:我们将此绑定serviceaccount
到群集管理群集角色。这将为tiller
服务超级用户提供对集群的访问权限,并允许它在所有名称空间中安装所有资源类型。这对于浏览Helm很好,但您可能需要为生产Kubernetes集群提供更加锁定的配置。
有关为Tiller设置不同RBAC方案的更多信息,请参阅官方Helm RBAC文档。
创建tiller serviceaccount
:
kubectl -n kube-system create serviceaccounttiller
接下来,将tiller serviceaccount
绑定到集群管理员角色:
kubectl create clusterrolebindingtiller --clusterrole cluster-admin --serviceaccount=kube-system:tiller
现在我们可以运行helm init
,在我们的集群上安装Tiller,以及一些本地管理任务,例如下载稳定的 repo详细信息:
helm init --service-accounttiller
. . .
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
用来安装我们的第一个应用程序了。
Helm软件包称为图表。Helm预先配置了一个名为stable的策划图表存储库。您可以在他们的GitHub仓库中浏览可用的图表。我们将以Kubernetes仪表板为例进行安装。
用helm
从stable
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来更改其配置并更新部署。
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回滚版本的能力。
当我们在上一步中更新了我们的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删除版本。
可以使用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文档。
想要了解更多关于使用Helm软件包管理器在Kubernetes集群上安装软件的相关教程,请前往腾讯云+社区学习更多知识。
参考文献:《How To Install Software on Kubernetes Clusters with the Helm Package Manager》
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。