服务器出错(NotAcceptable):未知

Naf*_*Kay 6 kubernetes google-kubernetes-engine kubectl

昨天,我构建了一个功能齐全的示例,使用Terraform在Google Cloud Platform中创建网络和GKE集群.整个事情的流浪运行在一个CentOS 7虚拟机,同时安装gcloud,kubectlhelm.我还扩展了示例以使用Helm来安装Spinnaker.

调用GKE集群gke-test-1.在我的文档中,我记录了kubectl设置:

gcloud container clusters get-credentials --region=us-west1 gke-test-1
Run Code Online (Sandbox Code Playgroud)

在此之后,我能够使用各种kubectl命令get nodes,get pods,get services,和get deployments,以及所有其它集群管理命令.我还能够使用Helm安装Tiller并最终部署Spinnaker.

但是,今天,同样的过程对我不起作用.我启动了网络,子网,GKE集群和节点池,每当我尝试使用命令获取各种资源时,我都会得到以下响应:

[vagrant@katyperry vagrant]$ kubectl get nodes
No resources found.
Error from server (NotAcceptable): unknown (get nodes)
[vagrant@katyperry vagrant]$ kubectl get pods
No resources found.
Error from server (NotAcceptable): unknown (get pods)
[vagrant@katyperry vagrant]$ kubectl get services
No resources found.
Error from server (NotAcceptable): unknown (get services)
[vagrant@katyperry vagrant]$ kubectl get deployments
No resources found.
Error from server (NotAcceptable): unknown (get deployments.extensions)
Run Code Online (Sandbox Code Playgroud)

有趣的是,似乎有些命令可以正常工作:

[vagrant@katyperry vagrant]$ kubectl describe nodes | head
Name:               gke-gke-test-1-default-253fb645-scq8
Roles:              <none>
Labels:             beta.kubernetes.io/arch=amd64
                    beta.kubernetes.io/fluentd-ds-ready=true
                    beta.kubernetes.io/instance-type=n1-standard-4
                    beta.kubernetes.io/os=linux
                    cloud.google.com/gke-nodepool=default
                    failure-domain.beta.kubernetes.io/region=us-west1
                    failure-domain.beta.kubernetes.io/zone=us-west1-b
                    kubernetes.io/hostname=gke-gke-test-1-default-253fb645-scq8
Run Code Online (Sandbox Code Playgroud)

当我在Google云端控制台中打开一个shell时,运行相同的登录命令后,我可以kubectl用来执行以上所有操作:

naftuli_kay@naftuli-test:~$ gcloud beta container clusters get-credentials gke-test-1 --region us-west1 --project naftuli-test
Fetching cluster endpoint and auth data.
kubeconfig entry generated for gke-test-1.
naftuli_kay@naftuli-test:~$ kubectl get pods
No resources found.
naftuli_kay@naftuli-test:~$ kubectl get nodes
NAME                                   STATUS    ROLES     AGE       VERSION
gke-gke-test-1-default-253fb645-scq8   Ready     <none>    40m       v1.8.10-gke.0
gke-gke-test-1-default-253fb645-tfns   Ready     <none>    40m       v1.8.10-gke.0
gke-gke-test-1-default-8bf306fc-n8jz   Ready     <none>    40m       v1.8.10-gke.0
gke-gke-test-1-default-8bf306fc-r0sq   Ready     <none>    40m       v1.8.10-gke.0
gke-gke-test-1-default-aecb57ba-85p4   Ready     <none>    40m       v1.8.10-gke.0
gke-gke-test-1-default-aecb57ba-n7n3   Ready     <none>    40m       v1.8.10-gke.0
naftuli_kay@naftuli-test:~$ kubectl get services
NAME         TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
kubernetes   ClusterIP   10.0.64.1    <none>        443/TCP   43m
naftuli_kay@naftuli-test:~$ kubectl get deployments
No resources found.
Run Code Online (Sandbox Code Playgroud)

我能看到的唯一区别是kubectl版本之间的差异; Vagrant拥有最新版本1.11.0,Google Cloud控制台拥有1.9.7.

我会尝试降级.

这是一个已知的问题,如果有的话,我可以做些什么来解决它?


编辑:这是可重复的,我找不到一种方法来防止它再次出现.我撕毁了我所有的基础设施,然后再次站起来.Terraform可在此处获得.

在配置资源之后,我一直等到群集报告为健康:

[vagrant@katyperry vagrant]$ gcloud container clusters describe \
    --region=us-west1 gke-test-1 | grep -oP '(?<=^status:\s).*'
RUNNING
Run Code Online (Sandbox Code Playgroud)

然后我设置我的登录凭据:

[vagrant@katyperry vagrant]$ gcloud container clusters get-credentials \
    --region=us-west1 gke-test-1
Run Code Online (Sandbox Code Playgroud)

我再次尝试获取节点:

[vagrant@katyperry vagrant]$ kubectl get nodes
No resources found.
Error from server (NotAcceptable): unknown (get nodes)
Run Code Online (Sandbox Code Playgroud)

群集在Google云仪表板中显示为绿色:

在此输入图像描述

显然,这是一个可重现的问题,因为我能够使用相同的Terraform和命令重新创建它.

Naf*_*Kay 10

在通过销毁和重新创建所有基础设施成功地多次重现问题之后,我在GitLab上发现了一些神秘的帖子,提到了Kubernetes GitHub问题,似乎表明:

...为了保持与1.8.x服务器的兼容性(在+/-一个版本的支持版本偏差范围内)

强调"+/-一个版本".

升级主人和工人到Kubernetes 1.10似乎完全解决了这个问题,因为我现在可以列出节点和pod而不受惩罚:

[vagrant@katyperry vagrant]$ kubectl version
Client Version: version.Info{Major:"1", Minor:"11", GitVersion:"v1.11.0", GitCommit:"91e7b4fd31fcd3d5f436da26c980becec37ceefe", GitTreeState:"clean", BuildDate:"2018-06-27T20:17:28Z", GoVersion:"go1.10.2", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"10+", GitVersion:"v1.10.4-gke.2", GitCommit:"eb2e43842aaa21d6f0bb65d6adf5a84bbdc62eaf", GitTreeState:"clean", BuildDate:"2018-06-15T21:48:39Z", GoVersion:"go1.9.3b4", Compiler:"gc", Platform:"linux/amd64"}
[vagrant@katyperry vagrant]$ kubectl get nodes
NAME                                   STATUS    ROLES     AGE       VERSION
gke-gke-test-1-default-5989a78d-dpk9   Ready     <none>    42s       v1.10.4-gke.2
gke-gke-test-1-default-5989a78d-kh9b   Ready     <none>    58s       v1.10.4-gke.2
gke-gke-test-1-default-653ba633-091s   Ready     <none>    46s       v1.10.4-gke.2
gke-gke-test-1-default-653ba633-4zqq   Ready     <none>    46s       v1.10.4-gke.2
gke-gke-test-1-default-848661e8-cv53   Ready     <none>    53s       v1.10.4-gke.2
gke-gke-test-1-default-848661e8-vfr6   Ready     <none>    52s       v1.10.4-gke.2
Run Code Online (Sandbox Code Playgroud)

看来谷歌云平台的云外壳设为kubectl1.9,这是在上面提到的想法支持的版本差距内.

值得庆幸的是,Kubernetes RHEL存储库有许多版本可供选择,因此可以固定:

[vagrant@katyperry gke]$ yum --showduplicates list kubectl
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * base: mirrors.usc.edu
 * epel: sjc.edge.kernel.org
 * extras: mirror.sjc02.svwh.net
 * updates: mirror.linuxfix.com
Installed Packages
kubectl.x86_64                                          1.11.0-0                                          @kubernetes
Available Packages
kubectl.x86_64                                          1.5.4-0                                           kubernetes
kubectl.x86_64                                          1.6.0-0                                           kubernetes
kubectl.x86_64                                          1.6.1-0                                           kubernetes
kubectl.x86_64                                          1.6.2-0                                           kubernetes
kubectl.x86_64                                          1.6.3-0                                           kubernetes
kubectl.x86_64                                          1.6.4-0                                           kubernetes
kubectl.x86_64                                          1.6.5-0                                           kubernetes
kubectl.x86_64                                          1.6.6-0                                           kubernetes
kubectl.x86_64                                          1.6.7-0                                           kubernetes
kubectl.x86_64                                          1.6.8-0                                           kubernetes
kubectl.x86_64                                          1.6.9-0                                           kubernetes
kubectl.x86_64                                          1.6.10-0                                          kubernetes
kubectl.x86_64                                          1.6.11-0                                          kubernetes
kubectl.x86_64                                          1.6.12-0                                          kubernetes
kubectl.x86_64                                          1.6.13-0                                          kubernetes
kubectl.x86_64                                          1.7.0-0                                           kubernetes
kubectl.x86_64                                          1.7.1-0                                           kubernetes
kubectl.x86_64                                          1.7.2-0                                           kubernetes
kubectl.x86_64                                          1.7.3-1                                           kubernetes
kubectl.x86_64                                          1.7.4-0                                           kubernetes
kubectl.x86_64                                          1.7.5-0                                           kubernetes
kubectl.x86_64                                          1.7.6-1                                           kubernetes
kubectl.x86_64                                          1.7.7-1                                           kubernetes
kubectl.x86_64                                          1.7.8-1                                           kubernetes
kubectl.x86_64                                          1.7.9-0                                           kubernetes
kubectl.x86_64                                          1.7.10-0                                          kubernetes
kubectl.x86_64                                          1.7.11-0                                          kubernetes
kubectl.x86_64                                          1.7.14-0                                          kubernetes
kubectl.x86_64                                          1.7.15-0                                          kubernetes
kubectl.x86_64                                          1.7.16-0                                          kubernetes
kubectl.x86_64                                          1.8.0-0                                           kubernetes
kubectl.x86_64                                          1.8.1-0                                           kubernetes
kubectl.x86_64                                          1.8.2-0                                           kubernetes
kubectl.x86_64                                          1.8.3-0                                           kubernetes
kubectl.x86_64                                          1.8.4-0                                           kubernetes
kubectl.x86_64                                          1.8.5-0                                           kubernetes
kubectl.x86_64                                          1.8.6-0                                           kubernetes
kubectl.x86_64                                          1.8.7-0                                           kubernetes
kubectl.x86_64                                          1.8.8-0                                           kubernetes
kubectl.x86_64                                          1.8.9-0                                           kubernetes
kubectl.x86_64                                          1.8.10-0                                          kubernetes
kubectl.x86_64                                          1.8.11-0                                          kubernetes
kubectl.x86_64                                          1.8.12-0                                          kubernetes
kubectl.x86_64                                          1.8.13-0                                          kubernetes
kubectl.x86_64                                          1.8.14-0                                          kubernetes
kubectl.x86_64                                          1.9.0-0                                           kubernetes
kubectl.x86_64                                          1.9.1-0                                           kubernetes
kubectl.x86_64                                          1.9.2-0                                           kubernetes
kubectl.x86_64                                          1.9.3-0                                           kubernetes
kubectl.x86_64                                          1.9.4-0                                           kubernetes
kubectl.x86_64                                          1.9.5-0                                           kubernetes
kubectl.x86_64                                          1.9.6-0                                           kubernetes
kubectl.x86_64                                          1.9.7-0                                           kubernetes
kubectl.x86_64                                          1.9.8-0                                           kubernetes
kubectl.x86_64                                          1.10.0-0                                          kubernetes
kubectl.x86_64                                          1.10.1-0                                          kubernetes
kubectl.x86_64                                          1.10.2-0                                          kubernetes
kubectl.x86_64                                          1.10.3-0                                          kubernetes
kubectl.x86_64                                          1.10.4-0                                          kubernetes
kubectl.x86_64                                          1.10.5-0                                          google-cloud-sdk
kubectl.x86_64                                          1.10.5-0                                          kubernetes
kubectl.x86_64                                          1.11.0-0                                          kubernetes
Run Code Online (Sandbox Code Playgroud)

编辑:我发现了提到这种不兼容性实际拉取请求.我还发现在发行说明中埋藏了以下信息:

kubectl:此客户端版本需要apps/v1API,因此它不适用于早于v1.9.0的群集版本.请注意,kubectl仅保证与+/- [一]次要版本的集群兼容.

TL; DR

整个问题是kubectl1.11和Kubernetes 1.8 之间不兼容.