最佳实践

本指南描述了开发 kubectl 插件时使用的方法。在将插件提交到 Krew 之前,请先查看这些方法。

虽然 Krew 项目团队不会强制执行有关插件工作方式的准则,但遵守这些方法可以让您的插件为更多用户工作并表现得更具可预测性。

选择语言

大多数 kubectl 插件是用 Go 或 bash 脚本编写的。

如果您计划使用 Go 编写插件,请查看

与 kubectl 保持一致性

对于插件的形状,Krew 没有强求任何规则。

但是,如果您使用 kubectl 支持常用的命令行选项,则可以帮助您的用户简化日常工作。

例如,建议您支持 kubectl 使用的以下命令行标记

  • -h/--help
  • -n/--namespace
  • -A/--all-namespaces

此外,通过使用 genericclioptions 程序包 (Go),您可以在您的插件中支持在 kubectl options(比如 --kubeconfig--context 和许多其它选项)中列出的全局命令行标记。

导入身份验证插件 (Go)

默认情况下,使用client-go的插件无法对许多云提供商上的 Kubernetes 集群进行身份验证。为解决此问题,请将以下 import 包括在您的插件中

import _ "k8s.io/client-go/plugin/pkg/client/auth"

使用 kubectl 前缀修改用法和帮助信息

许多用户将通过不带任何参数(可能会触发帮助消息)或带有-h/--help参数来调用您的插件来发现如何使用您的插件。

因此,将您的使用字符串更改为在插件名称前显示kubectl前缀非常有用。例如

Usage:
  kubectl popeye [flags]

若要确定您的可执行文件是否作为kubectl插件运行,您可以查看argv[0],它将包含kubectl-前缀

  • Go

    if strings.HasPrefix(filepath.Base(os.Args[0]), "kubectl-") { }
    
  • Bash

    if [[ "$(basename "$0")" == kubectl-* ]]; then # invoked as plugin
        # ...
    fi
    
← 开发人员指南