#kubernetes #kubeconfig #kubectl #setup

app kubeconfig-bikeshed

kubeconfig-bikeshed (kbs) 是一个有观点的 kubeconfig 管理器,它通过将它们导入一个中心存储库并规范化它们来帮助控制系统中各种 kubeconfig

8 个版本

0.3.2 2024 年 5 月 15 日
0.3.1 2024 年 3 月 6 日
0.3.0 2024 年 2 月 3 日
0.2.0 2023 年 12 月 12 日
0.1.3 2023 年 11 月 21 日

#384命令行工具

Download history 105/week @ 2024-05-10 33/week @ 2024-05-17 3/week @ 2024-05-24

561 每月下载次数

Apache-2.0

155KB
1.5K SLoC

kubeconfig-bikeshed

kubeconfig-bikeshed - kbs - 是一个管理您访问许多 Kubernetes API 的 kubeconfig 的有观点的工具。与使用具有许多上下文的单个 kubeconfig 文件相比,kbs 维护多个 kubeconfig 文件,可以轻松切换。

请参阅下面的演示以了解典型的 kbs 工作流程(此假设已设置所有可选的shell集成)

kbs demo

为什么选择 kbs

kbs 可以帮助整理散乱和不一致的 kubeconfig 集合。它通过强制执行标准化命名、对其 kubeconfig 拥有所有权以及允许执行批量操作(如清除过时的 kubeconfig)来实现。

kbs 维护一个 kubeconfig "数据存储",默认情况下位于 ~/.config/kbskbs 了解 XDG_CONFIG_HOME 并在设置了的情况下查找存储目录 $XDG_CONFIG_HOME/kbs)。对于导入其存储库的 kubeconfig,kbs 允许设置和更新标签(就像在 Kubernetes 对象上一样),这些标签可以用于运行批量操作。

在命名标准方面,kbs 的核心思想是,并非所有 Kubernetes 部署工具都生成“良好”的上下文名称。因此,kbs 自动从正在导入的 kubeconfig 中发现服务器名称,并使用该名称来识别与现有 kubeconfig 的任何冲突以及设置有意义的上下文名称。这可以被覆盖,但 kbs 预期 所有名称都应为有效的 DNS 风格名称

还有一篇博客文章,详细介绍了初始版本和开始此项目的动机:[Bikeshedding Kubeconfig Management](https://marvin.beckers.dev/blog/bikeshedding-kubeconfig-management/)

安装

kubeconfig-bikeshed 可以作为名为 kbs 的独立二进制文件安装。可选地,可以将 kbs shell 函数加载到某些 shell 中,以允许选择活动 kubeconfig(请参阅[设置](#readme-Setup))。

选项

kbs 目前可以通过 Homebrewcargo 或从 发布页面 下载来安装。

Homebrew

kbs 可在我的 tap 中找到。

$ brew tap embik/tap
$ brew install kubeconfig-bikeshed

Cargo

kubeconfig-bikeshed 也可直接从 crates.io 获取,并且可以通过 cargo(如果已安装有效的 Rust 工具链)来安装。

$ cargo install kubeconfig-bikeshed

这将安装 kbs 二进制文件。确保 $HOME/.cargo/bin 在您的 PATH 中。

设置

安装 kbs 后,可以设置一些东西以使其使用更加顺畅。为了在上下文和命名空间之间切换,建议同时安装 kubectl

自动补全

kbs 可以通过 kbs shell completion 命令为许多可用的 shell 生成自动补全。具体说明可能因 shell 而异。例如,要安装 zsh 自动补全,请将以下片段添加到您的 .zshrc

source <(kbs shell completion zsh)

"魔法" Shell 函数

一个 kubeconfig 管理器最重要的功能之一可能是设置环境变量 KUBECONFIG,使其指向您选择的 kubeconfig 文件。遗憾的是,kbs 二进制文件本身无法提供该功能,因为它无法为活动 shell 设置环境变量。

为了解决这个问题,kbs 可选地提供 shell "魔法",用可以导出 KUBECONFIG 的函数替换您的 shell 中的 kbs 二进制文件。这需要安装 fzf。Shell 魔法支持一组 shell 的子集,目前支持的 shell 有

  • zsh
  • bash

具体说明可能因 shell 而异,例如,要安装 zsh 魔法,您可以将以下片段添加到您的 .zshrc

source <(kbs shell magic zsh)

恢复上次活动的 kubeconfig

要使用上次选择的 ("活动") kubeconfig 启动新 shell,请将以下片段(或类似内容,取决于您的 shell)添加到您的登录 shell 配置(例如 .zshrc)中

eval $(kbs use -)

用法

要从 kbs 数据存储中选择 kubeconfig,只需运行 kbs(如果已设置 shell 集成)。这将通过 fzf 提供选择,并导出 KUBECONFIG 环境变量。

以下是 kbs 的完整命令集。

Usage: kbs [OPTIONS] <COMMAND>

Commands:
  import   Import a kubeconfig into data store [aliases: i]
  list     List available kubeconfigs [aliases: ls]
  use      Use a kubeconfig by name and print shell snippet to source [aliases: u]
  shell    Print various shell related scripts [aliases: sh]
  remove   Remove kubeconfig from data store [aliases: rm, delete]
  version  Print version [aliases: v]
  label    Manage labels on kubeconfigs in the data store [aliases: l]
  prune    Remove kubeconfigs for Kubernetes API servers that are no longer accessible [aliases: p]
  move     Rename a kubeconfig in store [aliases: mv]
  help     Print this message or the help of the given subcommand(s)

Options:
  -v, --verbose                  Enable verbose (debug) logging
  -c, --config-dir <config-dir>  Directory to use for configuration and data store. Defaults to ~/.config/kbs or $XDG_CONFIG_DIR/kbs
  -h, --help                     Print help

导入 kubeconfig

kbs import 允许将已存在于本地文件系统上的 kubeconfig(例如,因为它是通过第三方工具或 Web 界面下载的)导入到 kbs "数据存储" 中。

该命令接受一些标志来更改导入过程的行为。当一个 kubeconfig 配置了多个服务器时,传递一个 --name 可能是必要的,因为 kbs 无法自动确定名称。

更新 kubeconfig 标签

kbs label 允许通过名称或标签选择器设置新标签或更新现有标签。标签可以作为 key=value 对传递,用逗号分隔。

如果设置了 --overwrite,则可以更新现有标签值,模仿 kubectl 的行为。

删除 kubeconfig

kbs remove 允许通过名称(或标签选择器)从 kbs 数据存储中删除 kubeconfig。

修剪 Kubeconfig

kbs prune 是一个有用的命令,在手动删除 kubeconfig 或标签选择器变得繁琐时。

kbs 将遍历所有与 kbs prune 传入的标签选择器匹配的 kubeconfig(如果没有传入,则检查所有 kubeconfig),并尝试从远程服务器获取 Kubernetes API 服务器版本作为“ping”的方式。如果由于任何原因连接失败,则 kbs prune 将认为相关的 kubeconfig 已过时。

默认情况下,此命令以“干运行”模式运行,这意味着它不会删除任何 kubeconfig(因为这可能是由临时网络问题引起的破坏性操作)。要实际修剪 kubeconfig,请将 --dry-run=false 传递给命令。

贡献

如果您有兴趣为 kbs 贡献,请查看 贡献指南

替代方案

  • 如果您正在寻找用 Go 编写的更成熟的解决方案,请查看同事 Simon 的 konf-go
  • kubecm 可能是 kubeconfig 管理器的“领头羊”。

依赖关系

~66MB
~1M SLoC