您好,从昨天早上开始,我在尝试访问托管在 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 个步骤中的哪一个(如果有的话)是真正必要的:
- 备份 gcloud 和 kubectl 的现有配置
mv ~/.kube/config ~/.kube/config.old
mv ~/.config ~/.config.old
- 删除 Google Cloud SDK
rm -rf ~/bin/google-cloud-sdk
- 使用文本编辑器删除之前安装过程中添加的行
~/.bash_profile
(一行设置PATH
,一行启用 bash 完成) - 下载最新的 Google Cloud SDK
- 解压档案并运行
install.sh
脚本 - 运行
gcloud init
并按照其给出的说明进行 操作- 我对所有问题都回答了“y”(配置为使用 google 容器引擎、修改 .bash_profile 和启用 bash 完成),但至少你应该配置它以用于 google 容器引擎
gcloud components install kubectl
- gcloud 容器集群 get-credentials
当我在此时运行时kubectl version
,我得到了一个不同的错误!这就是我所说的“进展”。现在它告诉我“google 找不到默认凭据”,并按照以下说明进行操作这一页。 简要地:
- 按照说明创建服务帐户,下载 .json 密钥,并将其移动到您选择的目录中
- 将 GOOGLE_APPLICATION_CREDENTIALS 环境变量设置为您下载的密钥的路径
- 安装 gcloud beta 组件 (
gcloud components install beta
) - 跑步
gcloud beta auth application-default login
之后,kubectl version
又可以正常工作了!希望这对您也有效。