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

ServiceController не следует запускать без облачного провайдера

Я пытаюсь запустить Kubernetes (Hyperkube) локально с помощью Docker на своей машине:

Я запускаю эту команду, чтобы запустить контейнер kubelet:

docker run \
    --volume=/:/rootfs:ro \
    --volume=/sys:/sys:ro \
    --volume=/var/lib/docker/:/var/lib/docker:rw \
    --volume=/var/lib/kubelet/:/var/lib/kubelet:rw \
    --volume=/var/run:/var/run:rw \
    --net=host \
    --pid=host \
    --privileged=true \
    --name=kubelet \
    -d \
    gcr.io/google_containers/hyperkube-amd64:${K8S_VERSION} \
    /hyperkube kubelet \
        --containerized \
        --hostname-override="127.0.0.1" \
        --address="0.0.0.0" \
        --api-servers=http://localhost:8080 \
        --config=/etc/kubernetes/manifests \
        --cluster-dns=10.0.0.10 \
        --cluster-domain=cluster.local \
        --allow-privileged=true --v=2

который запускает все остальные компоненты Kubernetes. Но некоторые компоненты (сервер api, диспетчер контроллеров ...) сразу закрываются.

логи контейнера диспетчера контроллеров (завершены)

I0425 13:47:27.265926       1 plugins.go:71] No cloud provider specified.
I0425 13:47:27.266077       1 replication_controller.go:208] Starting RC Manager
I0425 13:47:27.266208       1 nodecontroller.go:143] Sending events to api server.
E0425 13:47:27.273153       1 nodecontroller.go:229] Error monitoring node status: Get http://127.0.0.1:8080/api/v1/nodes: dial tcp 127.0.0.1:8080: connection refused
E0425 13:55:55.950012       1 controllermanager.go:216] Failed to start service controller: ServiceController should not be run without a cloudprovider.

Я пытался использовать --cloud-provider="" в приведенной выше команде запуска, но она все еще не работает.

Добавление --cloud-provider к этой команде не устранит сообщение об ошибке «не удалось запустить контроллер службы», которое вы видели.

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

В этом примере он предоставляет простой способ запустить кластер k8s - несколько за счет возможности настройки. Фактические манифесты, запускающие диспетчер-диспетчер (компонент, который жалуется), находятся в / etc / kubernetes / manifestests. в контейнере докеров гиперкуба - и их нелегко переопределить.

Теперь, когда все это сказано, ошибка, которую вы видите (Не удалось запустить контроллер службы), на самом деле не должна быть фатальной, и она просто продолжится после этой точки (потому что облачный провайдер + контроллер службы не являются строго обязательными). Скорее всего, здесь происходит что-то еще. Рекомендую посмотреть, есть ли какие-либо дополнительные журналы после этой точки, и / или проверить журналы kubelet.

Да, я не вижу способа передать этот флаг. Обратите внимание, что вам нужно передать флаг kube-controller-manager здесь: https://github.com/kubernetes/kubernetes/blob/6c195a4923421f756bf13b2a3b2147c4b242aeed/cluster/images/hyperkube/static-pods/master.json#L16. Передача его кубелету не даст никакого эффекта.

Я подал https://github.com/kubernetes/kubernetes/issues/27085 чтобы это исправить. Не стесняйтесь подписаться на рассылку и добавить дополнительную информацию по этой проблеме.