插件是可以在程序上加载的软件扩展,以提高其功能。 kubectl
是一种工具,可让您从字面上执行与Kubernetes相关的所有任务。该工具用于在群集和调试节点中列出所有POD列表。可以借助插件扩展Kubectl的功能。您可以创建kubectl插件来求解本质上复杂的一些用例。
但是什么是kubectl插件?
插件是独立的可执行文件,其名称以kubectl-
开头。要安装插件,请在PATH.
KREW上的任何位置移动其可执行文件,这是kubectl
插件的包装管理器以及旨在求解kubectl.
标准为插件
有两个重要标准可以作为kubectl插件
- 插件二进制名称必须从
kubectl-
开始,然后是插件的名称。 exkubectl-decode
,kubectl-count
。 - 插件二进制必须存在于
PATH
变量中,以便kubectl可以将其识别为插件。
用户酶
我们将创建一个Kubectl插件,该插件将解码Kubernetes Secrets。我们都知道,kubernetes将秘密存储在base64解码格式中,如果必须查看这些秘密的值,我们需要提取base64编码值,然后用纯文本进行解码。
kubernetes秘密存储在base64格式中
期待
让我们首先设置我们将开发的插件的期望/预期输出。我们希望插件返回纯文本中的Base64编码秘密。另外,它应该支持一种指定kubernetes名称空间的方法。
执行
对于本文,我们将使用Shell脚本创建此插件,但是可以使用任何编程语言完成相同的操作。
我们希望此插件像普通kubectl命令的工作原理一样工作,用户指定操作(创建,更新,删除和get)和资源(POD,deployment,exployment,configmap,secret),也可以提供用户他想执行该操作的名称空间,但是如果没有提供默认名称空间。
I have made a video on creating kubectl plugins using GoLang
- 我们将创建一个带有名称
kubectl-decode
的文本文件,其中解码是我们插件的名称。 - 接下来,将使用kubectl命令本身获取秘密,并在go-template的帮助下,我们可以迭代秘密并解码它们。
- 将插件放入
PATH
变量中,以便kubectl可以将其识别为插件。
#!/bin/bash
if [ $# -lt 1 ]
then
echo "invalid argument "
exit 1
fi
NAMESPACE="default"
if [ "$2" = "-n" ]
then
if [ $# -eq 3 ]
then
NAMESPACE=$3
fi
fi
kubectl get secrets "$1" -o go-template='{{range $k,$v := .data}}{{printf "%s: " $k}}{{if not $v}}{{$v}}{{else}}{{$v | base64decode}}{{end}}{{"\n\n"}}{{end}}' -n "$NAMESPACE"
总结
当我们使用此kubectl时,我们可以简化乏味的任务变得非常简单。 Kubectl插件对您来说可能很复杂,但请相信我,它们会使您的生活更加轻松。
基于BASH的插件会带来一些缺点,但是当您使用任何编程语言(例如GO,Java或nodejs)时,这些插件可以轻松解决。
在本文中,我们了解了kubectl插件的基础知识以及成为kubectl插件所需的内容,还看到了如何创建kubectl插件。
资源
- [实施] 在此模式中为此模式的完整实施
- [视频] 可以找到一个详细的视频说明。
- [Golang] 可以找到here
感谢您的阅读,希望您发现这有用!