Consegui configurar um cluster de 5 nós, 2 mestres, 3 trabalhadores. usando as instruções "faça seu próprio" aqui: https://kubernetes.io/docs/getting-started-guides/scratch/#preparing-certs

Consigo executar pods np, mas o dns não funciona. De acordo com a documentação, um método é configurar um serviço DNS de cluster:

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

Tudo bem e elegante, embora eu perceba que é o trabalho do gerenciador de add-on dar o pontapé inicial no pod que o projeto fornece, eu o tenho acionado manualmente, no interesse de depurar

kubectl create -f be dns.yaml

Tudo é criado com sucesso e, eventualmente, a implantação "gera" um pod, e o pod, os contêineres, etc. No entanto, o kube-dns SEMPRE falha com este erro:

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

Eu entendo que este é o kubernetes fornecendo um token para o contêiner, mas o que não consigo entender é por que ele não pode ser encontrado.

Especialmente quando parece que os segredos necessários existem:

# 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
#

Alguém pode oferecer sugestões sobre por que isso está falhando ou como posso fazer para diagnosticar o problema?

BTW, desativei os parâmetros de detecção de vitalidade para me certificar de que não são a causa do problema

Edit: Um pouco mais sobre isso, eu posso docker inspecto contêiner com falha, então fiz isso e /var/run/secrets/kubernetes.io/serviceaccount/tokennão foi mencionado em nenhum lugar, o que me leva a acreditar que o kubelet não está dizendo ao docker para montar aquele volume como as imagens claramente esperam.

Além disso, é lógico que o token deve existir de alguma forma no nó de trabalho em questão, o que parece não existir. Especificamente, estou procurando no /var/lib/kubernetes/kubelet/pods/07ac2f2b-3969-11e8-906e-caef73f3b003/volumes/kubernetes.io~configmap/diretório, onde posso ver um kube-dns-configdiretório, que ESTÁ montado no contêiner e É mencionado na saída de inspeção do docker para o contêiner relevante.

Portanto, pelo menos parece que o problema é com o Kubernetes (e potencialmente com o kubelet) e não com o Docker.

desde já, obrigado

answer

Eu encontrei o problema.

Eu não tinha incluído

--admission-control=ServiceAccount

na linha de comando apiserver.