KubeMacro是一个kubectl插件,它用于把一组针对于kubectl命令或Kubernetes API的调用封装成一个命令,以便于在命令行多次执行。KubeMacro是一个位于GitHub上的开源项目。

作为KubeMacro系列的第二篇文章,本文首先将会向大家介绍KubeMacro Hub,一个用于发布和分享kube macro的网站,然后介绍几个通过该网站发布的,非常有意思的macro,以及它们的使用方法。

什么是KubeMacro Hub

KubeMacro Hub就像是一个kube macro的“集散地”,它为人们在社区范围内发布和分享kube macro提供了一个集中的场所。你可以在这里浏览由别人开发的macro,也可以把你自己开发的macro通过KubeMacro Hub分享给别人,以便让大家都能够从中获益。

如果你想把自己的macro贡献给社区,只需要向KubeMacro Hub的GitHub库提交一个pull request。一旦代码被合并,大约几秒钟之后,你的macro就可以出现在KubeMacro Hub的网站上了。在这一系列的后续文章里,我将向大家详细介绍如何编写一个kube macro。

浏览KubeMacro Hub

既然你已经了解了KubeMacro Hub的作用,接下来让我们一起看一下如何浏览KubeMacro Hub网站及其所提供的那些kube macro。

首先让我们打开 KubeMacro Hub 网站,我们可以看到在网站页面的左侧有一个macro的列表,点击其中任意一个macro,会在网页右侧打开该macro的对应详情页面。此外,网页左上方还有一个搜索框,我们可以在里面输入关键词,然后在下方的搜索结果里寻找想要的macro。点击对应的搜索结果,同样会打开macro的详情页面。在macro详情页面的顶部,我们会看到该macro的名称和一个简短的描述。

除此以外,下方还有几个标签页:

标签页 说明
Description 提供了有关该macro的详细说明,比如:用途,用法等。
Usage & Options 提供了该macro的调用格式,以及所支持的命令行参数。
Examples 列举了该macro的一些使用范例,可以供我们在实际使用时参考。
Dependencies 列举了该macro在执行过程中需要的所有依赖。为了保证macro的正常执行,这些依赖必须事先安装好。
Code 给出了该macro的源代码,我们可以通过阅读代码来了解该macro的工作原理。同时,这个标签页上还有如何安装该macro的说明文字。

如你所见,浏览KubeMacro Hub上的kube macro非常简单,只需在列表里选择你想要的macro,然后阅读详情页面的使用说明,比如了解它的用途,用法,支持的参数,以及参考示例等。最后,下载该macro,或者直接复制粘贴源代码到本地,就大功告成了。

接下来,我将向大家介绍几个KubeMacro Hub上发布的,非常意思的macro,并演示它们的使用方法。

Macro: delete-pod-by-svc

该macro可以用来删除所有和某个Kubernetes service相关联的pod。当我们遇到某些service由于其背后的pod出现故障而无法正常工作的时候,就可以使用这个macro。通过删除这些pod,它能强制触发pod的重启。

众所周知,Kubernetes service的实际功能是由pod来实现的。要找到与service相关联的pod,我们需要查看service的定义,找到spec.selector字段。让我们以下面这个service为例:

kubectl get svc prometheus-adapter -n openshift-monitoring -o yaml

从service定义的spec.selector字段中获知,与该service相关联的pod应该具备prometheus-adapter标签:

apiVersion: v1
kind: Service
metadata:
  name: prometheus-adapter
  namespace: openshift-monitoring
spec:
  clusterIP: 172.30.179.161
  ports:
  - name: https
    port: 443
    protocol: TCP
    targetPort: 6443
  selector:
    name: prometheus-adapter
  sessionAffinity: None
  type: ClusterIP

我们可以列出所有满足这一条件的pod,然后决定是否要删除这些pod:

kubectl get pod -l name=prometheus-adapter  -n openshift-monitoring
NAME                                  READY   STATUS    RESTARTS   AGE
prometheus-adapter-6856976f54-42jzh   0/1     Pending   0          3d
prometheus-adapter-6856976f54-d428c   0/1     Pending   0          3d

每当我们遇到需要重启pod的时候,手工完成上述步骤会非常的繁琐。这个macro的作用就是为了把这一过程完全自动化,我们只需要告诉它service的名字就行了。此外,删除pod的时候,我们还可以指定额外的参数对删除行为进行控制,比如:指定--force参数实现强制删除,指定--dry-run参数实现“dry run”模式下的删除,以便在我们真正决定删除之前做一些检查。

下面是几个实际使用该macro的例子,供大家参考:

# To delete pods associated with a service.
kubectl macro delete-pod-by-svc echo -n foo
# To force delete pods associated with a service.
kubectl macro delete-pod-by-svc echo --force
# To delete pods associated with a service in dry run mode.
kubectl macro delete-pod-by-svc echo --dry-run=client

Macro: get-by-owner-ref

该macro通过遍历Kubernetes资源的metadata.ownerReferences字段,可以用来列举某个namespace下的一个或多个资源及其祖先。

我们知道,在Kubernetes里一些资源和另一些资源存在着从属关系。比如,一组pod可能从属于某个ReplicaSet。ReplicaSet就是pod的owner,而pod则被称为ReplicaSet的dependent。每个dependent对象,都有一个字段,名字叫做metadata.ownerReferences,它指向了对应的owner对象。

利用该macro,当我们手里有一个或多个资源时,可以通过它来揭示这些资源及其祖先资源的从属关系。其输出结果是以树状形式呈现的。例如,要列举名为echo-5ffc7f444f-pj5xj的pod及其祖先,可以执行如下命令:

kubectl macro get-by-owner-ref pod echo-5ffc7f444f-pj5xj -n foo
pod/echo-5ffc7f444f-pj5xj
└──ReplicaSet/echo-5ffc7f444f
   └──Deployment/echoCopy to clipboardErrorCopied

由于该macro背后是通过对kubectl get的调用来实现的,所以我们还可以指定某些kubectl get所支持的参数,从而实现对返回结果的定制。例如,为了展示所有具备指定标签的pod及其从属关系,可以使用-l参数:

kubectl macro get-by-owner-ref pod -l 'app=echo'

上述命令可以打印出所有标签appecho的pod及其祖先。

我们甚至还可以列举某个namespace下的所有pod资源及其祖先,例如:

kubectl macro get-by-owner-ref pods -n foo

上述命令可以打印出foo namespace下的所有pod及其祖先。

小结

通过本文,我们了解了如何访问KubeMacro Hub网站,浏览并安装相应的kube macro。同时,我们还学习了几个KubeMacro Hub上发布的,非常有意思的macro。欢迎大家访问 KubeMacro Hub 网站,看看上面是否有你所感兴趣的macro。如果没有任何一个macro能满足你的需求,也没关系,你可以选择开发自己的macro,然后提交给KubeMacro Hub在GitHub上的代码库。在下一篇文章里,我将向大家介绍如何编写自己的kube macro。

如果你想了解更多有关KubeMacro的信息,请阅读它的在线文档。如果你喜欢这个项目,欢迎给它加星。同时,也非常欢迎针对该项目的任何形式的贡献,比如bug报告以及代码提交。

留下评论

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

正在加载...