指定通过 gcloud SDK 安装的 kubectl 客户端版本
Specify kubectl client version installed via gcloud SDK
我可能在某处的文档中遗漏了这个,但由于我还没有找到它,我会问:如何在使用 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
安装的 kubectl
,我看到我想要的版本是本地安装的。 gcloud components update
命令 运行 之前表示 kubectl
将设置为默认版本 1.13,但我没有发现任何关于如何更改默认版本的指示。
我 想象 我可以创建一个 link,或将我想要的版本复制到 Users/me/Projects/googlecloud/google-cloud-sdk/bin/kubectl
,但我担心弄乱托管gcloud
的环境。
IIRC 你不能。
但是,正如您所展示的,您有多个主要-次要版本可用,并且由于 kubectl
是作为静态二进制文件分发的,您可以,例如
kubectl1.15 version
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"}
一切似乎都正常...
仅限 GKE
如果您只使用 GKE,请不要更改 kubectl
版本,因为 kubectl
支持 仅一个版本向前和向后倾斜 。
例如,如果您对 GKE 1.14 使用 kubectl
1.16,您可能会遇到一些错误,例如 --watch
标志无法正常工作。
gcloud
为当前版本的 GKE 提供了正确的版本。
多个集群版本
显式版本
如果您使用不同的 Kubernetes 集群,我建议使用 kubectl
的 gcloud
版本作为默认版本。对于 kubectl
的任何特定版本,只需创建一个目录 ~/bin/kubectl
,将 kubectl1.15
、kubectl1.16
等放在那里,然后将目录添加到您的 PATH
。
通过这样的设置,您可以明确使用适当的版本:
$ # Working with GKE
$ kubectl ...
$ # Working with K8s 1.15
$ kubectl1.15 ...
隐式版本
使用direnv你可以让版本之间的切换变得透明。
有很多方法可以做到这一点,这里是一个例子。
假设您有一个项目需要 kubectl
1.15。在项目目录中创建 env/bin
子目录和 link 那里有你需要的所有二进制文件(kubectl1.15
、helm2
等),创建具有以下内容的 .envrc
文件:
export PATH="$(PWD)/env/bin:${PATH}"
运行 direnv allow
在项目目录中(任何新的 .envrc
只需要一次)。之后,您的路径中将包含来自 env/bin
的所有二进制文件。
然后,在目录和所有子目录中:
$ # Invokes kubectl 1.15
$ kubectl ...
$ # Invokes Helm 2
$ helm ...
我可能在某处的文档中遗漏了这个,但由于我还没有找到它,我会问:如何在使用 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
安装的 kubectl
,我看到我想要的版本是本地安装的。 gcloud components update
命令 运行 之前表示 kubectl
将设置为默认版本 1.13,但我没有发现任何关于如何更改默认版本的指示。
我 想象 我可以创建一个 link,或将我想要的版本复制到 Users/me/Projects/googlecloud/google-cloud-sdk/bin/kubectl
,但我担心弄乱托管gcloud
的环境。
IIRC 你不能。
但是,正如您所展示的,您有多个主要-次要版本可用,并且由于 kubectl
是作为静态二进制文件分发的,您可以,例如
kubectl1.15 version
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"}
一切似乎都正常...
仅限 GKE
如果您只使用 GKE,请不要更改 kubectl
版本,因为 kubectl
支持 仅一个版本向前和向后倾斜 。
例如,如果您对 GKE 1.14 使用 kubectl
1.16,您可能会遇到一些错误,例如 --watch
标志无法正常工作。
gcloud
为当前版本的 GKE 提供了正确的版本。
多个集群版本
显式版本
如果您使用不同的 Kubernetes 集群,我建议使用 kubectl
的 gcloud
版本作为默认版本。对于 kubectl
的任何特定版本,只需创建一个目录 ~/bin/kubectl
,将 kubectl1.15
、kubectl1.16
等放在那里,然后将目录添加到您的 PATH
。
通过这样的设置,您可以明确使用适当的版本:
$ # Working with GKE
$ kubectl ...
$ # Working with K8s 1.15
$ kubectl1.15 ...
隐式版本
使用direnv你可以让版本之间的切换变得透明。
有很多方法可以做到这一点,这里是一个例子。
假设您有一个项目需要 kubectl
1.15。在项目目录中创建 env/bin
子目录和 link 那里有你需要的所有二进制文件(kubectl1.15
、helm2
等),创建具有以下内容的 .envrc
文件:
export PATH="$(PWD)/env/bin:${PATH}"
运行 direnv allow
在项目目录中(任何新的 .envrc
只需要一次)。之后,您的路径中将包含来自 env/bin
的所有二进制文件。
然后,在目录和所有子目录中:
$ # Invokes kubectl 1.15
$ kubectl ...
$ # Invokes Helm 2
$ helm ...