timfeirg / lain-cli

DevOps with minimum effort.
https://lain-cli.readthedocs.io/en/latest/
MIT License
31 stars 9 forks source link

[Proposal] 在 `lain use` 时检查 kubectl 版本匹配并自动切换版本 #11

Closed hongqn closed 2 years ago

hongqn commented 2 years ago

kubectl 需要和 cluster 的版本保持不超过 1 minor 版本差才能正常工作ref ,如果本机安装的版本与 cluster 不一致的话,可能会引起异常。

如果需要管理多个不同版本的集群,就会需要频繁切换本地 kubectl 版本,比较不便且容易出错。

由于 lain 的定位涵盖了 kubectl 管理,且 lain use 会切换默认管理的集群,感觉可以在 lain use 时检查 kubectl 版本是否匹配,如果不匹配,输出警告信息。

如果有合适的修复方法,比如通过 asdf 自动安装正确版本和切换版本ref,也可以考虑发现不匹配时进行自动切换。

Proposal 如下:

  1. lain use 切换集群时,让 ~/.kube/config 指向待管理的集群之后,通过 kubectl version 命令拿到双端版本
  2. 如果版本不匹配,则提示版本不一致,并
    1. 如果本地安装了 asdf ,则询问用户是否通过 asdf 安装和切换 kubectl 版本(可用命令行参数指定回答)
    2. 如果用户回答是,则
      1. 检查是否已经通过 asdf 安装了匹配版本的 kubectl,若否
        1. asdf install kubectl [合适版本] (如尚未安装 kubectl plugin ,则先 asdf plugin add kubectl
      2. 通过 asdf global kubectl [合适版本] 切换 kubectl 版本

有一个 Apple M1 的坑是,kubectl 没有发布 arm64 版本,使用 asdf 安装时,需要设置上 ASDF_KUBECTL_OVERWRITE_ARCH=amd64 环境变量

由于 lain 目前没有插件或者客户端 hook 配置机制,将 asdf 纳入代码是否合理,可以评估。

timfeirg commented 2 years ago

目前lain已经做的事情是:提示用户将不同版本的kubectl存放在 /usr/local/bin/kubectl-1.xx,如果调用kubectl的时候发现超出了兼容性范围,则直接对/usr/local/bin/kubectl做link,使之指向合适的版本。

asdf看上去很不错,比手动安装要好得多。会安排调研和整合。