kubectl“无法协商 API 版本”

kubectl“无法协商 API 版本”

您好,从昨天早上开始,我在尝试访问托管在 Google 容器引擎上的 Kubernetes 集群之一时遇到了问题。在它开始失败之前,我从来没有遇到过问题,但现在我尝试执行的每个 kubectl 命令都失败,并显示“错误:无法协商 api 版本;”。

IE:

$ kubectl version
Client Version: version.Info{Major:"1", Minor:"3", GitVersion:"v1.3.4",
GitCommit:"dd6b458ef8dbf24aff55795baa68f83383c9b3a9", GitTreeState:"clean",
BuildDate:"2016-08-01T16:45:16Z", GoVersion:"go1.6.2", Compiler:"gc",
Platform:"darwin/amd64"}
error: failed to negotiate an api version; server supports: map[], client
supports: map[v1:{} apps/v1alpha1:{} autoscaling/v1:{} componentconfig/v1alpha1:{} 
batch/v1:{} batch/v2alpha1:{} authentication.k8s.io/v1beta1:{} federation/v1beta1:{} 
rbac.authorization.k8s.io/v1alpha1:{} authorization.k8s.io/v1beta1:{} extensions/v1beta1:{} 
policy/v1alpha1:{}]

我尝试删除然后重新创建集群,但没有成功,我确保服务器和客户端上的 kubernetes 版本相同(1.3.4)。当我转到容器引擎选项卡时,我可以看到在 google cloud 控制台中运行的实例池以及集群,但我不知道如何继续,有人可以告诉我可能发生了什么吗?

非常感谢!Fabrice。

答案1

我已经为这个问题奋斗了几天,但最终找到了一个对我有用的解决方案。我想从头开始,因为我怀疑我的配置被破坏/“中毒”,但我不确定前 8 个步骤中的哪一个(如果有的话)是真正必要的:

  1. 备份 gcloud 和 kubectl 的现有配置
    • mv ~/.kube/config ~/.kube/config.old
    • mv ~/.config ~/.config.old
  2. 删除 Google Cloud SDK
    • rm -rf ~/bin/google-cloud-sdk
  3. 使用文本编辑器删除之前安装过程中添加的行~/.bash_profile(一行设置PATH,一行启用 bash 完成)
  4. 下载最新的 Google Cloud SDK
  5. 解压档案并运行install.sh脚本
  6. 运行gcloud init并按照其给出的说明进行 操作
    • 我对所有问题都回答了“y”(配置为使用 google 容器引擎、修改 .bash_profile 和启用 bash 完成),但至少你应该配置它以用于 google 容器引擎
  7. gcloud components install kubectl
  8. gcloud 容器集群 get-credentials

当我在此时运行时kubectl version,我得到了一个不同的错误!这就是我所说的“进展”。现在它告诉我“google 找不到默认凭据”,并按照以下说明进行操作这一页。 简要地:

  1. 按照说明创建服务帐户,下载 .json 密钥,并将其移动到您选择的目录中
  2. 将 GOOGLE_APPLICATION_CREDENTIALS 环境变量设置为您下载的密钥的路径
  3. 安装 gcloud beta 组件 ( gcloud components install beta)
  4. 跑步gcloud beta auth application-default login

之后,kubectl version又可以正常工作了!希望这对您也有效。

相关内容