Eu já reproduzi seu problema antes e também executei o contêiner do kubelet com sucesso algumas vezes.
Aqui está o comando exato que estou executando quando é bem-sucedido:
export K8S_VERSION=v1.2.2
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 \
--allow-privileged=true --v=2
Eu removi essas duas configurações do comando sugerido do tutorial porque o DNS não era necessário no meu caso:
--cluster-dns=10.0.0.10
--cluster-domain=cluster.local
Além disso, iniciei o portal SSH docker no plano de fundo antes de iniciar o contêiner do kubelet, usando este comando:
docker-machine ssh 'docker-machine active' -f -N -L "8080:localhost:8080"
Eu também não fiz alterações nos certificados SSL.
Eu posso executar o contêiner do Kubelet com K8S_VERSION = v1.2.2 e K8S_VERSION = 1.2.3.
Em uma execução bem-sucedida, observo que todos os processos são "Up"; nenhum é "Exited":
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
42e6d973f624 gcr.io/google_containers/hyperkube-amd64:v1.2.2 "/hyperkube apiserver" About an hour ago Up About an hour k8s_apiserver.78ec1de_k8s-master-127.0.0.1_default_4c6ab43ac4ee970e1f563d76ab3d3ec9_5d260d3c
135c020f14b4 gcr.io/google_containers/hyperkube-amd64:v1.2.2 "/hyperkube controlle" About an hour ago Up About an hour k8s_controller-manager.70414b65_k8s-master-127.0.0.1_default_4c6ab43ac4ee970e1f563d76ab3d3ec9_9b338f27
873656c913fd gcr.io/google_containers/hyperkube-amd64:v1.2.2 "/setup-files.sh IP:1" About an hour ago Up About an hour k8s_setup.e5aa3216_k8s-master-127.0.0.1_default_4c6ab43ac4ee970e1f563d76ab3d3ec9_ff89fc7c
8b12f5f20e8f gcr.io/google_containers/hyperkube-amd64:v1.2.2 "/hyperkube scheduler" About an hour ago Up About an hour k8s_scheduler.fc12fcbe_k8s-master-127.0.0.1_default_4c6ab43ac4ee970e1f563d76ab3d3ec9_ea90af75
93d9b2387b2e gcr.io/google_containers/etcd:2.2.1 "/usr/local/bin/etcd " About an hour ago Up About an hour k8s_etcd.7e452b0b_k8s-etcd-127.0.0.1_default_1df6a8b4d6e129d5ed8840e370203c11_d66f84f0
f6e45af93ee9 gcr.io/google_containers/hyperkube-amd64:v1.2.2 "/hyperkube proxy --m" About an hour ago Up About an hour k8s_kube-proxy.9a9f4853_k8s-proxy-127.0.0.1_default_5e5303a9d49035e9fad52bfc4c88edc8_b0084efc
f6748442f2d1 gcr.io/google_containers/pause:2.0 "/pause" About an hour ago Up About an hour k8s_POD.6059dfa2_k8s-master-127.0.0.1_default_4c6ab43ac4ee970e1f563d76ab3d3ec9_f4758f9b
d515c10910c4 gcr.io/google_containers/pause:2.0 "/pause" About an hour ago Up About an hour k8s_POD.6059dfa2_k8s-etcd-127.0.0.1_default_1df6a8b4d6e129d5ed8840e370203c11_3248c1d6
958f4865df9f gcr.io/google_containers/pause:2.0 "/pause" About an hour ago Up About an hour k8s_POD.6059dfa2_k8s-proxy-127.0.0.1_default_5e5303a9d49035e9fad52bfc4c88edc8_3850b11e
2611ee951476 gcr.io/google_containers/hyperkube-amd64:v1.2.2 "/hyperkube kubelet -" About an hour ago Up About an hour kubelet
Em uma execução bem-sucedida, também vejo uma saída de log semelhante à sua quando eu executo docker logs kubelet
. Em particular, vejo:
Unable to register 127.0.0.1 with the apiserver: Post http://localhost:8080/api/v1/nodes: dial tcp 127.0.0.1:8080: connection refused
Mas, eventualmente, funciona:
$ kubectl -s http://localhost:8080 cluster-info
Kubernetes master is running at http://localhost:8080
$ kubectl get nodes
NAME STATUS AGE
127.0.0.1 Ready 1h
192.168.99.100 NotReady 1h
localhost NotReady 1h
Outras dicas:
-
Talvez seja necessário esperar um pouco para que o servidor da API seja iniciado. Por exemplo, esse cara usa um loop while :
until $(kubectl -s http://localhost:8080 cluster-info &> /dev/null); do sleep 1 done
-
No Mac OS X, notei que a VM do Docker pode ficar instável sempre que minha conexão sem fio mudar ou quando eu suspender / retomar meu laptop. Normalmente, posso resolver esses problemas com um
docker-machine restart
. -
Ao experimentar com o kubelet, muitas vezes eu quero parar o contêiner do kubelet e parar / remover todos os contêineres na minha janela de encaixe. Eu faço isso executando
docker stop kubelet && docker rm -f $(docker ps -aq)
Informações sobre minha configuração, OS X El Capitan 10.11.2:
$ docker --version
Docker version 1.10.3, build 20f81dd
$ kubectl version
Client Version: version.Info{Major:"1", Minor:"2", GitVersion:"v1.2.0", GitCommit:"5cb86ee022267586db386f62781338b0483733b3", GitTreeState:"clean"}
Server Version: version.Info{Major:"1", Minor:"2", GitVersion:"v1.2.2", GitCommit:"528f879e7d3790ea4287687ef0ab3f2a01cc2718", GitTreeState:"clean"}