【问题标题】:Error from server (NotAcceptable): unknown来自服务器的错误(不可接受):未知
【发布时间】:2018-12-08 01:48:50
【问题描述】:

昨天,I built a full-featured example 使用 Terraform 在 Google Cloud Platform 中创建网络和 GKE 集群。整个过程在 CentOS 7 VM 上的 Vagrant 中运行,并安装了 gcloud、kubectl 和 helm。我也extended the example使用Helm来安装Spinnaker。

GKE 集群称为gke-test-1。在我的文档中,我记录了获得kubectl 设置:

gcloud container clusters get-credentials --region=us-west1 gke-test-1

在此之后,我可以使用各种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)

有趣的是,似乎某些命令确实有效:

[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

当我在 Google Cloud 控制台中打开 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.

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

我会尝试降级。

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


编辑:这是可重现的,我找不到阻止它再次发生的方法。我拆除了所有的基础设施,然后又重新站起来。 Terraform 可用here。

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

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

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

[vagrant@katyperry vagrant]$ gcloud container clusters get-credentials \
    --region=us-west1 gke-test-1

我再次尝试获取节点:

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

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

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

【问题讨论】:

  • 我发现some arcane post on GitLab 似乎表明kubectl 版本兼容性仅在主版本的一个次要版本中。这对我来说很有意义,因为集群版本是 1.8,客户端版本是 1.11,并且 some 调用工作,而不是所有调用。离开基础设施一段时间后问题没有自行解决,所以我正在尝试升级以证明我的理论。

标签: kubernetes kubectl google-kubernetes-engine


【解决方案1】:

在通过销毁和重新创建所有基础架构成功多次重现问题后,我发现some arcane post on GitLab 提到a Kubernetes GitHub issue 似乎表明:

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

强调“+/- 一个版本”。

Upgrading the masters and the workers to 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

Google Cloud Platform 的云 shell 似乎固定到 kubectl 1.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

编辑:我找到了actual pull request that mentions this incompatibility。我还找到buried in the release notes以下信息:

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

TL;DR

整个问题是kubectl 1.11 和 Kubernetes 1.8 之间的不兼容。

【讨论】:

    【解决方案2】:

    关于从服务器获取Error (NotAcceptable): unknown with kubectl get 操作说的问题,

    $ kubectl get pods
    

    来自服务器的错误(不可接受):未知(获取 pod)

    我可以通过以下 stackoverflow 链接 Downgrade kubectl version to match minikube k8s version 降级我的本地 kubectl 来修复它,其中非常清楚地给出了 Linux、MacOS 和 Windows 机器要遵循的命令

    【讨论】:

    • 请添加有关链接资源的一些信息和上下文。是什么网站,简单介绍一下就好了
    猜你喜欢
    • 2015-01-19
    • 2013-03-05
    • 1970-01-01
    • 2021-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-19
    • 2014-12-29
    相关资源
    最近更新 更多