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相关联的所有pod
  • get-pod-not-ready: 获取所有没有处于就绪状态的pod
  • get-pod-restarts: 获取所有重启次数满足指定条件的pod
  • get-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报告以及代码提交。

留下评论

您的电子邮箱地址并不会被展示。请填写标记为必须的字段。 *

正在加载...