前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。
简介
Helm 是 Kubernetes 的一个包管理工具,允许开发人员和运维人员更轻松地在 Kubernetes 集群上配置和部署应用程序。
在本教程中,我们将设置 Helm,并使用它来安装、重新配置、回滚,然后删除 Kubernetes 仪表板应用程序的一个实例。该仪表板是官方基于 Web 的 Kubernetes 图形用户界面。
如果您正在寻找托管的 Kubernetes 服务,请查看我们专为增长而构建的简单的托管 Kubernetes 服务。
先决条件
在本教程中,您将需要:
-
启用基于角色的访问控制(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 仓库下载脚本:
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
Tiller 是 helm
命令的伴侣,运行在您的集群上,接收来自 helm
的命令,并直接与 Kubernetes API 通信来执行创建和删除资源的实际工作。为了给 Tiller 运行在集群上所需的权限,我们将创建一个 Kubernetes serviceaccount
资源。
创建 tiller 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
. . .
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 命名空间中的 pods:
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 Chart
Helm 软件包被称为 charts。Helm 预先配置了一个经过筛选的 chart 仓库,名为 stable。您可以在他们的 GitHub 仓库中浏览可用的 charts。我们将以安装 Kubernetes 仪表板为例。
使用 helm
从 stable
仓库安装 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
。这是我们的 release 的名称。Helm release 是一个具有特定配置的单个 chart 部署。您可以部署同一 chart 的多个 releases,每个 release 都有自己的配置。
如果您不使用 --name
指定自己的 release 名称,Helm 将为您创建一个随机名称。
我们可以询问 Helm 在此集群上的 release 列表:
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
请注意,默认情况下,与我们的 release 对应的服务名称是 Helm release 名称和 chart 名称的组合。
现在我们已经部署了应用程序,让我们使用 Helm 更改其配置并更新部署。
步骤 4 — 更新 Release
helm upgrade
命令可用于使用新的或更新的 chart 升级 release,或更新其配置选项。
我们将对我们的 dashboard-demo
release 进行简单更改,以演示更新和回滚过程:我们将更新仪表板服务的名称为 dashboard
,而不是 dashboard-demo-kubernetes-dashboard
。
kubernetes-dashboard
chart 提供了 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
我们的服务名称已更新为新值。
接下来,我们将研究 Helm 回滚 release 的能力。
步骤 5 — 回滚 Release
在上一步中更新我们的 dashboard-demo
release 时,我们创建了第二个 revision。Helm 保留了以前 release 的所有详细信息,以防您需要回滚到先前的配置或 chart。
使用 helm list
再次检查 release:
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
列告诉我们这现在是第二个 revision。
使用 helm rollback
回滚到第一个 revision:
helm rollback dashboard-demo 1
您应该会看到以下输出,表示回滚成功:
Rollback was a success! Happy Helming!
此时,如果您再次运行 kubectl get services
,您将注意到服务名称已更改回其先前的值。Helm 已使用 revision 1 的配置重新部署了应用程序。
接下来,我们将研究使用 Helm 删除 releases。
步骤 6 — 删除 Release
Helm releases 可以使用 helm delete
命令删除:
helm delete dashboard-demo
release "dashboard-demo" deleted
尽管 release 已被删除,仪表板应用程序不再运行,但 Helm 保存了所有 revision 信息,以防您想要重新部署 release。如果您现在尝试 helm install
一个新的 dashboard-demo
release,您将收到错误:
Error: a release named dashboard-demo already exists.
如果您使用 --deleted
标志列出已删除的 releases,您将看到 release 仍然存在:
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
要真正删除 release 并清除所有旧的 revisions,请使用 helm delete
命令的 --purge
标志:
helm delete dashboard-demo --purge
现在 release 已真正被删除,您可以重用 release 名称。
结论
在本教程中,我们安装了 helm
命令行工具及其 tiller
伴侣服务。我们还探讨了安装、升级、回滚和删除 Helm charts 和 releases。
有关 Helm 和 Helm charts 的更多信息,请参阅官方 Helm 文档。