Подтвердить что ты не робот

Ошибка: не удалось прочитать версию с сервера

Я получаю следующую ошибку при попытке запустить kubectl локально.

error: couldn't read version from server: Get http://localhost:8080/api: dial tcp 127.0.0.1:8080: connection refused

Я знаю, что это связано с конфигурацией kubectl, но я не понимаю, как ее решить. 2 дня назад я экспериментировал с GKE и установил конфигурацию в GCE. Я попытался удалить этот файл конфигурации, а затем получить Vagrant с локальным ядром CoreOS. Этот vagrant up вызывает аналогичную ошибку, жалуясь на невозможность подключения.

Каков подходящий способ инструмента kubectl, чтобы он мог подключаться к API и возвращать информацию?

4b9b3361

Ответ 1

tl; dr gcloud container get-credentials --cluster=CLUSTER_ID --zone=YOURZONE


Итак, немного предыстории: инструмент kubectl разработан компанией Google, но на самом деле не интегрирован непосредственно в облако Google, облако Google просто помогает вам получить совместимую версию с ним, когда вы указываете установить компонент.

Если вы получаете Get http://localhost:8080/api: dial tcp 127.0.0.1:8080: connection refused скорее всего, это связано с тем, kubectl инструмент kubectl не настроен или неправильно настроен. Я полагаю, что попытка сделать это - предположить, что у вас kubernetes каким-то образом настроен только локально, чего в данном случае нет, поскольку все это происходит в облаке Google (отсюда загадочная ошибка).

Вы можете убедиться, что ваш kubectl неправильно настроен, запустив kubectl config view. Если он настроен правильно, вы должны видеть такие вещи, как несколько записей в кластере, с IP-адресами, а в пользователях вы должны видеть пользователя для каждого проекта и т.д. Если вы не видите ничего подобного (т.е. Пустые кластеры и пустые пользователи) тогда вы неправильно настроены; вы также столкнетесь с загадочными проблемами, если не увидите записи для конкретного кластера, над которым вы пытаетесь работать.

К gcloud команды gcloud автоматически настраивают его для вас, поэтому, если вы будете следовать чему-то вроде приветственного учебника по WordPress, это будет выглядеть так, будто вам не нужно этого делать, и каким-то образом kubectl взаимодействует с gcloud, но ничего подобного не происходит. Также очень легко потерять эту конфигурацию.

Чтобы дать gcloud команду kubectl, выполните следующее:

gcloud container get-credentials --cluster=CLUSTER_ID --zone=YOURZONE

Для идентификатора кластера запустите gcloud container clusters list

Зона - "европа-запад1-й" или что вы выбрали.

Ответ 2

Раньше это была beta, но это уже не так. Итак, команда сейчас такая:

gcloud container clusters get-credentials <cluster-name> --zone=<zone-of-cluster> --project=<project-id>    

Если вы попытаетесь запустить его с помощью команды beta вы получите следующее сообщение об ошибке:

ВНИМАНИЕ: Вы gcloud beta, но с текущей конфигурацией будет использоваться API Kubernetes Engine v1 вместо API v1beta1. gcloud beta gcloud по умолчанию перейдет на использование API Kubernetes Engine v1beta1 к концу марта 2018 года.

Позже, если вы хотите переключаться между кластерами с помощью kubectl (только для тех, для которых вы уже прошли аутентификацию), вы можете использовать:

kubectl config use-context gke_<project-name>_<zone>_<cluster>

Пример:

kubectl config use-context gke_my-project_europe-west1-c_my-cluster

Чтобы увидеть, где вы сейчас находитесь:

kubectl config current-context

ура

Ответ 3

Вышеупомянутое решение больше не работает. Вам нужно сделать следующее:

gcloud container clusters get-credentials <cluster-name> \
    [--zone=<zone-of-cluster> --project=<project-id>]

Ответ 4

Я использовал Google Container Engine (GKE) и получил эту ошибку. В моем случае это произошло потому, что я забыл сначала создать кластер контейнеров.

Если вы создаете кластер с помощью команды gcloud, он устанавливает для вас конфигурацию.

gcloud container clusters create my-cluster-name

Ответ 5

Я также получил эту ошибку при локальном развертывании с конфигурацией по умолчанию в Ubuntu Trusty. Оказывается, api-сервер не запускался из-за некоторой ошибки с DenyEscalatingExec, особенно для ubuntu в k8s v1.1.7

https://github.com/kubernetes/kubernetes/issues/14474 https://github.com/kubernetes/kubernetes/issues/14627

Я восстановил кластер без него, удалив директиву из файла ~/kubernetes-1.1.7/cluster/ubuntu/config-default.sh перед выполнением kube-up.sh

# Admission Controllers to invoke prior to persisting objects in cluster
export ADMISSION_CONTROL=NamespaceLifecycle,LimitRanger,ServiceAccount,ResourceQuota,DenyEscalatingExec,SecurityContextDeny

DenyEscalatingExec необходимо удалить из этой строки, и в результате он не станет флагом в /etc/default/kube-apiserver после запуска кластера.

Отказ от ответственности: я не уверен, что делает DenyEscalatingExec, я просто обнаружил, что это помогло мне решить эту конкретную проблему.

Ответ 6

Это поток, просто ссылку документация. В настоящее время...

gcloud container clusters get-credentials NAME [--zone ZONE, -z ZONE] [GLOBAL-FLAG …]