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

kube-dns не открывается /var/run/secrets/kubernetes.io/serviceaccount/token: нет такого файла или каталога

Мне удалось настроить кластер из 5 узлов, 2 мастера, 3 рабочих. используя инструкции по созданию собственного кода: https://kubernetes.io/docs/getting-started-guides/scratch/#preparing-certs

Я могу запускать pods np, но dns не работает. Согласно документации, одним из способов является настройка службы DNS кластера:

https://github.com/kubernetes/kubernetes/tree/master/cluster/addons/dns/

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

kubectl create -f kube-dns.yaml

Все создается успешно, и в конечном итоге развертывание «порождает» модуль, а модуль - контейнеры и т. Д., Однако kube-dns ВСЕГДА дает сбой с этой ошибкой:

"Failed to create a kubernetes client: open /var/run/secrets/kubernetes.io/serviceaccount/token"

Я понимаю, что это kubernetes, предоставляющий токен для контейнера, но я не понимаю, почему он не может быть найден.

Особенно, когда оказывается, что требуемые секреты существуют:

# kubectl get serviceaccounts -n kube-system
NAME       SECRETS   AGE
default    2         13d
kube-dns   2         29m
bddcbpkbn1:~ # kubectl get secrets -n kube-system
NAME                   TYPE                                  DATA      AGE
default-token-6wnx5    kubernetes.io/service-account-token   2         44m
default-token-94kww    kubernetes.io/service-account-token   2         46m
kube-dns-token-mnbg2   kubernetes.io/service-account-token   2         28m
kube-dns-token-wrs8h   kubernetes.io/service-account-token   2         26m
#

Может ли кто-нибудь предложить какие-либо предложения относительно того, почему это не удается, или как я могу диагностировать проблему?

Кстати, я отключил параметры определения живучести, чтобы убедиться, что они не являются причиной проблемы.

Изменить: немного подробнее об этом, я могу docker inspect отказавший контейнер, поэтому сделали это и нашли /var/run/secrets/kubernetes.io/serviceaccount/token нигде не упоминается, что наводит меня на мысль, что kubelet не сообщает докеру о необходимости монтировать этот том, поскольку изображения явно ожидают.

Кроме того, само собой разумеется, что токен должен существовать в некоторой форме на рассматриваемом рабочем узле, чего, по-видимому, нет. В частности, я смотрю в /var/lib/kubernetes/kubelet/pods/07ac2f2b-3969-11e8-906e-caef73f3b003/volumes/kubernetes.io~configmap/ каталог, где я могу увидеть kube-dns-config каталог, который смонтирован в контейнере, и упоминается в выводе docker inspect для соответствующего контейнера.

Таким образом, по крайней мере, кажется, что проблема связана с Kubernetes (и, возможно, с kubelet), а не с Docker.

заранее спасибо

Я нашел проблему.

Я не включил

--admission-control=ServiceAccount

в командной строке apiserver.