【发布时间】: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