用插件扩展kubectl
#go #kubernetes #cloudnative #k8s

插件是可以在程序上加载的软件扩展,以提高其功能。 kubectl是一种工具,可让您从字面上执行与Kubernetes相关的所有任务。该工具用于在群集和调试节点中列出所有POD列表。可以借助插件扩展Kubectl的功能。您可以创建kubectl插件来求解本质上复杂的一些用例。

但是什么是kubectl插件?

插件是独立的可执行文件,其名称以kubectl-开头。要安装插件,请在PATH. KREW上的任何位置移动其可执行文件,这是kubectl插件的包装管理器以及旨在求解kubectl.

的kubernetes sig

标准为插件

有两个重要标准可以作为kubectl插件

  1. 插件二进制名称必须从kubectl-开始,然后是插件的名称。 ex kubectl-decodekubectl-count
  2. 插件二进制必须存在于PATH变量中,以便kubectl可以将其识别为插件。

用户酶

我们将创建一个Kubectl插件,该插件将解码Kubernetes Secrets。我们都知道,kubernetes将秘密存储在base64解码格式中,如果必须查看这些秘密的值,我们需要提取base64编码值,然后用纯文本进行解码。

Kubernetes secret stored in base64 format

kubernetes秘密存储在base64格式中

期待

让我们首先设置我们将开发的插件的期望/预期输出。我们希望插件返回纯文本中的Base64编码秘密。另外,它应该支持一种指定kubernetes名称空间的方法。

kubectl decode plugin

执行

对于本文,我们将使用Shell脚本创建此插件,但是可以使用任何编程语言完成相同的操作。

我们希望此插件像普通kubectl命令的工作原理一样工作,用户指定操作(创建,更新,删除和get)和资源(POD,deployment,exployment,configmap,secret),也可以提供用户他想执行该操作的名称空间,但是如果没有提供默认名称空间。

I have made a video on creating kubectl plugins using GoLang

  1. 我们将创建一个带有名称kubectl-decode的文本文件,其中解码是我们插件的名称。
  2. 接下来,将使用kubectl命令本身获取秘密,并在go-template的帮助下,我们可以迭代秘密并解码它们。
  3. 将插件放入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插件。

资源

  1. [实施] 在此模式中为此模式的完整实施
  2. [视频] 可以找到一个详细的视频说明。
  3. [Golang] 可以找到here

感谢您的阅读,希望您发现这有用!