昨日 私はフル機能の例を作成しました これはTerraformを使用して、Google Cloud PlatformでネットワークとGKEクラスタを作成します。すべてはCentOS 7のVagrantで実行されますVMおよびgcloud
、kubectl
、およびhelm
の両方がインストールされます。私も 例を拡張 Helmを使用してSpinnakerをインストールします。
GKEクラスタはgke-test-1
と呼ばれます。私のドキュメントでは、kubectl
のセットアップを文書化しました:
gcloud container clusters get-credentials --region=us-west1 gke-test-1
この後、get nodes
、get pods
、get services
、get deployments
などのさまざまなkubectl
コマンド、およびその他のすべてのクラスター管理コマンドを使用できました。 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 Consoleでシェルを開くと、同じログインコマンドを実行した後、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です。
ダウングレードを試みます。
これは既知の問題ですか、それを回避するために何ができますか?
EDIT:これは再現可能であり、再発を防ぐ方法を見つけることができません。私はすべてのインフラストラクチャを破壊してから、再び立ち上げました。 Terraformは利用可能です ここ 。
リソースをプロビジョニングした後、クラスターが正常であると報告するまで待機しました。
[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とコマンドを使用して再作成できるため、これは再現可能な問題です。
すべてのインフラストラクチャを破棄して再作成することで問題を何度も再現した後、私は GitLabの難解な投稿 について言及している Kubernetes GitHubの問題 を見つけたようです:
... 1.8.xサーバーとの互換性を維持するため(サポートされているバージョンスキュー+/- 1バージョン内)
「+/- 1バージョン」の強調。
マスターとワーカーをKubernetes 1.10にアップグレードする 完全に問題に対処したようです。これで、ノードとポッドを免責でリストできるようになりました。
[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のCloud 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
編集:この非互換性について言及している実際のプルリクエスト が見つかりました。 リリースノートに埋め込まれています 次の情報も見つかりました。
kubectl:このクライアントバージョンには
apps/v1
APIなので、v1.9.0より前のバージョンのクラスターに対しては機能しません。 kubectlは、マイナーバージョンが+/- [1]だけ離れているクラスターとの互換性のみを保証することに注意してください。
この全体的な問題は、kubectl
1.11とKubernetes 1.8の間の非互換性でした。
サーバーからのErrorの取得の問題について(NotAcceptable):不明なwith kubectl
get操作は言う、
$ kubectl get pods
サーバーからのエラー(NotAcceptable):不明(ポッドを取得)
このstackoverflowリンクに従ってローカルkubectl
をダウングレードすることで修正できます kukuctlのバージョンをダウングレードしてminikube k8sのバージョンに一致させます Linux、MacOS、およびWindowsマシンで実行するコマンドが非常に明確に示されています