【问题标题】:Specify kubectl client version installed via gcloud SDK指定通过 gcloud SDK 安装的 kubectl 客户端版本
【发布时间】:2019-08-30 17:48:55
【问题描述】:

我可能在某处的文档中错过了这一点,但由于我还没有找到它,所以我会问:使用 gcloud SDK 安装时如何指定kubectl CLI 的版本?

$ kubectl version
Client Version: version.Info{Major:"1", Minor:"13+", GitVersion:"v1.13.9-2+4a03651a7e7e04", GitCommit:"4a03651a7e7e04a0021b2ef087963dfb7bd0a17e", GitTreeState:"clean", BuildDate:"2019-08-16T19:08:17Z", GoVersion:"go1.11.5", Compiler:"gc", Platform:"darwin/amd64"}
Server Version: version.Info{Major:"1", Minor:"13+", GitVersion:"v1.13.7-gke.24", GitCommit:"2ce02ef1754a457ba464ab87dba9090d90cf0468", GitTreeState:"clean", BuildDate:"2019-08-12T22:05:28Z", GoVersion:"go1.11.5b4", Compiler:"gc", Platform:"linux/amd64"}
$ gcloud components update

All components are up to date.
$ which kubectl
/Users/me/Projects/googlecloud/google-cloud-sdk/bin/kubectl
$ which gcloud
/Users/me/Projects/googlecloud/google-cloud-sdk/bin/gcloud
$ ls -nL /Users/me/Projects/googlecloud/google-cloud-sdk/bin | grep kubectl
-rwxr-xr-x   1 501  20  44296840 Aug 16 12:08 kubectl
-rwxr-xr-x   1 501  20  54985744 Apr 30 21:56 kubectl.1.11
-rwxr-xr-x   1 501  20  56860112 Jul  7 21:34 kubectl.1.12
-rwxr-xr-x   1 501  20  44329928 Aug  5 02:52 kubectl.1.13
-rwxr-xr-x   1 501  20  48698616 Aug  5 02:55 kubectl.1.14
-rwxr-xr-x   1 501  20  48591440 Aug  5 02:57 kubectl.1.15

所以我使用的是gcloud-installed kubectl,我看到我想要的版本是本地安装的。之前运行的gcloud components update 命令表明kubectl 将设置为默认版本1.13,但我没有发现任何有关如何更改默认版本的迹象。

想象我可以创建一个链接,或者将我想要的版本复制到Users/me/Projects/googlecloud/google-cloud-sdk/bin/kubectl,但我很担心会弄乱gcloud 的托管环境。

【问题讨论】:

    标签: google-cloud-platform gcloud kubectl


    【解决方案1】:

    Whelp,我继续运行以下内容

    KUBE_BIN=$(which kubectl)
    rm $KUBE_BIN
    ln ~/googlecloud/google-cloud-sdk/bin/kubectl.1.15 $KUBE_BIN
    

    现在我明白了

    $ kubectl version
    Client Version: version.Info{Major:"1", Minor:"15", GitVersion:"v1.15.2", GitCommit:"f6278300bebbb750328ac16ee6dd3aa7d3549568", GitTreeState:"clean", BuildDate:"2019-08-05T09:23:26Z", GoVersion:"go1.12.5", Compiler:"gc", Platform:"darwin/amd64"}
    

    一切似乎都很好......

    【讨论】:

      【解决方案2】:

      IIRC 你不能。

      但是,正如您所展示的,您有多个可用的主要-次要版本,并且因为 kubectl 是作为静态二进制文件分发的,所以您可以,例如

      kubectl1.15 version
      

      【讨论】:

        【解决方案3】:

        仅限 GKE

        如果您只使用 GKE,请不要更改 kubectl 版本,因为 kubectl仅支持一个版本的向前和向后倾斜。 例如,如果您对 GKE 1.14 使用 kubectl 1.16,您可能会遇到一些错误,例如 --watch 标志无法正常工作。 gcloud 为当前版本的 GKE 提供了正确的版本。

        多个集群版本

        显式版本

        如果您使用不同的 Kubernetes 集群,我建议使用 kubectlgcloud 版本作为默认版本。对于kubectl 的任何特定版本,只需创建一个目录~/bin/kubectl,将kubectl1.15kubectl1.16 等放在那里,然后将目录添加到您的PATH
        通过这样的设置,您可以明确使用适当的版本:

        $ # Working with GKE
        $ kubectl ...
        $ # Working with K8s 1.15
        $ kubectl1.15 ...
        

        隐式版本

        使用direnv,您可以在版本之间进行透明切换。
        有很多方法可以做到这一点,这里是一个例子。
        假设您有一个需要kubectl 1.15 的项目。在项目目录中创建env/bin 子目录并在其中链接您需要的所有二进制文件(kubectl1.15helm2 等),创建具有以下内容的.envrc 文件:

        export PATH="$(PWD)/env/bin:${PATH}"
        

        在项目目录中运行direnv allow(任何新的.envrc 只需要一次)。之后,您的路径中将包含来自 env/bin 的所有二进制文件。
        然后,在目录和所有子目录中:

        $ # Invokes kubectl 1.15
        $ kubectl ...
        $ # Invokes Helm 2
        $ helm ...
        

        【讨论】:

          猜你喜欢
          • 2015-08-29
          • 2022-07-22
          • 2019-05-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多