Назад | Перейти на главную страницу

kubectl «не удалось согласовать версию API»

Здравствуйте, со вчерашнего утра я столкнулся с проблемами при попытке получить доступ к одному из моих кластеров Kubernetes, размещенных на движке контейнеров Google. У меня никогда не было проблем, пока он не начал давать сбой, но теперь каждая команда kubectl, которую я пытаюсь выполнить, терпит неудачу, говоря «ошибка: не удалось согласовать версию api;».

то есть:

$ kubectl version
Client Version: version.Info{Major:"1", Minor:"3", GitVersion:"v1.3.4",
GitCommit:"dd6b458ef8dbf24aff55795baa68f83383c9b3a9", GitTreeState:"clean",
BuildDate:"2016-08-01T16:45:16Z", GoVersion:"go1.6.2", Compiler:"gc",
Platform:"darwin/amd64"}
error: failed to negotiate an api version; server supports: map[], client
supports: map[v1:{} apps/v1alpha1:{} autoscaling/v1:{} componentconfig/v1alpha1:{} 
batch/v1:{} batch/v2alpha1:{} authentication.k8s.io/v1beta1:{} federation/v1beta1:{} 
rbac.authorization.k8s.io/v1alpha1:{} authorization.k8s.io/v1beta1:{} extensions/v1beta1:{} 
policy/v1alpha1:{}]

Я попытался удалить, а затем воссоздать свой кластер безуспешно, и я убедился, что версия kubernetes одинакова на сервере и на клиенте (1.3.4). Я могу видеть пул экземпляров, запущенных в облачной консоли Google, а также кластер, когда я перехожу на вкладку движка контейнера, но я мало понимаю, как действовать дальше. Может ли кто-нибудь пролить свет на то, что может происходить?

Большое спасибо! Фабрис.

Я боролся с этой проблемой в течение нескольких дней, но наконец нашел решение, которое сработало для меня. Я хотел «начать все заново» с самого начала, потому что подозревал, что моя конфигурация сломана / «отравлена», но я не уверен, какие (если таковые имеются) из первых 8 шагов были действительно необходимы:

  1. Сделайте резервную копию существующей конфигурации для gcloud и kubectl
    • mv ~/.kube/config ~/.kube/config.old
    • mv ~/.config ~/.config.old
  2. Удалить SDK Google Cloud
    • rm -rf ~/bin/google-cloud-sdk
  3. Удалите строки из моего ~/.bash_profile которые были добавлены в процессе предыдущей установки с помощью текстового редактора (одна строка, которая устанавливает PATH и одна строка, которая включает завершение bash)
  4. Скачать последняя версия Google Cloud SDK
  5. Распаковать архив и запустить install.sh сценарий
  6. Бегать gcloud init и следуйте инструкциям, которые он дает
    • Я ответил "y" на все (настроить для использования с движком контейнеров Google, изменить .bash_profile и включить завершение bash), но как минимум вы должны настроить его для использования с движком контейнера Google
  7. gcloud components install kubectl
  8. Получение учетных данных кластеров контейнеров gcloud

Когда я бежал kubectl version в этот момент у меня другая ошибка! Это то, что я называю «прогрессом». Теперь он сказал мне, что «Google не может найти учетные данные по умолчанию» и следовать инструкциям на эта страница. Вкратце:

  1. Создайте учетную запись службы, как описано, загрузите ключ .json и переместите его в каталог по вашему выбору.
  2. Задайте в переменной среды GOOGLE_APPLICATION_CREDENTIALS путь к загруженному вами ключу.
  3. Установите бета-компонент gcloud (gcloud components install beta)
  4. Бегать gcloud beta auth application-default login

После этого, kubectl version снова работал! Надеюсь, это сработает и для вас.