KubeMacro是一个kubectl插件,它用于把一组针对于kubectl命令或Kubernetes API的调用封装成一个命令,以便于在命令行多次执行。KubeMacro是一个位于GitHub上的开源项目。
作为KubeMacro系列文章的第一篇,本文将告诉你什么是KubeMacro,如何安装并运行KubeMacro。
什么是KubeMacro
KubeMacro是一个kubectl插件,它可以用来执行一种叫做kube macro
(简称macro
)的东西。 这里所谓的kube macro,类似于C/C++里的宏定义,它允许我们把一组针对于kubectl命令或Kubernetes API的调用封装成一个命令,以便于在命令行多次执行。为了更好的理解KubeMacro是如何帮助我们更加有效的对Kubernetes集群进行日常管理的,让我们一起来看两个例子。
案例一:重启与某个Service关联的所有Pod
如果我们想重启所有与某个Kubernetes service相关联的pod,往往需要按照如下步骤一步步执行:
- 查看service资源,检查其
.spec.selector
字段 - 利用
.spec.selector
中定义的标签,查询得到与之相关联的pod - 删除相应的pod,以便Kubernetes能为我们重新启动新的pod
每当我们需要重启这些pod的时候,都需要手工执行上述步骤,这一过程是十分繁琐的。
案例二:删除一直处于Terminating状态的Namespace
删除一个一直处于Terminating状态的namespace并不像表面上看起来那么简单。我们需要了解:
- 为什么namespace会一直处于Terminating状态
- 在决定强制删除namespace之前,是否应该遍历所有位于该namespace下的API资源,然后将它们逐一删除
- 如果我们决定强制删除namespace,怎样才能成功清除该namespace下的finalizer呢
以上几个问题专门用一篇文章的篇幅来解释一点也不为过。
使用KubeMacro
正如你所看到的那样,当我们用kubectl对集群进行日常操作时,很多任务都不是执行一两条命令就可以完成的。这其中,某些任务的复杂度甚至可以用一篇文章的篇幅来解释。
KubeMacro的原理非常简单。它把一个或多个针对kubectl或Kubernetes API的调用连同一些最佳实践封装进一个“可执行单元”里,比如一个shell函数,我们把这样的可执行单元称为kube macro
(或简称为macro
)。每个macro都被设计用来解决一个特定的问题,它们通常都会包含针对kubectl或Kubernetes API的一个或多个调用,并且还会结合一部分额外的辅助代码逻辑,以完成针对Kubernetes集群的一项完整操作任务。
通过使用macro,我们可以将一个“可执行单元”作为一个整体反复多次执行,从而使我们在对Kubernetes集群进行操作的时候,更加高效,更少出错。
安装KubeMacro
由于KubeMacro本质上是由脚本实现的,所以它可以作为一个独立的命令在命令行执行。但同时,它也可以被安装成一个kubectl插件,这样我们就可以像执行普通的kubectl <command>
命令那样执行KubeMacro了。
为了安装KubeMacro,我们可以从GitHub库将其下载到本地,并将文件设置为可执行:
curl -L https://raw.githubusercontent.com/morningspace/kubemacro/master/kubectl-macro.sh -o kubectl-macro
chmod +x kubectl-macro
把脚本文件放到任何PATH
环境变量能够找到的地方,比如:
mv ./kubectl-macro /usr/local/bin
然后,我们就可以像执行普通的kubectl命令那样调用KubeMacro了:
kubectl macro
执行上述命令,将会返回KubeMacro的帮助信息。
安装kube macro
KubeMacro本质上是一个用来执行kube macro的执行器。默认情况下,它并不自带任何macro。在安装完KubeMacro之后,我们还需安装特定的macro,才能完成相应的Kubernetes集群管理任务。为此,我们需要访问KubeMacro Hub,这是一个用来发布和分享kube macro的网站。通过浏览该网站上提供的macro,我们可以根据需要选择相应的macro进行安装。
如果你刚开始接触KubeMacro,下面是一些推荐安装的macro:
get-apires
: 获取某个namespace下的所有API资源get-by-owner-ref
: 通过owner reference
,获取某个namespace下的指定资源及其祖先get-pod-by-svc
: 获取和指定service相关联的所有podget-pod-not-ready
: 获取所有没有处于就绪状态的podget-pod-restarts
: 获取所有重启次数满足指定条件的podget-pod-status
: 获取所有pod状态满足指定条件的pod
此处,让我们以get-pod-by-svc
为例,来演示一下如何安装macro。
安装macro的过程非常简单。我们只需要打开KubeMacro Hub并进入该macro的页面,本例中即get-pod-by-svc。 然后,切换到Code
标签页,根据该标签页上的说明,点击下载链接,或者把完整的代码复制粘贴到一个名为get-pod-by-svc.sh
的本地文件,将其放入$HOME/.kubemacro
目录下,就万事大吉了。每次KubeMacro执行时会扫描该目录,并把安装在该目录下的所有macro加载到内存。
安装完macro以后,可以执行如下命令进行验证:
kubectl macro get-pod-by-svc --help
你会看到特定于该macro的帮助信息。除了阅读命令行输出的帮助信息外,我们还可以查阅位于KubeMacro Hub网站相应macro页面上的Description
标签页,那里有更多涉及该macro的背景及使用信息。
对于get-pod-by-svc而言,正如其帮助信息里所描述的那样,它是用来获取所有和某个Kubernetes service相关联的pod的。比如,下面的命令用于找出与openshift-monitoring namespace下的prometheus-adapter service相关联的所有pod,并只输出pod的名字。
kubectl macro get-pod-by-svc prometheus-adapter -n openshift-monitoring -o name
小结
至此,我们已经掌握了如何安装KubeMacro,以及如何安装并执行macro。建议大家访问KubeMacro Hub网站,找一两个你感兴趣的macro,然后安装并试用一下。
在下一篇文章里,我将和大家分享更多有关KubeMacro Hub的内容,还有一些很有意思的macro,利用它们可以帮助你更加有效的管理Kubernetes集群。
如果你想了解更多有关KubeMacro的信息,请阅读它的在线文档。如果你喜欢这个项目,欢迎给它加星。同时,也非常欢迎针对该项目的任何形式的贡献,比如bug报告以及代码提交。
留下评论
您的电子邮箱地址并不会被展示。请填写标记为必须的字段。 *