[译] 总记不住 Helm 和 kubectl 命令?这场超市购物之旅可以帮你
最近,我丈夫即将要去面试,他要在电脑上运行一些基本命令。他对面试很焦虑,但他学习和记忆事物的最好方法一直是把他不知道的东西等同于他非常熟悉的东西。因为我们的谈话发生逛超市期间,试图决定当晚做什么菜之后,突然启发了我把kubectl和Helm命令等同于一次普通的超市购物之行,于是这篇文章就诞生了。
首先,我先简单介绍一下Helm和kubectl。
Helm是一个在Kubernetes中用于管理应用程序的工具。你可以通过应用程序地信息简单地部署chart并允许它们在你的Kubernetes环境中启动并且预配置,这一过程仅需几分钟。当你正在学习一些新东西时,查看chart示例总是很有帮助,你可以通过实例了解它们是如何使用的,所以如果你有时间的话可以看看这些chart:
https://github.com/helm/charts/tree/master/stable
kubectl是Kubernetes环境中的命令行交互工具,你可以使用它配置和管理你的集群。它确实需要一些配置才能在环境中工作,建议你仔细查看文档以确定你所需的配置:
https://kubernetes.io/docs/reference/kubectl/overview/
我将在例子中使用命名空间,如果你想详细了解命名空间的入门知识可以查看我们的往期文章: 超长干货 | Kubernetes命名空间详解
既然我们已经了解了所有基本概念,那么让我们开始了解kubectl和Helm的基本命令吧!
购物前的准备:Helm list
在一个使用Helm部署的应用程序,list提供了该应用程序当前版本的详细信息。在本例中,我有一个部署的应用程序——Jenkins CI/CD应用程序。运行基本的list命令一般都在默认的命名空间中,由于我没有在该命名空间中部署任何应用程序,因此没有任何输出:
$ helm list NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
但是,如果我使用一个额外的flag运行该命令,我的应用程序及其信息将会显示出来:
$ helm list --all-namespaces NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION jenkins jenkins 1 2020-01-18 16:18:07 EST deployed jenkins-1.9.4 lts
最后,我可以让list命令只检查我想要的命名空间的信息:
$ helm list --namespace jenkins NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION jenkins jenkins 1 2020-01-18 16:18:07 EST deployed jenkins-1.9.4 lts
现在我有了一个列表,并且清晰地了解到列表的内容,那么我可以使用get命令获取我的项目了。先从Kubernetes集群说起,我可以从它那里得到什么?
获取商品状态:Kubectl get
$ kubectl get namespaces NAME STATUS AGE default Active 53m jenkins Active 44m kube-node-lease Active 53m kube-public Active 53m kube-system Active 53m
现在在我的环境中有许多正在运行的命名空间,我将获取节点并查看有多少个节点正在运行:
$ kubectl get nodes NAME STATUS ROLES AGE VERSION minikube Ready master 55m v1.16.2
可以看出,我有一个节点已经启动并且正在运行,主要因为我的minikube正运行在一个小型server上。想要获取一个节点上正在运行的pod信息,请输入:
$ kubectl get pods No resources found in default namespace.
Oops,它是空的。让我加上具体的命名空间信息试试看:
$ kubectl get pods --namespace jenkins NAME READY STATUS RESTARTS AGE jenkins-7fc688c874-mh7gv 1/1 Running 0 40m
Good news!该命名空间中有一个pod,它尚未被重启并且已经运行了40分钟。既然我已经知道了这个pod已经启动,那么我想查看我可以从Helm中获得什么。
获
取商品信息:
Helm get
$ helm get values jenkins -n jenkins USER-SUPPLIED VALUES: null
因为我只做了一个非常小的稳定版安装,所以配置没有改变。如果我运行all命令,我就会得到chart中的所有内容:
$ helm get all jenkins -n jenkins
这将产生大量的数据,所以我建议你保留一份Helm chart的副本,以便你可以查看chart中的模板。我还创建了自己的值,以查看我所拥有的内容。
现在我的购物车里已经有了所有需要的东西,我开始检查描述它们的标签。这些例子只与kubectl有关,它们描述了我通过Helm部署的内容。
了解所需商品描述:Kubectl describe
$ kubectl describe ns jenkins Name: jenkins Labels: <none> Annotations: <none> Status: Active No resource quota. No resource limits.
我可以看到我的命名空间的名称并且它处于active状态,而且没有资源或者quote的限制。
使用describe pod命令将会输出大量信息,所以我仅提供一小段输出。如果你运行该命令时没有添加pod名称,那么它将返回该命名空间中所有Pod的信息,信息量极大。所以,请确保你在使用该命令时包含了pod名称,例如:
$ kubectl describe pods jenkins-7fc688c874-mh7gv --namespace jenkins
最后,我将使用describe node命令来查看节点信息。由于本例中仅有一个节点,名为minikube,如果在你的环境中有多个节点,你必须在命令中包含指定的节点名称。
与pod一样,节点命令会产生大量数据,因此我仅仅贴出一小段输出:
$ kubectl describe node minikube
请注意describe node是比较重要的基本命令之一。正如该图所示,该命令返回的统计数据表明了节点何时耗尽资源,这些数据对于提醒你何时需要扩大规模(如果你的环境中没有弹性伸缩)是非常有意义的。其他不在该代码段输出中的数据包括对所有资源和限制所做的请求的百分比,以及资源的周期和分配。
最终检查
建议你经常使用这些命令行,并且可以通过运行以下命令,在帮助部分学习flag的速记:
$ helm --help
以及
$ kubectl -h
薯条和番茄酱
有些东西就像薯条和番茄酱一样相配,例如Helm和kubectl。
我经常在我的环境中使用这些工具。因为它们在很多地方都有相似之处,所以在使用一个之后,我通常需要继续使用另一个。试试它们一起使用,看看它们能为你做什么。
推荐阅读
About Rancher Labs
Rancher Labs由CloudStack之父梁胜创建。旗舰产品Rancher是一个开源的企业级Kubernetes管理平台,实现了Kubernetes集群在混合云+本地数据中心的集中部署与管理。Rancher一向因操作体验的直观、极简备受用户青睐,被Forrester评为2018年全球容器管理平台领导厂商,被Gartner评为2017年全球最酷的云基础设施供应商。
目前Rancher在全球拥有超过三亿的核心镜像下载量,并拥有包括中国联通、中国平安、中国人寿、上汽集团、三星、西门子、WWK保险集团、澳电讯公司、德国铁路、厦门航空、新东方等全球著名企业在内的共40000家企业客户。
点击【阅读原文】,看Octopus线上首秀!
↓↓↓