Мне удалось настроить кластер из 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.