web-dev-qa-db-fra.com

Erreur du serveur (NotAcceptable): inconnue

Hier, j'ai construit un exemple complet qui utilise Terraform pour créer un réseau et un cluster GKE dans Google Cloud Platform. Le tout fonctionne dans Vagrant sur CentOS 7 VM et installe à la fois gcloud, kubectl et helm. J'ai aussi étendu l'exemple pour utiliser Helm pour installer Spinnaker.

Le cluster GKE s'appelle gke-test-1. Dans ma documentation, j’ai documenté la configuration kubectl:

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

Après cela, j'ai pu utiliser diverses commandes kubectl pour get nodes, get pods, get services et get deployments, ainsi que pour toutes les autres commandes de gestion de cluster. J'ai également pu utiliser Helm pour installer Tiller et enfin déployer Spinnaker.

Cependant, aujourd'hui, le même processus ne fonctionne pas pour moi. J'ai créé le réseau, le sous-réseau, le cluster GKE et le pool de nœuds, et chaque fois que j'essaie d'utiliser des commandes pour obtenir diverses ressources, j'obtiens cette réponse:

[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)

Fait intéressant, il semble que certaines commandes fonctionnent:

[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

Lorsque j'ouvre un shell dans la console Google Cloud, après avoir exécuté la même commande de connexion, je peux utiliser kubectl pour effectuer toutes les opérations ci-dessus:

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.

La seule différence que je peux voir est la différence entre la version kubectl; Vagrant possède la dernière version, 1.11.0, et la console Google Cloud, 1.9.7.

Je vais essayer de déclasser.

Est-ce un problème connu et que puis-je faire, le cas échéant, pour y remédier?


EDIT: Ceci est reproductible et je ne trouve pas le moyen de l’empêcher de se reproduire. J'ai détruit toute mon infrastructure, puis je l'ai remise en place. La Terraform est disponible ici

Après avoir provisionné les ressources, j'ai attendu que le cluster indique être en bonne santé:

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

J'ai ensuite configuré mes identifiants de connexion:

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

J'ai de nouveau essayé d'obtenir des nœuds:

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

Le cluster apparaît en vert dans le tableau de bord Google Cloud:

 enter image description here

Apparemment, il s’agit d’un problème reproductible, car je peux le recréer à l’aide du même Terraform et des mêmes commandes. 

5
Naftuli Kay

Après avoir reproduit le problème plusieurs fois en détruisant et en recréant toute l'infrastructure, j'ai trouvé un post mystérieux sur GitLab qui mentionne un problème de Kubernetes GitHub qui semble indiquer:

... afin de maintenir la compatibilité avec les serveurs 1.8.x (qui sont dans la version prise en charge inclinée de +/- une version)

L'accent est mis sur la version "+/- one."

(Mettre à niveau les maîtres et les ouvriers vers Kubernetes 1.10 semble avoir entièrement résolu le problème, car je peux maintenant lister les nœuds et les pods en toute impunité:

[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

Il semble que le cloud shell de Google Cloud Platform se fixe sur kubectl 1.9, ce qui correspond à l'écart de version soutenu par les idées exprimées ci-dessus.

Heureusement, le référentiel Kubernetes RHEL propose un grand nombre de versions permettant de définir:

[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

EDIT: J'ai trouvé le demande d'extraction réelle qui mentionne cette incompatibilité }. J'ai également trouvé enterré dans les notes de publication les informations suivantes:

kubectl: cette version du client nécessite l'API apps/v1. Elle ne fonctionnera donc pas avec une version de cluster antérieure à la v1.9.0. Notez que kubectl ne garantit que la compatibilité avec les clusters distants de +/- [une] version mineure. 

TL; DR

Tout ce problème était une incompatibilité entre kubectl 1.11 et Kubernetes 1.8.

10
Naftuli Kay

Pour obtenir le problème suivant: Erreur du serveur (NotAcceptable): unknown avec les opérations kubectlget, par exemple,

$ kubectl get pods

Erreur du serveur (NotAcceptable): unknown (get pods)

Je pourrais résoudre ce problème en rétrogradant ma kubectl locale après ce lien de superposition/ Déclassement de la version de kubectl pour correspondre à la version de minikube k8s où les commandes à suivre sont indiquées très clairement pour les machines Linux, MacOS et Windows

0
Riya John