Informe inicial en https://github.com/kubernetes/kubeadm/issues/212.
Sospecho que esto se introdujo en https://github.com/kubernetes/kubernetes/pull/43474.
Qué está pasando (todo en un solo maestro):
En la lista de condiciones del nodo:
Ready False Wed, 29 Mar 2017 15:54:04 +0000 Wed, 29 Mar 2017 15:32:33 +0000 KubeletNotReady runtime network not ready: NetworkReady=false reason:NetworkPluginNotReady message:docker: network plugin is not ready: cni config uninitialized
El comportamiento anterior era que el kubelet se uniera al clúster incluso con CNI no configurado. El usuario normalmente ejecutará un DaemonSet con redes de host para iniciar CNI en todos los nodos. El hecho de que el nodo nunca se une significa que, fundamentalmente, DaemonSets no se puede utilizar para arrancar CNI.
/ cc @lukemarsden @luxas @mikedanese
Si revertimos # 43474 por completo, nos encontramos nuevamente en una situación en la que rompemos los complementos CNI 0.2.0 (consulte https://github.com/kubernetes/kubernetes/issues/43014)
¿Deberíamos considerar hacer algo como https://github.com/kubernetes/kubernetes/pull/43284?
También / cc @thockin
/ cc @ kubernetes / sig-network-bugs
@jbeda ¿puedo obtener algunos registros de kubelet con --loglevel = 5?
@yujuhong : mencionas que crees que esto funciona según lo previsto. Independientemente, kubeadm dependía de este comportamiento. Introdujimos un cambio importante con # 43474. Podemos hablar sobre la forma correcta de solucionar este problema para 1.7 pero, por ahora, necesitamos que kubeadm vuelva a funcionar.
Discusión de Slack en curso ahora: https://kubernetes.slack.com/archives/C09QYUH5W/p1490803144368246
Parece que DaemonSets aún se programará incluso si el nodo no está listo. Esto es realmente, en este caso, kubeadm
siendo un poco demasiado paranoico.
El plan actual que vamos a probar es que kubeadm
ya no espere a que el nodo maestro esté listo, sino que simplemente lo registre. Esto debería ser lo suficientemente bueno como para permitir que un CNI DaemonSet se programe para configurar CNI.
@kensimon está probando esto.
@jbeda sí, parece que el controlador DaemonSet todavía los pondrá en cola principalmente porque ignora por completo la conexión en red. Realmente deberíamos arreglar esto de manera más general. ¿Hay algo inmediato que hacer en kube o todo está en kubeadm por ahora?
Estoy intentando instalar kubernetes con kubeadm en Ubuntu 16.04. ¿Existe un arreglo rápido para esto?
@jbeda si tiene una versión parcheada feliz de probarla ..
Tengo a kubeadm superando el estado NotReady
del nodo, pero la implementación ficticia que crea no funciona debido a la corrupción node.alpha.kubernetes.io/notReady
impide su ejecución. Agregar tolerancias no parece ayudar, no estoy exactamente seguro de cómo proceder en este momento. ¿Alguien puede arrojar algo de luz sobre cómo implementar un pod que tolera la corrupción notReady
?
Estoy explorando algunas otras opciones, como no marcar el nodo como no listo, pero no está claro que eso sea lo que queremos hacer.
lo solucionamos eliminando KUBELET_NETWORK_ARGS de la línea de comandos de kubelet. después de eso, kubeadm init funcionó bien y pudimos instalar el complemento canal cni.
@sbezverk , ¿podría describir cómo se hace?
Puede confirmar los resultados de @sbezverk (buen hallazgo :)), ajustar /etc/systemd/system/10-kubeadm.conf y eliminar KUBELET_NETWORK_ARGS hará que se ejecute en centos. Probado con tejido.
@overip necesita editar /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
ExecStart = / usr / bin / kubelet $ KUBELET_KUBECONFIG_ARGS $ KUBELET_SYSTEM_PODS_ARGS $ KUBELET_NETWORK_ARGS $ KUBELET_DNS_ARGS $ KUBELET_AUTHZ_ARGS $ KUBELET_SEXTRA
eliminar $ KUBELET_NETWORK_ARGS
y luego reinicie kubelet después de que bebeadm init debería funcionar.
Esto es lo que hice
reinicio de kubeadm
/etc/systemd/system/kubelet.service.d/10-kubeadm.conf
systemctl daemon-reload
systemctl reiniciar kubelet.service
kubeadm init
Todo correcto, y mientras estamos en eso
Si ve esto:
kubelet: error: no se pudo ejecutar Kubelet: no se pudo crear kubelet: mala configuración: kubelet controlador cgroup: "cgroupfs" es diferente del controlador docker cgroup: "systemd"
tienes que editar tu /etc/systemd/system/kubelet.service.d/10-kubeadm.conf y agregar la bandera --cgroup-driver = "systemd"
y haz lo mismo que arriba
reinicio de kuebadm
systemctl daemon-reload
systemctl reiniciar kubelet.service
kubeadm init.
Tendría cuidado al eliminar --network-plugin=cni
de las banderas CLI de kubelet, esto hace que kubelet use el complemento no_op de forma predeterminada ... Me sorprendería si los complementos comunes como calico / weave incluso funcionarían en este caso (pero luego, de nuevo, mi comprensión de cómo funcionan estos complementos es un poco limitada).
@kensimon hm, no he visto ningún problema en mi configuración, implementé el complemento canal cni y funcionó bien.
@sbezverk ¿Las redes entre hosts también funcionan bien?
@resouer no puede confirmar, tengo 1.6.0 solo como todo en uno.
@resouer @sbezverk Me
[root@deploy-01 x86_64]# kubectl get nodes
NAME STATUS AGE VERSION
deploy-01 Ready 51m v1.6.0
master-01 Ready 4m v1.6.0
`` `[ root @ deploy-01 x86_64] # kubectl get pods -n kube-system
NOMBRE ESTADO LISTO REINICIE EDAD
etcd-deploy-01 1/1 En ejecución 0 50m
kube-apiserver-deploy-01 1/1 Corriendo 0 51m
kube-controller-manager-deploy-01 1/1 En ejecución 0 50m
kube-dns-3913472980-6plgh 3/3 Corriendo 0 51m
kube-proxy-mbvdh 1/1 En ejecución 0 4m
kube-proxy-rmp36 1/1 En ejecución 0 51m
kube-Scheduler-deploy-01 1/1 En ejecución 0 50m
kubernetes-dashboard-2396447444-fm8cz 1/1 Corriendo 0 24m
weave-net-3t487 2/2 Corriendo 0 44m
weave-net-hhcqp 2/2 Corriendo 0 4m
''
La solución funciona pero no se puede poner en marcha la franela ...
@stevenbower en el peor de los casos, puede volver a colocar esta configuración y reiniciar kubelet cuando haya terminado con kubeadm business.
Tengo un clúster de tres nodos con weave
funcionando. No estoy seguro de cuán estable podría ser esto con este truco, ¡pero gracias de todos modos! : smiley:
En un nodo lateral, puede volver a colocar $ KUBELET_NETWORK_ARGS, después de que pase el init en el maestro. De hecho, no lo eliminé en la máquina a la que me uní, solo el controlador cgroup, de lo contrario, kubelet y docker no funcionarán juntos.
Pero no tienes que reiniciar kubeadm, solo cambia /etc/systemd/system/kubelet.service.d/10-kubeadm.conf y haz el baile systemctl:
systemctl daemon-reload
systemctl reiniciar kubelet.service
Para mí, tengo 2 grupos: uno en el que apliqué el parche de https://github.com/kubernetes/kubernetes/pull/43824 y dejé que kubeadm procediera normalmente en la inicialización, y otro con KUBELET_NETWORK_ARGS eliminado. En el clúster con KUBELET_NETWORK_ARGS eliminado, cualquier tráfico entre pods falla.
En un clúster con KUBELET_NETWORK_ARGS eliminado:
$ kubectl run nginx --image=nginx
deployment "nginx" created
$ kubectl expose deployment nginx --port 80
service "nginx" exposed
$ kubectl run --rm -i -t ephemeral --image=busybox -- /bin/sh -l
If you don't see a command prompt, try pressing enter.
/ # wget nginx.default.svc.cluster.local
wget: bad address 'nginx.default.svc.cluster.local'
En un clúster con KUBELET_NETWORK_ARGS normal pero con un kubeadm parcheado:
$ kubectl run nginx --image=nginx
deployment "nginx" created
$ kubectl expose deployment nginx --port 80
service "nginx" exposed
$ kubectl run --rm -i -t ephemeral --image=busybox -- /bin/sh -l
If you don't see a command prompt, try pressing enter.
/ # wget nginx.default.svc.cluster.local
Connecting to nginx.default.svc.cluster.local (10.109.159.41:80)
index.html 100% |********************************************************************************************| 612 0:00:00 ETA
Si usted es uno de los que desactivó KUBELET_NETWORK_ARGS, verifique si lo anterior funciona para usted.
Sugiero que eliminemos tanto el nodo listo como la verificación de implementación ficticia
en total para 1.6 y pasarlos a una fase de validación para 1.7.
El 29 de marzo de 2017 a las 10:13 a. M., "Dan Williams" [email protected] escribió:
@jbeda https://github.com/jbeda sí, parece el DaemonSet
el controlador todavía los pondrá en cola principalmente porque es completamente ignorante
de la interconexión. Realmente deberíamos arreglar esto de manera más general. Está ahí
¿Algo inmediato que hacer en kube o está todo en kubeadm por ahora?-
Recibes esto porque te mencionaron.
Responda a este correo electrónico directamente, véalo en GitHub
https://github.com/kubernetes/kubernetes/issues/43815#issuecomment-290158416 ,
o silenciar el hilo
https://github.com/notifications/unsubscribe-auth/ABtFIUw8GIJVfHrecB3qpTLT8Q4AyLVjks5rqpFKgaJpZM4MtMRe
.
¿Alguien más ejecuta Ubuntu 16.04? Eliminé el KUBELET_NETWORK_ARGS
del servicio systemd
y recargué el demonio systemd
. Puedo activar un nodo maestro pero no puedo unirme a un nodo. Falla con el error The requested resource is unavailable
KUBELET_NETWORK_ARGS eliminado, cualquier tráfico entre pods falla.
No me sorprendería ya que KUBELET_NETWORK_ARGS le dice a kubelet qué complemento usar, dónde buscar la configuración y los binarios. Los necesitas.
Recomiendo # 43835 (y la selección de cereza 1.6 # 43837) como la solución que hacemos para 1.6. Probé ambos y funcionan. He asignado a @jbeda y @luxas para que las revisen cuando se despierten.
Ambos RP parecen razonables. Pero creo que deberíamos considerar ir con https://github.com/kubernetes/kubernetes/pull/43824 en su lugar. Si bien es un poco más complicado, conserva esa ruta de código para que los usuarios que preconfiguran CNI fuera de usar un Daemonset (hago esto en https://github.com/jbeda/kubeadm-gce-tf aunque no lo he hecho actualizado a 1.6) todavía espera a que los nodos estén listos.
Como beneficio adicional, este es el primer RP de @kensimon para Kubernetes y ha hecho todo lo posible para probar estas cosas. Pero, para ser honesto, ambos funcionan y realmente quiero verlo arreglado. :)
Lo siento, me perdí https://github.com/kubernetes/kubernetes/pull/43824. También estoy contento con cualquiera de los dos si ambos funcionan.
También estoy contento con cualquiera de los dos si ambos funcionan también
@kensimon Me funciona cuando solo desactivo KUBELET_NETWORK_ARGS
durante kubadm
init
. Gracias a tus instrucciones pude verificar eso.
Confirmado @webwurst para que funcione cuando solo deshabilita KUBELET_NETWORK_ARGS
durante kubadm
init
. Sin embargo, tuve que reiniciar kube-dns para que lo recogiera. El cheque de @kensimon funciona, resuelve dns.
Aunque estoy de acuerdo en que este es un truco terrible, y demasiado horrible para que la mayoría de la gente lo siga, mirando los canales flojos.
Los parches de @kensimon o @mikedanese presentan una mejor solución.
@coeki, ¿cómo exactamente reiniciaste kube-dns? Probé kubectl delete pod kube-dns-3913472980-l771x --namespace=kube-system
y ahora kube-dns permanece pendiente kube-system kube-dns-3913472980-7jrwm 0/3 Pending 0 4m
Hizo exactamente como se describe: eliminar KUBELET_NETWORK_ARGS
, sudo systemctl daemon-reload && sudo systemctl restart kubelet.service
, kubeadm init
, agregar KUBELET_NETWORK_ARGS
, nuevamente sudo systemctl daemon-reload && sudo systemctl restart kubelet.service
Pero luego mi maestro se queda en NotReady
. En describe
obtengo
Conditions:
Type Status LastHeartbeatTime LastTransitionTime Reason Message
---- ------ ----------------- ------------------ ------ -------
...
KubeletNotReady runtime network not ready: NetworkReady=false reason:NetworkPluginNotReady message:docker: network plugin is not ready: cni config uninitialized
Intenté reiniciar kube-dns como se describe anteriormente, pero no tuve éxito. ¿Alguna idea? Me muero por esto, tratando de hacer que nuestro clúster se ejecute nuevamente después de una actualización 1.6.0 fallida esta morging :(
@patte Así que solo delete pods kube-dns-3913472980-3ljfx -n kube-system
Y luego vuelve a aparecer kube-dns.
¿Después de kubeadm init, agregó KUBELET_NETWORK_ARGS
, nuevamente sudo systemctl daemon-reload && sudo systemctl restart kubelet.service
instaló una red de pod, como weave o calico? Agregue eso primero, debería poder hacerlo funcionar.
Probé y probé en centos7 y lo hice en ubuntu / xenial, así que debería funcionar.
Para recapitular lo que hice:
eliminar KUBELET_NETWORK_ARGS
sudo systemctl daemon-reload && sudo systemctl restart kubelet.service
kubeadm init --token=$TOKEN --apiserver-advertise-address=$(your apiserver ip address)
agregar KUBELET_NETWORK_ARGS
nuevo
sudo systemctl daemon-reload && sudo systemctl restart kubelet.service
kubectl apply -f https://git.io/weave-kube-1.6
Me uní a una máquina, por lo general, tengo que agregar una ruta estática a 10.96.0.0 (IP del clúster) ya que estoy en vagabundo.
Úselo con $ TOKEN, pero este paso es adicional.
Luego:
delete pods kube-dns-3913472980-3ljfx -n kube-system
Espéralo
kubectl run nginx --image=nginx
kubectl expose deployment nginx --port 80
kubectl run --rm -i -t ephemeral --image=busybox -- /bin/sh -l
/ # wget nginx.default.svc.cluster.local
Connecting to nginx.default.svc.cluster.local (10.101.169.36:80)
index.html 100% |***********************************************************************| 612 0:00:00 ETA
Funciona para mí, aunque es un truco horrible;)
Estoy realmente sorprendido de que la comunidad de desarrollo de Kubernetes no haya proporcionado ninguna ETA para una solución oficial. Quiero decir que este es un error horrible que debería detectarse fácilmente durante la prueba del código. Dado que no lo ha hecho, al menos, 1.6.1 debería promoverse lo antes posible con la solución para que las personas dejen de piratear sus clústeres y comiencen a hacer cosas productivas;). ¿Me equivoco aquí?
Oigan todos,
Estuve un poco distraído esta semana, y este es un hilo largo lleno de
cosas de kubeadm que no conozco muy bien. ¿Alguien puede resumirme? I
Creo que entiendo la esencia del error, pero ¿cuáles son las soluciones propuestas y
¿Qué los hace horribles?
El jueves 30 de marzo de 2017 a las 8:13 a. M., Serguei Bezverkhi < [email protected]
escribió:
Estoy realmente sorprendido de que la comunidad de desarrollo de Kubernetes no haya
proporcionó cualquier ETA para una solución oficial. Quiero decir que este es un error horrible que
debería quedar atrapado fácilmente durante la prueba del código. Dado que no lo ha hecho, en
como mínimo, la versión 1.6.1 debería introducirse lo antes posible con la solución para que la gente
deje de piratear sus clústeres y comience a hacer cosas productivas;). Soy yo
mal aquí?-
Recibes esto porque te mencionaron.
Responda a este correo electrónico directamente, véalo en GitHub
https://github.com/kubernetes/kubernetes/issues/43815#issuecomment-290442315 ,
o silenciar el hilo
https://github.com/notifications/unsubscribe-auth/AFVgVEoKuUf28VazmUApsnyfGhuAhZIqks5rq8aLgaJpZM4MtMRe
.
Un cambio en kubelet (# 43474) hizo que kubelet comenzara a informar correctamente que la red no estaba lista antes de que se inicializara el complemento cni. Esto rompió algunos pedidos de los que dependíamos y provocó un punto muerto en la inicialización del maestro de kubeadm. No lo detectamos porque las pruebas de kubeadm e2e se habían interrumpido durante unos días antes de este cambio.
Las correcciones propuestas actuales son # 43824 y # 43835.
ok, eso fue lo que entendí. El enclavamiento entre el complemento de red
viene y la preparación del nodo es un poco horrible en este momento.
El jueves 30 de marzo de 2017 a las 8:28 a. M., Mike Danese [email protected]
escribió:
Un cambio en kubelet (# 43474
https://github.com/kubernetes/kubernetes/pull/43474 ) provocó que kubelet
comience a informar correctamente que la red no está lista antes de que el complemento cni fuera
inicializado. Esto rompió algunos pedidos del que dependíamos y causó
un interbloqueo en la inicialización maestra de kubeadm. No lo atrapamos porque
Las pruebas de kubeadm e2e se habían interrumpido durante unos días antes de este cambio.Las correcciones propuestas actuales son # 43824
https://github.com/kubernetes/kubernetes/pull/43824 y # 43835
https://github.com/kubernetes/kubernetes/pull/43835 .-
Recibes esto porque te mencionaron.
Responda a este correo electrónico directamente, véalo en GitHub
https://github.com/kubernetes/kubernetes/issues/43815#issuecomment-290447309 ,
o silenciar el hilo
https://github.com/notifications/unsubscribe-auth/AFVgVLzQLxeV6qp1Rw1fNALDDaf-Sktyks5rq8o2gaJpZM4MtMRe
.
Todavía prefiero el # 43835. Es un cambio más simple, no creo que las comprobaciones de e2e deban hacerse donde están, y hay informes de que # 43824 aún no funciona. Voy a presionar para que esto se resuelva hoy.
+1 para resolverlo hoy, ya que se desperdician muchos esfuerzos en lidiar con la garantía de la solución alternativa.
No puedo creer que nadie haya probado kubeadm 1.6.0 antes del lanzamiento de 1.6.0 ...
Y, kubelet 1.5.6 + kubeadm 1.5.6 también están rotos, /etc/systemd/system/kubelet.service.d/10-kubeadm.conf hace referencia a /etc/kubernetes/pki/ca.crt pero kubeadm no genera ca.crt, aunque hay ca.pem.
Actualmente 1.6.0 y 1.5.6 son las únicas versiones que quedan en el repositorio apt de k8s ...
"fuera de la caja", palabras aprendidas hoy.
Todavía prefiero el # 43835. Es un cambio más simple, no creo que las comprobaciones de e2e deban hacerse donde están, y hay informes de que # 43824 aún no funciona. Voy a presionar para que esto se resuelva hoy.
De acuerdo con Mike en este. # 43835 es el cambio más simple y la validación (si es necesario) se puede realizar en una fase separada.
@thockin , realmente necesitamos condiciones y estados más detallados para la creación de redes, especialmente con ho stNetwork: true. Los nodos pueden estar listos para algunos pods, pero no para otros.
No podemos usar nodeNetworkUnavailable, porque eso es específico para los proveedores de la nube. Probablemente necesitemos otro, o una forma para que el planificador permita ho stNetwork: true pods en nodos con Net workReady: false , o hacer que las taints funcionen para nodos no preparados. Y pruebas de trabajo de kubeadm e2e :(
De acuerdo. He estado retrasando el problema porque no tenía grandes respuestas,
pero necesitamos obtener esto en 1.7
El jueves 30 de marzo de 2017 a las 10:02 a. M., Dan Williams [email protected]
escribió:
@thockin https://github.com/thockin realmente necesitamos un grano más fino
condiciones y estado para la creación de redes, especialmente con ho stNetwork: true.
Los nodos pueden estar listos para algunos pods, pero no para otros.No podemos usar nodeNetworkUnavailable, porque eso es específico de la nube
proveedores. Probablemente necesitemos otro, o una forma para que el programador
permitir ho stNetwork: true pods en nodos con Net workReady: false , o hacer que el
las manchas funcionan para los nodos que no están preparados.-
Recibes esto porque te mencionaron.
Responda a este correo electrónico directamente, véalo en GitHub
https://github.com/kubernetes/kubernetes/issues/43815#issuecomment-290475480 ,
o silenciar el hilo
https://github.com/notifications/unsubscribe-auth/AFVgVAaO9c76_R8me9PDo96AQ1ZrplMxks5rq-A1gaJpZM4MtMRe
.
@thockin ¿ alguna solución preferida? Podemos bloquear la preparación del nodo y averiguar quién usa IsNodeReady () como ya lo hemos hecho, o podríamos agregar otra condición de nodo y luego arreglar quién sabe cuántos bits de la base de código en otro lugar. O tal vez haya otra opción.
No podemos usar nodeNetworkUnavailable, porque eso es específico para los proveedores de la nube. Probablemente necesitemos otro, o una forma para que el planificador permita ho stNetwork: true pods en nodos con Net workReady: false , o hacer que las taints funcionen para nodos no preparados.
Creo que el programador se puede arreglar para respetar las manchas y las tolerancias, en lugar de descartar por completo todos los nodos que no estén listos.
Alguien tendrá que aplicar la tolerancia en la red ho verdaderas vainas. No sé quién, pero no debería ser el programador, ya que enseñarle al programador a comprender las especificaciones del pod parece demasiado.
/ cc @davidopp @ dchen1107
Además, para cualquiera que haya probado mis parches o los de michael y se esté quedando colgado en el plano de control que se acerca, parece que construir un kubeadm desde master
no funciona cuando se tiene que administrar un clúster v1.6.0 , debido a que kubeadm intenta ejecutar kube-apiserver con argumentos no válidos:
unknown flag: --proxy-client-cert-file
Si desea probar los cambios míos o de Michael contra un clúster v1.6.0, selecciónelos con precisión contra v1.6.0 en lugar de construir sobre el maestro por ahora.
@yujuhong, el programador ya aplica automáticamente las tolerancias a los pods (consulte https://github.com/kubernetes/kubernetes/pull/41414), esto parece un caso de uso bastante similar
No tengo una imagen clara de todas las impurezas y la preparación.
red, en este punto. Dan, tienes media hora para escribir el
estado actual, para que podamos empezar a separarlo? Creo que lo sabes
mejor. Siento que tenemos una serie de problemas granulares que acabamos de
cubierto con una manta hasta ahora.
El jueves 30 de marzo de 2017 a las 10:22 a.m., Ken Simon [email protected]
escribió:
@yujuhong https://github.com/yujuhong el programador ya
autoaplica tolerancias a las vainas (ver # 41414
https://github.com/kubernetes/kubernetes/pull/41414 ), esto parece un
caso de uso bastante similar-
Recibes esto porque te mencionaron.
Responda a este correo electrónico directamente, véalo en GitHub
https://github.com/kubernetes/kubernetes/issues/43815#issuecomment-290481017 ,
o silenciar el hilo
https://github.com/notifications/unsubscribe-auth/AFVgVMas2IP5X5YA0V5626UlGbaS98jtks5rq-TCgaJpZM4MtMRe
.
@thockin Puedo hacer eso, ¿dónde debería ponerlo?
hay un par de problemas relacionados, ¿podemos cambiar el título de uno de ellos, publicar un
resumen del estado actual y partir de ahí?
El jueves 30 de marzo de 2017 a las 10:50 a.m., Dan Williams [email protected]
escribió:
@thockin https://github.com/thockin Puedo hacer eso, ¿dónde debería poner?
¿eso?-
Recibes esto porque te mencionaron.
Responda a este correo electrónico directamente, véalo en GitHub
https://github.com/kubernetes/kubernetes/issues/43815#issuecomment-290489157 ,
o silenciar el hilo
https://github.com/notifications/unsubscribe-auth/AFVgVCXJYk9J0QmjTqQA6PPVuhzMHlLZks5rq-t-gaJpZM4MtMRe
.
¿Tenemos alguna línea de tiempo sobre cuándo se transferirá este arreglo al repositorio de CentOS?
En 1.6, de forma predeterminada, el núcleo de Kubernetes no aplica automáticamente ninguna contaminación a los nodos. El programador respeta las taints que se agregan mediante sistemas de implementación como kubeadm, kops, etc. o que los usuarios agregan manualmente (y respeta las tolerancias correspondientes que se agregan a los pods).
En 1.6, de forma predeterminada, el programador de Kubernetes excluye a los nodos de la consideración si informan sobre determinadas condiciones de los nodos, incluida la red no disponible. El código para eso está aquí . No tiene nada que ver con taints, solo está mirando la condición del nodo.
En 1.6 puede habilitar una función alfa que hace que el núcleo de Kubernetes (el NodeController) agregue una contaminación NoExecute siempre que haya NodeReady == "False" o NodeReady == "Desconocido". Esto hará que los pods que se ejecutan en el nodo sean desalojados (si no toleran la contaminación) y evitará que se programen nuevos pods en el nodo (si no toleran la contaminación).
El plan a largo plazo es mover toda la lógica de "cómo reacciona el núcleo Kubernetes a las condiciones del nodo, con respecto a la programación y el desalojo" para usar taints y tolerancias (por ejemplo, # 42001). Pero aún no hemos llegado y no lo estaremos por un tiempo. Por lo tanto, a corto plazo, no hay forma de que un pod "tolere" NetworkUnavailable o cualquier otra condición de nodo que pueda decidir agregar.
Si entiendo bien lo que dijo @davidopp , entonces la función es NodeReady, que ahora devuelve verdadero, falso o desconocido, marca una lista con lo que se necesita. Si pudiera devolver una lista de valores que no se cumplieron, puede probarlo.
En el caso de kubeadm, si entonces NetworkUnavailable, es el único. kubeadm puede devolver verdadero. Eso es en el caso de que no queramos que el complemento networking / cni se pase en el momento de inicio de kubeadm.
Porque si lo entiendo bien, la taint y la tolerancia se establecen en función de esta función, al menos para kubeadm.
Corrígeme si estoy equivocado ;)
Saltando a este hilo porque encontré este problema y es molesto:
¿Por qué la preparación de la red no puede convertirse en una mancha que el kubelet agrega y elimina en función del estado de la red en el nodo?
De esa manera, el nodo puede estar "Listo" para todos los pods que toleran la contaminación de la preparación de la red (aplicaciones de red del pod).
En cuanto a los pods de la red de host, un controlador de admisión podría inyectar tolerancias a la contaminación de la preparación de la red del pod.
Creo que eso se alinea con el plan a largo plazo en el comentario de Davidopp.
Creo que eso se alinea con el plan a largo plazo en el comentario de Davidopp.
Sí exactamente. El plan a largo plazo es tener una mancha para cada condición de nodo y dejar de tener algo interno en Kubernetes que preste atención a las condiciones de nodo. Comenzamos ese trabajo con la característica 1.6 alfa que mencioné.
Ack. ¿Hay alguna razón para no cambiar a taints en la versión del parche v1.6?
El código para agregar taints automáticamente en función de las condiciones del nodo acaba de entrar en alfa en 1.6. No está listo para confiar en él. (Y solo maneja la condición de nodo listo actualmente, no la red).
Entonces, si lo entiendo correctamente, por ahora, dado que https://github.com/kubernetes/features/issues/166 está tardando un poco más en poder contaminar la disponibilidad de la red correctamente, tenemos que solucionarlo. Si podemos presionar una solución lo antes posible para kubeadm, como # 43835, con un comentario para solucionar esto con https://github.com/kubernetes/features/issues/166 , muchas personas estarán felices.
@davidopp Supongo que quisiste decir " no confiado ". Todavía me falta la relación entre la condición automática para manchar la lógica que mencionaste con la de las manchas de publicación de kubelet directamente para problemas de red.
Sí, gracias, fue un error tipográfico, solucionado ahora
Sí, podría hacer que Kubelet agregue la mancha. Puede que no sea ideal que Kubelet agregue las taints para algunas condiciones de nodo y NodeController las agregue para otras condiciones de nodo (esta última es necesaria porque solo el maestro puede detectar el nodo inalcanzable), pero eso es solo un argumento de ingeniería de software, no nada fundamental. Mi plan había sido que NodeController agregara las taints para todas las condiciones del nodo, pero no hay un requisito estricto para hacerlo de esa manera.
Ack. En este caso, una sola condición de nodo tiene varios atributos asociados que el controlador de nodo puede no ser capaz de discernir.
@mikedanese Siento que el comportamiento existente de kubeadm init
resulta en un nodo en funcionamiento es atractivo. Espero que el requisito de agregar una fase validation
no se base principalmente en este problema.
@dcbw @thockin @yujuhong ¿ Alguna idea sobre el uso de taints para representar problemas de configuración de nodos en el kubelet?
Tenga en cuenta que si desea que su nueva mancha reemplace el filtrado automático actual de nodos con NetworkUnavailable, deberá modificar la función que mencioné anteriormente (es decir, eliminarla del conjunto de condiciones que filtran un nodo). No sé qué otros efectos secundarios tendrá, ya que esa función puede usarse en listas de nodos además del programador.
¿Hay alguna forma de instalar 1.5.6 que debería funcionar en Ubuntu? Si lo hay, ¿podría explicar cómo se hace? ¡Gracias!
Tenga en cuenta que si desea que su nueva mancha reemplace el filtrado automático actual de nodos con NetworkUnavailable, deberá modificar la función que mencioné anteriormente (es decir, eliminarla del conjunto de condiciones que filtran un nodo). No sé qué otros efectos secundarios tendrá, ya que esa función puede usarse en listas de nodos además del programador.
@davidopp debemos tener cuidado con NetworkUnavailable frente a NodeReady. Hay dos condiciones separadas que realmente deberían limpiarse:
nodeNetworkUnavailable: esto es específico de las rutas en la nube, y solo los controladores de ruta en la nube borran esta condición cuando se han configurado las rutas en la nube entre los nodos. Los complementos de red que crean superposiciones o que no realizan enrutamiento L3 entre nodos no quieren ni utilizan esta condición. Ningún complemento de red agrega esta condición; kubelet lo agrega específicamente cuando se seleccionan GCE o AWS como proveedores de nube. No afecta a NodeReady ya que es una condición separada.
NodeReady: afectado directamente por los complementos de red (por ejemplo, CNI o kubenet o tiempos de ejecución remotos como dockershim / CRI-O).
Hay tres cuestiones distintas a considerar:
NodeReady es un martillo demasiado grande. Estoy pensando que probablemente queremos una condición adicional NetworkPluginReady para la preparación del complemento de red (¡separada de la preparación de las rutas en la nube!) Y luego tenemos que conectar eso a los lugares que importan :( O, en realidad, nuevas contaminaciones, no condiciones.
Otro trabajo que encontré.
Mientras kubeadm sigue imprimiendo '[apiclient] El primer nodo se ha registrado, pero aún no está listo', implementé 'kube-flannel.yml' que instala flanneld. Y funcionó sin cambiar los archivos de configuración.
1) kubeadm init --pod-network-cidr = 10.244.0.0 / 16 y
2) cp /etc/kubernetes/admin.conf ~ / .kube / config
3) kubectl apply -f kube-flannel-rbac.yml (necesario en kubeadm 1.6)
4) kubectl aplica -f kube-flannel.yaml
Utilice kube-flannel.yaml en https://github.com/coreos/flannel/blob/master/Documentation/kube-flannel.yml
Podría hacer que el nodo maestro esté 'Listo'. Pero, kube-dns falló con el mensaje,
Error syncing pod, skipping: failed to "CreatePodSandbox" for "kube-dns-2759646324-nppx6_kube-system(bd585951-15cb-11e7-95c3-1c98ec12245c)" with CreatePodSandboxError: "CreatePodSandbox for pod \"kube-dns-2759646324-nppx6_kube-system(bd585951-15cb-11e7-95c3-1c98ec12245c)\" failed: rpc error: code = 2 desc = NetworkPlugin cni failed to set up pod \"kube-dns-2759646324-nppx6_kube-system\" network: \"cni0\" already has an IP address different from 10.244.0.1/24"
Después de cambiar el complemento de red a weave-net, funcionó.
@dcbw No sé lo suficiente sobre el problema específico discutido en este número para decirle exactamente qué hacer. Solo quería explicar el estado actual de las corrupciones y cómo podrían aplicarse aquí.
El kubernetes-xenial-unstable
ahora tiene una compilación parcheada 1.6.1-beta.0.5+d8a384c1c5e35d-00
que @pipejakob y yo hemos estado probando hoy. Los nodos no permanecen listos hasta que se crea una red de vainas (por ejemplo, aplicando configuraciones de tejido / franela). Aprobación de la prueba de conformidad. PTAL.
# cat <<EOF >/etc/apt/sources.list.d/kubernetes.list
deb http://apt.kubernetes.io/ kubernetes-xenial-unstable main
EOF
cc @luxas @jbeda
Es la dirección general en la que las taints pueden expresar casi todo
las condiciones pueden, y son, por tanto, mejores en todos los sentidos?
Estoy de acuerdo en que necesitamos una señal más granular. Todavía tenemos que resolver el
interacción entre kubelet, controlador de red, controlador de nube y proveedor de nube
para desbloquear hostNetwork = false pods, pero hostNetwork = true no debería ser
obstruido.
El jueves 30 de marzo de 2017 a las 7:24 p.m., Dan Williams [email protected]
escribió:
Tenga en cuenta que si desea que su nueva mancha reemplace la actual
filtrado de nodos con NetworkUnavailable, deberá modificar el
función que mencioné anteriormente (es decir, elimínela del conjunto de condiciones
que filtran un nodo). No sé qué otros efectos secundarios
tienen, ya que esa función se puede utilizar en listas de nodos que no sean solo los
planificador.@davidopp https://github.com/davidopp tenemos que tener cuidado con
NetworkUnavailable frente a NodeReady. Hay dos condiciones distintas que
realmente debería limpiarse:nodeNetworkUnavailable: esto es específico para las rutas en la nube, y solo en la nube
Los controladores de ruta borran esta condición cuando las rutas en la nube entre nodos tienen
sido configurado. Complementos de red que crean superposiciones o que no hacen L3
el enrutamiento entre nodos no desea ni utiliza esta condición. Esta condición es
no agregado por ningún complemento de red; es agregado por kubelet específicamente cuando
GCE o AWS se seleccionan como proveedores de nube. No afecta a NodeReady desde
es una condición separada.NodeReady: afectado directamente por los complementos de red (p. Ej., CNI o kubenet
o tiempos de ejecución remotos como dockershim / CRI-O).Hay tres cuestiones distintas a considerar:
- Cloud Routes: si la infraestructura de la nube y el complemento de red
requieren rutas en la nube, luego la falta de rutas en la nube (p. ej.,
NodeNetworkUnavailable = true) necesita bloquear la programación hostNetwork = false
vainas- Complementos de red: si el complemento aún no está listo, es necesario
bloquear la programación de hostNetwork = pods falsos- hostNetwork = true pods deben ignorar todas estas condiciones y ser
programado, pero sujeto a cualquier otra condición aplicable (espacio en disco, etc.)NodeReady es un martillo demasiado grande. Estoy pensando que probablemente queremos un
condición adicional NetworkPluginReady para la preparación del complemento de red
(¡aparte de la preparación de las rutas en la nube!) y luego tenemos que sondear eso
a lugares que se preocupan :(-
Recibes esto porque te mencionaron.
Responda a este correo electrónico directamente, véalo en GitHub
https://github.com/kubernetes/kubernetes/issues/43815#issuecomment-290597988 ,
o silenciar el hilo
https://github.com/notifications/unsubscribe-auth/AFVgVGIn0CpVkcHd2SVaoRsp2RJNEgXFks5rrGPqgaJpZM4MtMRe
.
Para cualquiera que todavía intente la solución temporal eliminando la línea de configuración KUBELET_NETWORK_ARGS de kubelet, @ jc1arke encontró una solución alternativa más simple: tener dos sesiones para el nuevo maestro y, mientras espera que el primer nodo esté listo, aplique una configuración de red de nodo en el segundo sesión:
Primera sesión después de ejecutar kubeadmin init:
...
[apiclient] Created API client, waiting for the control plane to become ready
[apiclient] All control plane components are healthy after 24.820861 seconds
[apiclient] Waiting for at least one node to register and become ready
[apiclient] First node has registered, but is not ready yet
[apiclient] First node has registered, but is not ready yet
[apiclient] First node has registered, but is not ready yet
[apiclient] First node has registered, but is not ready yet
[apiclient] First node has registered, but is not ready yet
...
Segunda sesión (usando Calico. Por supuesto, su elección puede variar):
root@kube-test-master-tantk:~# kubectl apply -f http://docs.projectcalico.org/v2.0/getting-started/kubernetes/installation/hosted/kubeadm/calico.yaml
configmap "calico-config" created
daemonset "calico-etcd" created
service "calico-etcd" created
daemonset "calico-node" created
deployment "calico-policy-controller" created
job "configure-calico" created
root@kube-test-master-tantk:~#
Volver a la primera sesión:
...
[apiclient] First node has registered, but is not ready yet
[apiclient] First node has registered, but is not ready yet
[apiclient] First node has registered, but is not ready yet
[apiclient] First node is ready after 118.912515 seconds
[apiclient] Test deployment succeeded
[token] Using token: <to.ken>
[apiconfig] Created RBAC rules
...
Es la dirección general en la que las taints pueden expresar casi todo
las condiciones pueden, y son, por tanto, mejores en todos los sentidos?
Bastante. Probablemente no podamos deshacernos de ninguna de las condiciones del nodo debido a problemas de compatibilidad con versiones anteriores, pero podemos deshacernos de toda la lógica en el maestro que toma medidas basadas en ellos (como bloquear la programación o desalojar pods). Además de hacer que el comportamiento sea más obvio (no es necesario memorizar qué condiciones bloquean la programación, cuáles causan el desalojo, cuánto tiempo esperamos para el desalojo, etc.), la reacción a las condiciones es configurable por grupo.
Acabo de probar las debs de @pipejakob , estas funcionan bien.
Probado en ubuntu / xenial:
root<strong i="9">@kube1</strong>:/home/ubuntu# kubeadm version
kubeadm version: version.Info{Major:"1", Minor:"6+", GitVersion:"v1.6.1-beta.0.5+d8a384c1c5e35d", GitCommit:"d8a384c1c5e35d5118f79808deb7bab41f3f7964", GitTreeState:"clean", BuildDate:"2017-03-31T04:20:36Z", GoVersion:"go1.7.5", Compiler:"gc", Platform:"linux/amd64"}
Acabo de probar las debs de @pipejakob , todavía se congela en
[apiclient] Created API client, waiting for the control plane to become ready
He esperado unos cinco minutos, pero nada ha cambiado.
Y ayer seguía repitiendo
[apiclient] First node has registered, but is not ready yet
TTI cree que el problema sigue sin solución?
Probado en Ubuntu 16.04:
kubeadm version: version.Info {Major: "1", Minor: "6+", GitVersion: "v1.6.1-beta.0.5 + d8a384c1c5e35d", GitCommit: "d8a384c1c5e35d5118f79808deb7bab41f3f7964", GitTree ", GitTree" -03-31T04: 20: 36Z ", GoVersion:" go1.7.5 ", Compilador:" gc ", Plataforma:" linux / amd64 "}
@ myqq0000 ¿puedes publicar la versión que estás usando?
kubeadm version
@coeki Oh, lo olvidé. Acabo de editar y publico la versión en mi comentario anterior. :)
@mikedanese ¿Tiene algún plan para actualizar centos yum repo? ¿O ya está implementado en yum repo?
Acabo de probar 1.6.1-beta.0.5+d8a384c1c5e35d-00
(el 1.6.1-beta.0.5+48c6a53cf4ff7d-00
mencionado en https://github.com/kubernetes/kubernetes/issues/43815#issuecomment-290616036 no parece existir).
Parece que funciona bien.
No relacionado: tenga en cuenta que si está utilizando weave, debe aplicar https://github.com/weaveworks/weave/releases/download/latest_release/weave-daemonset-k8s-1.6.yaml en lugar del https: / /git.io/weave-kube
@mausch ¿Podrías decirme cómo conseguir estas debs?
@ srinat999 https://github.com/kubernetes/kubernetes/issues/43815#issuecomment -290616036
Las debs parcheadas de
root@kube-test0:~# kubeadm version
kubeadm version: version.Info{Major:"1", Minor:"6+", GitVersion:"v1.6.1-beta.0.5+d8a384c1c5e35d", GitCommit:"d8a384c1c5e35d5118f79808deb7bab41f3f7964", GitTreeState:"clean", BuildDate:"2017-03-31T04:20:36Z", GoVersion:"go1.7.5", Compiler:"gc", Platform:"linux/amd64"}
@mausch Gracias. También funcionan para mí con el proveedor de la red de tejido.
¿Alguna posibilidad de construir la misma solución para Centos también? Nuestro sistema de activación utiliza principalmente centos para la base de clústeres de kubernetes. Si tengo la versión centos puedo garantizar aprox. 100 ejecuciones de kubeadm init al día como prueba.
Las debs parcheadas de kubeadm
está notificando que el clúster está listo, pero el nodo en sí no lo está.
Los nodos
kubectl apply -f https://git.io/weave-kube-1.6
En mi entorno de prueba (in vagrant, basado en máquinas centos / 7), kubeadm simplemente se cuelga. Usando strace puedo verlo tratando de conectarse al servidor de kubelet en el maestro, y haciendo FUTEX_WAIT, epoll_wait reintentar bucles. Pero no hay salida de salida de una sola línea que provenga de él.
kubelet no se inicia, lo que parece ser la razón.
(Pero no veo las razones por las que kublet no pudo comenzar ...)
¿Es este el problema de este tema?
Obtengo binarios del repositorio http://yum.kubernetes.io/repos/kubernetes-el7-x86_64 .
También intento actualizar los binarios de https://storage.googleapis.com/kubernetes-release/release/v1.6.0/bin/linux/amd64/ .
==> ¿Dónde puedo obtener una versión parcheada de kubeadm para probar? <==
Nota: Encontré una versión parcheada (reclamada) de kubeadm a la que se hace referencia en este problema en https://github.com/kensimon/aws-quickstart/commit/9ae07f8d9de29c6cbca4624a61e78ab4fe69ebc4 (la versión parcheada es esta: https: // heptio-aws-quickstart- test.s3.amazonaws.com/heptio/kubernetes/ken-test/kubeadm), pero eso no me funciona. El comportamiento sigue siendo el mismo (sin salida alguna) ...
@ squall0gd ¿Puede mostrarnos el mensaje exacto que está viendo? De acuerdo con lo que describe, me pregunto si realmente eligió el nuevo .debs o si estaba usando versiones antiguas almacenadas en caché.
@thockin @davidopp, por lo que según la sugerencia de Tim, me https: // github. com / kubernetes / kubernetes / issues / 43815 # issuecomment -290597988 en él.
Esto es lo que aparentemente funciona para mí con el repositorio unstable
(solo probé el maestro en sí):
"sudo apt-get update && sudo apt-get install -y apt-transport-https",
"echo 'deb http://apt.kubernetes.io/ kubernetes-xenial-unstable main' | sudo tee /etc/apt/sources.list.d/kubernetes.list",
"curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -",
"sudo apt-get update",
"sudo apt-get install -y docker.io",
"sudo apt-get install -y kubelet kubeadm kubectl kubernetes-cni",
"sudo service kubelet stop",
"sudo service kubelet start",
"sudo kubeadm init",
"sudo cp /etc/kubernetes/admin.conf $HOME/",
"sudo chown $(id -u):$(id -g) $HOME/admin.conf",
"export KUBECONFIG=$HOME/admin.conf",
"kubectl taint nodes --all dedicated-",
"kubectl apply -f https://github.com/weaveworks/weave/releases/download/latest_release/weave-daemonset-k8s-1.6.yaml",
Esto arroja error: taint "dedicated:" not found
en un punto, pero parece continuar independientemente.
¿No ejecutamos estas pruebas en la rama 1.6?
Las condiciones del nodo
kubeadm no parece que esté probado en la rama de lanzamiento:
https://k8s-testgrid.appspot.com/release-1.6-all
@ bgrant0607 aparentemente, las pruebas de kubeadm e2e estuvieron deshabilitadas / no funcionaron durante aproximadamente una semana antes de la versión 1.6, IIRC
Las condiciones de los nodos están destinadas a proporcionar información adicional para los humanos, para comprender lo que está sucediendo, como el motivo, el mensaje y el tiempo de transición.
@ bgrant0607 ¿ están destinados principalmente a información humana o es solo un efecto secundario feliz? Si son principalmente para humanos, ¿deberían usarse para programar decisiones como lo son actualmente o deberíamos alejarnos de eso?
@dcbw Taints está destinado a convertirse en el GUT de la falta de programación y la interrupción. Eventualmente, el programador debería ignorar las condiciones.
https://github.com/kubernetes/kubernetes/pull/18263#issuecomment -169220144
https://github.com/kubernetes/kubernetes/issues/29178
Tenga en cuenta que si vamos a agregar una mancha a los nodos, debemos considerar
a) Compatibilidad con versiones anteriores, como con la mancha maestra: https://github.com/kubernetes/kubernetes/pull/43537
b) Versión sesgada. Al actualizar los clústeres a 1.6, los kubelets serán de versiones mixtas y algunos pueden ser tan antiguos como 1.4.
así que para recapitular o mientras analizo esto:
basado en @dcbw
nodeNetworkUnavailable es una cosa del proveedor de la nube, no vinculado a kubeadm atm, podríamos encontrarnos con esto.
Pero NodeReady, que es la causa raíz del bucle, necesita ser más granular. Esto es lo que @davidopp quiere ser una mancha, basado en una lista que está marcando casillas, en lo que respecta a la sonda / vivencia, CNI listo, etc.
bien, aunque se podría discutir, ¿por qué no etiquetar?
Pero @dcbw , ¿encontró un hilo más adecuado para esta discusión? Porque este se convierte en un cubo de problemas con la implementación y no es realmente la raíz de las cosas.
Lo sé, fui parte de no llegar realmente al problema y publicar trucos al respecto :)
Pero de todos modos, deberíamos discutir los fundamentos en otro lugar, asegurarnos de que se coloque aquí un ETA fijo y seguir adelante.
No ser ágil, pero bueno :)
PD: sí @ bgrant0607 , deberíamos haber probado esto más
PS2 Si veo esto mal, puedes culparme;)
@coeki También agregaría una solicitud para que las versiones N-1 se mantengan en
@ kfox1111 La puerta también es un problema ... necesitamos una mejor estrategia al respecto :)
¿Por qué incluso eliminar versiones antiguas? Eso podría romper fácilmente la automatización de las personas y evitar instalaciones repetibles.
Las condiciones de los nodos están destinadas a proporcionar información adicional para los humanos, para comprender lo que está sucediendo, como el motivo, el mensaje y el tiempo de transición.
Acordado. La experiencia de usuario es definitivamente una de las principales razones por las que probablemente no podamos deshacernos de las condiciones de los nodos. Sin embargo, creo que podemos deshacernos de todos los usos de las condiciones del nodo como desencadenante de acciones maestras (como el desalojo y la programación de bloqueo) y usar taints para eso.
A largo plazo (como la API v2 a largo plazo) es concebible que podamos agregar razones y mensajes a las taints y luego deshacernos de las condiciones del nodo, pero realmente no lo he pensado y definitivamente no estoy proponiendo formalmente hacerlo. (Ya tenemos el equivalente al tiempo de transición en una dirección, a saber, TimeAdded).
@coeki no, de lo que estaba hablando no tiene nada que ver con la puerta. Gating no puede encontrar todos los problemas a menos que tenga una puerta que pruebe todo lo que podría hacerse. A los operadores les gusta hacer cosas raras en sus entornos. :) Prohibitivamente caro para probar todas las cosas posibles.
Estoy pidiendo que no se elimine la versión anterior antes de que la nueva haya pasado al menos a través de la primera versión de corrección de errores. Para este ejemplo, 1.6.1. Como mínimo. Mantener más versiones antiguas es aún mejor. Esta es una buena práctica para permitir que los operadores continúen progresando mientras se resuelven los errores en la nueva versión.
@ kfox1111 , eso es lo que hace la compuerta, no ir con algo que parece bueno, y descartar la vieja forma de confianza, lo que sucedió ahora.
@davidopp Estoy de acuerdo en que las etiquetas y taints pueden tener una distinción diferente de una forma de api de verlo, UX y maquinaria, pero bueno, es difuso en este momento. También yo, eso es :)
De todos modos, me atraes a una discusión, realmente no debemos tener en este tema, ese era mi punto.
Me gustaría preguntar de nuevo: si veo "kubeadm init" simplemente colgando sin salida (tratando de conectarme al servidor de kubelet, que no ha podido iniciarse), ¿estoy sufriendo este problema? Y si este es un caso, ¿el # 43835 es una solución para mí?
Ahora, ¿dónde puedo conseguir?
¡Gracias!
(nota: la versión parcheada de kubeadm a la que se hace referencia en la confirmación mencionada anteriormente no funciona para mí ...)
@obnoxxx prueba la punta de la rama release-1.6.
$ gsutil ls gs://kubernetes-release-dev/ci/v1.6.1-beta.0.12+018a96913f57f9
@mikedanese gracias! difícil...
Si ejecuta kubeadm sin instalar el paquete del sistema operativo, debe
$ cat <<EOF > /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
[Service]
Environment="KUBELET_KUBECONFIG_ARGS=--kubeconfig=/etc/kubernetes/kubelet.conf --require-kubeconfig=true"
Environment="KUBELET_SYSTEM_PODS_ARGS=--pod-manifest-path=/etc/kubernetes/manifests --allow-privileged=true"
Environment="KUBELET_NETWORK_ARGS=--network-plugin=cni --cni-conf-dir=/etc/cni/net.d --cni-bin-dir=/opt/cni/bin"
Environment="KUBELET_DNS_ARGS=--cluster-dns=10.96.0.10 --cluster-domain=cluster.local"
Environment="KUBELET_AUTHZ_ARGS=--authorization-mode=Webhook --client-ca-file=/etc/kubernetes/pki/ca.crt"
ExecStart=
ExecStart=/usr/bin/kubelet $KUBELET_KUBECONFIG_ARGS $KUBELET_SYSTEM_PODS_ARGS $KUBELET_NETWORK_ARGS $KUBELET_DNS_ARGS $KUBELET_AUTHZ_ARGS $KUBELET_EXTRA_ARGS
EOF
$ systemctl daemon-reload
$ systemctl restart kubelet
@mikedanese gracias. Estoy instalando el paquete del sistema operativo (desde el repositorio de kube) y luego instalando los binarios de la URL web sobre los binarios de los rpms ...
Sin embargo, la versión 1.6.1-beta.0.12 no me funcionó:
kubeadm init todavía se cuelga sin ninguna salida. (intentando conectarse a kubelet)
No olvide el controlador systemd también si centos.
controlador del sistema?
Dios, gracias, eso es mejor! :-)
@pipejakob No tengo acceso a estos registros en este momento, pero he comprobado la versión de kubeadm y era la misma versión que tiene @webwurst . Además, he comprobado las posibles versiones de kubeadm
con apt-cache policy kubeadm
. Y solo había una entrada, de kubernetes-xenial-unstable.
@mikedanese probé con franela antes de publicar;)
EDITAR: He reconstruido toda la plataforma y kubadm
está funcionando bien: +1:
Chicos, ¿cuál es el status quo para la solución? ¿Se moverá al repositorio estable pronto?
Los debs parcheados de
¿Alguien puede decirme cómo construir una versión parcheada de kubeadm para rhel (rpm)?
@mikedanese con correctamente , pero el mensaje "el complemento de red no está listo: cni config uninitialized" persiste.
El nodo maestro está en NotReady
.
El weave-net
(weaveworks / weave-kube: 1.9.4 - https://github.com/weaveworks/weave/releases/download/latest_release/weave-daemonset-k8s-1.6.yaml) está en 1/2 CrashLoopBackOff
:
FailedSync Error syncing pod, skipping: failed to "StartContainer" for "weave"
El pod kube-dns
está en 0/3 Pending
.
@ChipmunkV Probablemente necesite configurar kube-proxy para que se ejecute en el espacio de usuario. Esto también ha sido un problema en 1.5.
command:
- /usr/local/bin/kube-proxy
- --kubeconfig=/var/lib/kube-proxy/kubeconfig.conf
# add this line:
- --proxy-mode=userspace
Por lo que vale, kubernetes-xenial-unstable
está funcionando bien.
@pstadler , gracias a @errordeveloper en el chat que ha señalado que tengo redes superpuestas, he reconfigurado el IPALLOC_RANGE
en el tejido.
Gracias @thenayr. Podría abrir el maestro de Kubernetes pero también podría conectar un trabajador a él usando kubeadm join. Publicará más actualizaciones pronto
@mikedanese me tomó una eternidad averiguar qué versión usar, hasta que leí todos los comentarios aquí. Realmente necesitamos facilitar la búsqueda de binarios para una versión determinada. Intenté usar los puntos ci-cross/latest.txt
(es decir, v1.7.0-alpha.0.1982+70684584beeb0c
), y eso sucede para introducir la nueva bandera kube-apiserver
(es decir, --proxy-client-key-file
en d8be13fee85075abfc087632b3dbc586a10897ad), que no funciona con ninguna de las etiquetas recientes en gcr.io/google_containers/kube-apiserver-amd64
...
¿Cómo podemos hacer que sea más fácil descubrir qué revisiones tienen binarios en el depósito? Ser capaz de enumerar directorios sería bueno, o tener un archivo de mapa simple o simplemente cualquier cosa que no requiera tener que saber o tener que adivinar.
@errordeveloper , estamos tratando de hacer un lanzamiento para que podamos enviar una solución a la rama estable, debería hacerse en O (días), espero. Hay un enlace en la descripción de este problema a las debs parcheadas en inestable.
La versión anterior 1.5.6 me funcionaba en CentOs 7, pero ahora ni siquiera puedo revertir porque la única versión de kubeadm en http://yum.kubernetes.io/repos/kubernetes-el7-x86_64 es la 1.6 rota. 0. ¿Alguna sugerencia sobre cómo obtener kubeadm 1.5.6 RPM?
De hecho, es una lástima. Las versiones antiguas parecen haber sido eliminadas por completo. :-(
Mis resultados son estos en centos 7:
The connection to the server localhost:8080 was refused - did you specify the right host or port?
¿Alguna pista de lo que está pasando?
@obnoxxx por defecto apiserver no escucha en 8080, escucha en el puerto seguro 6443, puede verificar con netstat -tunlp.
Necesita copiar admin.conf de / etc / kubernetes a su $ HOME / .kube / config
asegúrese de cambiar los permisos en el archivo en su $ HOME / .kube /, después de eso, su kubectl debería poder comunicarse con apiserver correctamente. HTH. Serguei
@apsinha ¿
La parte superior de mi cabeza:
Sin faltarle el respeto a todas las grandes personas que hacen de Kubernetes lo que es. Solo espero que haya algunos "momentos de enseñanza" aquí en el futuro, ya que esto se ve mal en términos de la percepción pública de que Kubernetes es confiable / estable. (Por supuesto, kubeadm es alfa / beta, pero aún tiene mucha visibilidad).
Construí kubeadm-1.5.6 usando kubernetes / release.rpm solo para encontrar (para mi consternación) que
# rpm -Uvh kubectl-1.5.6-0.x86_64.rpm kubeadm-1.5.6-0.x86_64.rpm
error: Failed dependencies:
kubectl >= 1.6.0 is needed by kubeadm-1.5.6-0.x86_64
kubelet >= 1.6.0 is needed by kubeadm-1.5.6-0.x86_64
@bostone necesita ajustar el .spec aquí .
@sbezverk ¡ gracias por la pista! Es mejor ahora...
Esto es curioso:
kubectl -s localhost:6443
antes, pero no fue suficiente.De todos modos, ahora puedo continuar. Gracias de nuevo
v1.6.1 está en proceso de ser lanzado. Lo hará EOD.
Algunas notas:
Todos estos son buenos temas para abordar en un PM. @pipejakob se ha ofrecido gentilmente como voluntario para realizar esa autopsia.
@obnoxxx El requisito de copiar / chown el admin.conf era necesario antes porque con 1.5 teníamos el servidor API exponiendo un puerto inseguro. Cambiamos eso en 1.6. Ahora debe usar credenciales seguras para acceder al servidor API (consulte https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG.md#kubeadm-2)
@mikedanese eso suena genial, ¡gracias!
Solo para el tonto que soy: ¿cuál será el efecto de esta versión 1.6.1 con respecto a este problema?
¿Comenzará kubelet sin el cambio a /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
(solución alternativa de @coeki ) o contendrá la corrección de # 43835 (que no pareció tener ningún efecto para mí)?
@jbeda gracias por la explicación!
@jbeda Creo que la confusión proviene del documento oficial de instalación de kubadm que configura el repositorio de YUM en http://yum.kubernetes.io/repos/kubernetes-el7-x86_64. Ese repositorio solo tiene kubeadm-1.6.0
Y de nuevo, para mi decepción, la construcción de 1.5.6 rpms y la instalación terminó con el mismo problema exacto. Ejecutar kubeadm init
está colgado en la misma línea:
# kubeadm init
Running pre-flight checks
<master/tokens> generated token: "5076be.38581a71134596d0"
<master/pki> generated Certificate Authority key and certificate:
Issuer: CN=kubernetes | Subject: CN=kubernetes | CA: true
Not before: 2017-04-03 21:28:18 +0000 UTC Not After: 2027-04-01 21:28:18 +0000 UTC
Public: /etc/kubernetes/pki/ca-pub.pem
Private: /etc/kubernetes/pki/ca-key.pem
Cert: /etc/kubernetes/pki/ca.pem
<master/pki> generated API Server key and certificate:
Issuer: CN=kubernetes | Subject: CN=kube-apiserver | CA: false
Not before: 2017-04-03 21:28:18 +0000 UTC Not After: 2018-04-03 21:28:18 +0000 UTC
Alternate Names: [10.25.47.21 10.96.0.1 kubernetes kubernetes.default kubernetes.default.svc kubernetes.default.svc.cluster.local]
Public: /etc/kubernetes/pki/apiserver-pub.pem
Private: /etc/kubernetes/pki/apiserver-key.pem
Cert: /etc/kubernetes/pki/apiserver.pem
<master/pki> generated Service Account Signing keys:
Public: /etc/kubernetes/pki/sa-pub.pem
Private: /etc/kubernetes/pki/sa-key.pem
<master/pki> created keys and certificates in "/etc/kubernetes/pki"
<util/kubeconfig> created "/etc/kubernetes/kubelet.conf"
<util/kubeconfig> created "/etc/kubernetes/admin.conf"
<master/apiclient> created API client configuration
<master/apiclient> created API client, waiting for the control plane to become ready
Supongo que solo esperaré el lanzamiento de 1.6.1 y espero ...
1.6.1 está fuera.
@mikedanese , ¿probaste kubeadm antes de cerrar este error? Ahora mismo estoy mirando [apiclient] Created API client, waiting for the control plane to become ready
durante 10 minutos. En CentOS 7 con la nueva instalación 1.6.1
@bostone, es posible que tenga este problema: # 43805
Intente editar /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
y agregar --cgroup-driver=systemd
Recuerde ejecutar systemctl daemon-reload; systemctl restart kubelet
@gtirloni con nuestra sugerencia llegué al final de kubeadm init
sin embargo, cualquier intento de ejecutar kubectl produce este error: The connection to the server localhost:8080 was refused - did you specify the right host or port?
No estoy seguro de dónde y cómo cambiar eso o cuál es el puerto correcto en ¿este punto?
No estoy seguro si esto está relacionado, pero esto es lo que veo cuando ejecuto systemctl status kubelet
:
`` `estado systemctl kubelet -l
● kubelet.service - kubelet: el agente de nodo de Kubernetes
Cargado: cargado (/etc/systemd/system/kubelet.service; habilitado; preajuste del proveedor: deshabilitado)
Drop-In: /etc/systemd/system/kubelet.service.d
└─10-kubeadm.conf
Activo: activo (en ejecución) desde Lun 2017-04-03 17:31:07 PDT; Hace 11min
Documentos: http://kubernetes.io/docs/
PID principal: 10382 (kubelet)
CGroup: /system.slice/kubelet.service
├─10382 / usr / bin / kubelet --kubeconfig = / etc / kubernetes / kubelet.conf --require-kubeconfig = true --pod-manifest-path = / etc / kubernetes / manifests --allow-privileged = true - -network-plugin = cni --cni-conf-dir = / etc / cni / net.d --cni-bin-dir = / opt / cni / bin --cluster-dns = 10.96.0.10 --cluster-domain = cluster.local --authorization-mode = Webhook --client-ca-file = / etc / kubernetes / pki / ca.crt --cgroup-driver = systemd
└─10436 journalctl -k -f
03 de abril 17:41:56 sdl02269 kubelet [10382]: W0403 17: 41: 56.645299 10382 cni.go: 157] No se puede actualizar la configuración de cni: no se encontraron redes en /etc/cni/net.d
03 de abril 17:41:56 sdl02269 kubelet [10382]: E0403 17: 41: 56.645407 10382 kubelet.go: 2067] La red de tiempo de ejecución del contenedor no está lista: NetworkReady = razón falsa mensaje: docker : el complemento de red no está listo: cni config no inicializado
Sí, lo probamos. Las pruebas de e2e están pasando en la rama de lanzamiento. Es posible que tenga otros problemas.
@bostone ¿ tal vez te estás perdiendo estos pasos después de kubeadm init
?
sudo cp /etc/kubernetes/admin.conf $HOME/
sudo chown $(id -u):$(id -g) $HOME/admin.conf
export KUBECONFIG=$HOME/admin.conf
También debe seguir el paso 3 que se describe aquí . Eso parece estar relacionado con el error de configuración cni que está recibiendo.
También mirando al cliente API creado [apiclient], esperando que el plano de control esté listo durante 10 minutos ya con Ubuntu 16.04 y una nueva instalación de 1.6.1
@pingthings Recomiendo unirse a Slack Kubernetes y al canal kubeadm
. Podemos ayudarlo a depurar allí.
Configuré con éxito mi clúster de Kubernetes en centos-release-7-3.1611.el7.centos.x86_64 siguiendo los siguientes pasos (supongo que Docker ya está instalado):
1) (de /etc/yum.repo.d/kubernetes.repo) baseurl = http: //yum.kubernetes.io/repos/kubernetes-el7-x86_64-unstable
=> Para usar el repositorio inestable para la última versión de Kubernetes 1.6.1
2) yum install -y kubelet kubeadm kubectl kubernetes-cni
3) (/etc/systemd/system/kubelet.service.d/10-kubeadm.conf) agregue "--cgroup-driver = systemd" al final de la última línea.
=> Esto se debe a que Docker usa systemd para cgroup-driver mientras que kubelet usa cgroupfs para cgroup-driver.
4) systemctl enable kubelet && systemctl start kubelet
5) kubeadm init --pod-network-cidr 10.244.0.0/16
=> Si solía agregar --api-publicidad-direcciones, necesita usar --apiserver-publicidad-dirección en su lugar.
6) cp /etc/kubernetes/admin.conf $ INICIO /
sudo chown $ (id -u): $ (id -g) $ HOME / admin.conf
exportar KUBECONFIG = $ HOME / admin.conf
=> Sin este paso, es posible que obtenga un error con kubectl get
=> No lo hice con 1.5.2
7) kubectl create -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel-rbac.yml
=> 1.6.0 introduce un control de acceso basado en roles, por lo que debe agregar un ClusterRole y un ClusterRoleBinding antes de crear un daemonset de Flannel
8) kubectl create -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
=> Crear un conjunto de demonios de franela
9) (en cada nodo esclavo) kubeadm join --token (su token) (ip) :( puerto)
=> como se muestra en el resultado de kubeadm init
Todos los pasos anteriores son el resultado de combinar sugerencias de varios problemas relacionados con Kubernetes-1.6.0, especialmente kubeadm.
Espero que esto le ahorre tiempo.
Esto no parece resolverse (Ubuntu LTS, kubeadm 1.6.1).
Primero, también experimenté kubeadm colgando de "Cliente API creado, esperando que el plano de control esté listo" cuando usé la bandera --apiserver-advertise-address
.. Los registros del diario dicen:
let.go:2067] Container runtime network not ready: NetworkReady=false reason:NetworkPluginNotReady message:docker: network plugin is not ready: cni config uninitialized
Apr 04 12:27:04 xxx kubelet[57592]: E0404 12:27:04.352780 57592 eviction_manager.go:214] eviction manager: unexpected err: failed GetNode: node 'xxx' not found
Apr 04 12:27:05 xxx kubelet[57592]: E0404 12:27:05.326799 57592 kubelet_node_status.go:101] Unable to register node "xxx" with API server: Post https://x.x.x.x:6443/api/v1/nodes: dial tcp x.x.x.x:6443: i/o timeout
Apr 04 12:27:06 xxx kubelet[57592]: E0404 12:27:06.745674 57592 reflector.go:190] k8s.io/kubernetes/pkg/kubelet/config/apiserver.go:46: Failed to list *v1.Pod: Get https://x.x.x.x:6443/api/v1/pods?fieldSelector=spec.nodeName%3Dxxx&resourceVersion=0: dial tcp x.x.x.x:6443: i/o timeout
Apr 04 12:27:06 xxx kubelet[57592]: E0404 12:27:06.746759 57592 reflector.go:190] k8s.io/kubernetes/pkg/kubelet/kubelet.go:390: Failed to list *v1.Node: Get https://x.x.x.x:6443/api/v1/nodes?fieldSelector=metadata.name%3Dxxx&resourceVersion=0: dial tcp x.x.x.x:6443: i/o timeout
Apr 04 12:27:06 xxx kubelet[57592]: E0404 12:27:06.747749 57592 reflector.go:190] k8s.io/kubernetes/pkg/kubelet/kubelet.go:382: Failed to list *v1.Service: Get https://x.x.x.x:6443/api/v1/services?resourceVersion=0: dial tcp x.x.x.x:6443: i/o timeou
Si no proporciono esta bandera, kubeadm pasa, pero incluso entonces obtengo el siguiente error para el inicio de kubelet:
Container runtime network not ready: NetworkReady=false reason:NetworkPluginNotReady message:docker: network plugin is not ready: cni config uninitialized
Kubelet se niega a iniciarse correctamente y no puedo conectarme al clúster con kubectl
de ninguna manera
Parece que las versiones 1.5.x de kubeadm se han eliminado no solo del repositorio de centos, sino también de Ubuntu LTS: https://packages.cloud.google.com/apt/dists/kubernetes-xenial/main/binary-amd64/Packages It dificulta la degradación y, de hecho, rompe la compatibilidad con versiones anteriores
@bostone
¿Descubriste el bloqueo de "esperar a que el avión de control esté listo"? Veo lo mismo después de probar todos los cambios con 1.6.1.
@gtirloni @srzjulio agregar estos pasos después de kubeadm init
no ayudó. Hizo que el servicio de kubelet cambiara de failed
a active (running)
pero todavía tengo el mensaje The connection to the server localhost:8080 was refused - did you specify the right host or port?
. Y si miro a los servicios que escuchan, no puedo ver el 8080 en ninguna parte. Lo que puedo ver es que kubelet está escuchando en estos puertos:
kubelet 6397 root 12u IPv6 611842 0t0 TCP *:4194 (LISTEN)
kubelet 6397 root 15u IPv4 611175 0t0 TCP sdl02269.labs.teradata.com:49597->sdl02269.labs.teradata.com:sun-sr-https (ESTABLISHED)
kubelet 6397 root 16u IPv4 611890 0t0 TCP localhost:10248 (LISTEN)
kubelet 6397 root 18u IPv6 611893 0t0 TCP *:10250 (LISTEN)
kubelet 6397 root 19u IPv6 611895 0t0 TCP *:10255 (LISTEN)
Entonces, ¿hay algún ajuste incorrecto (¿cambiado?) Que apunta erróneamente a 8080.
@bostone no es el puerto kubelet que necesita, es kube-apiserver, debería estar escuchando en el puerto 6443.
@sbezverk No modifiqué ningún valor predeterminado en cuanto a puertos (no está en ninguna instrucción) ¿Qué debo hacer para cambiar de 8080 a 6443?
@bostone si no modificó nada en el manifiesto de apiserver, por defecto escuchará en el puerto 6443. Solo necesita copiar /etc/kubernetes/admin.conf en $ HOME / .kube / config, cambiar los permisos en el archivo de configuración y debería estar listo.
@sbezverk Por cierto: estoy ejecutando todos los pasos de instalación como root, pero estas 3 líneas de instrucciones de la salida kubeadm init
sugieren usar el usuario sudo. ¿Cuál es la recomendación al respecto? ¿Debería ejecutar todos los pasos de instalación como sudo también?
Ok, hice todos los pasos desde cero y parece estar mejor. Estos son los pasos que me han funcionado hasta ahora y me estoy ejecutando como root en CentOS 7.
# cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=http://yum.kubernetes.io/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg
https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
EOF
# setenforce 0
# yum install -y docker kubelet kubeadm kubectl kubernetes-cni
# vi /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
Agregue -cgroup-driver=systemd
a 10-kubeadm.conf y ahorre
# systemctl enable docker && systemctl start docker
# systemctl enable kubelet && systemctl start kubelet
# sysctl -w net.bridge.bridge-nf-call-iptables=1
# systemctl stop firewalld; systemctl disable firewalld
# kubeadm init
# cp /etc/kubernetes/admin.conf $HOME/
# chown $(id -u):$(id -g) $HOME/admin.conf
# export KUBECONFIG=$HOME/admin.conf
# kubectl apply -f https://git.io/weave-kube
En este punto, puedo ejecutar kubectl get nodes
y ver mi nodo maestro en la lista.
Repita todos los pasos para minion excepto kubeadm init
y en su lugar ejecute kubeadm join --token a21234.c7abc2f82e2219fd 12.34.567.89:6443
como lo genera kubeadm init
Este paso se completa y puedo ver los nodos maestro y minion (s)
Y ahora, el problema:
# kubectl get nodes
NAME STATUS AGE VERSION
abc02918 NotReady 42m v1.6.1
abc04576 NotReady 29m v1.6.1
# kubectl describe node abc02918
Events:
FirstSeen LastSeen Count From SubObjectPath Type Reason Message
--------- -------- ----- ---- ------------- -------- ------ -------
43m 43m 1 kubelet, sdl02918 Normal Starting Starting kubelet.
43m 43m 1 kubelet, sdl02918 Warning ImageGCFailed unable to find data for container /
43m 43m 29 kubelet, sdl02918 Normal NodeHasSufficientDisk Node sdl02918 status is now: NodeHasSufficientDisk
43m 43m 29 kubelet, sdl02918 Normal NodeHasSufficientMemory Node sdl02918 status is now: NodeHasSufficientMemory
43m 43m 29 kubelet, sdl02918 Normal NodeHasNoDiskPressure Node sdl02918 status is now: NodeHasNoDiskPressure
42m 42m 1 kube-proxy, sdl02918 Normal Starting Starting kube-proxy.
Entonces parece que los nodos nunca están listos. ¿Alguna sugerencia?
Me imagino que su tejido no se está desplegando correctamente porque está utilizando el
archivo yaml anterior a 1.6.
Prueba "kubectl apply -f https://git.io/weave-kube-1.6 "
El martes 4 de abril de 2017 a las 12:24 p.m., Bo Stone [email protected] escribió:
Ok, hice todos los pasos desde cero y parece estar mejor. Aquí están
los pasos que me han funcionado hasta ahora y me estoy ejecutando como root.gato <
[kubernetes]
nombre = Kubernetes
baseurl = http://yum.kubernetes.io/repos/kubernetes-el7-x86_64
habilitado = 1
gpgcheck = 1
repo_gpgcheck = 1
gpgkey = https://packages.cloud.google.com/yum/doc/yum-key.gpg http://yum.kubernetes.io/repos/kubernetes-el7-x86_64enabled=1gpgcheck=1repo_gpgcheck=1gpgkey=https:/ /packages.cloud.google.com/yum/doc/yum-key.gpg
https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
EOFsetenforce 0
yum install -y docker kubelet kubeadm kubectl kubernetes-cni
vi /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
Agregue -cgroup-driver = systemd a 10-kubeadm.conf y guarde
systemctl enable docker && systemctl start docker
systemctl enable kubelet && systemctl start kubelet
sysctl -w net.bridge.bridge-nf-call-iptables = 1
systemctl detener firewalld; systemctl deshabilitar firewalld
kubeadm init
cp /etc/kubernetes/admin.conf $ INICIO /
chown $ (id -u): $ (id -g) $ HOME / admin.conf
exportar KUBECONFIG = $ HOME / admin.conf
kubectl aplicar -f https://git.io/weave-kube
En este punto puedo ejecutar kubectl get nodos y ver mi nodo maestro en el
lista.
Repita todos los pasos para minion excepto, por supuesto, ejecutando kubeadm join
--token a21234.c7abc2f82e2219fd 12.34.567.89:6443 generado por kubeadm
en eso
Este paso se completa y puedo ver los nodos maestro y minion (s)Y ahora, el problema:
kubectl obtener nodos
NOMBRE ESTADO EDAD VERSIÓN
abc02918 NotReady 42m v1.6.1
abc04576 NotReady 29m v1.6.1kubectl describe el nodo abc02918
Eventos:
Mensaje de motivo de tipo de ruta de subobjetos del recuento de lo último visto
--------- -------- ----- ---- ------------- -------- --- --- -------
43m 43m 1 kubelet, sdl02918 Arranque normal Arranque kubelet.
43m 43m 1 kubelet, sdl02918 Imagen de advertencia GCFailed no se pueden encontrar datos para el contenedor /
43m 43m 29 kubelet, sdl02918 Normal NodeHasSufficientDisk El estado del nodo sdl02918 es ahora: NodeHasSufficientDisk
43m 43m 29 kubelet, sdl02918 Normal NodeHasSufficientMemory El estado del nodo sdl02918 es ahora: NodeHasSufficientMemory
43m 43m 29 kubelet, sdl02918 Normal NodeHasNoDiskPressure El estado sdl02918 es ahora: NodeHasNoDiskPressure
42m 42m 1 kube-proxy, sdl02918 Inicio normal Iniciando kube-proxy.Entonces parece que los nodos nunca están listos. ¿Alguna sugerencia?
-
Estás recibiendo esto porque estás suscrito a este hilo.
Responda a este correo electrónico directamente, véalo en GitHub
https://github.com/kubernetes/kubernetes/issues/43815#issuecomment-291571437 ,
o silenciar el hilo
https://github.com/notifications/unsubscribe-auth/AAeJQ6OFBV3s6OHmfOkUdwqQsJ1sjg23ks5rsnzMgaJpZM4MtMRe
.
Usando CentOS y la versión 1.6.1-1 de kubeadm, y siguiendo los pasos anteriores, obtengo un comportamiento ligeramente diferente: se informa que el clúster está listo, pero luego me quedo atascado en este mensaje:
[apiclient] Temporarily unable to list nodes (will retry)
En los registros, sin embargo, todavía tenemos el mismo error:
Apr 04 13:30:30 csc-q-docker-1.colinx.com kubelet[108575]: E0404 13:30:30.491150 108575 pod_workers.go:182] Error syncing pod 2193220cb6f65d66c0d8762189232e64 ("kube-apiserver-csc-q-docker-1.colinx.com_kube-system(2193220cb6f65d66c0d8762189232e64)"), skipping: failed to "StartContainer" for "kube-apiserver" with CrashLoopBackOff: "Back-off 20s restarting failed container=kube-apiserver pod=kube-apiserver-csc-q-docker-1.colinx.com_kube-system(2193220cb6f65d66c0d8762189232e64)"
Apr 04 13:30:30 csc-q-docker-1.colinx.com kubelet[108575]: W0404 13:30:30.524051 108575 cni.go:157] Unable to update cni config: No networks found in /etc/cni/net.d
Apr 04 13:30:30 csc-q-docker-1.colinx.com kubelet[108575]: E0404 13:30:30.524243 108575 kubelet.go:2067] Container runtime network not ready: NetworkReady=false reason:NetworkPluginNotReady message:docker: network plugin is not ready: cni config uninitialized
@sjenning ¡ Eso es! ¡Todavía necesito implementar algunas imágenes para ver si todo funciona, pero puedo ver todos los nodos con el estado Ready
! Gracias a todos, chicos (por ahora :)
@bostone Seguí la misma receta que
@dcowden Es lo que elija yum en mi sistema Docker version 1.12.6, build 96d83a5/1.12.6
. Además, lo que me ayudó fue reaprovisionar todas las máquinas virtuales que estaba usando en lugar de intentar solucionar mis instalaciones anteriores
@bostone gracias. Cambiaré a esa versión para ver si puedo obtener una configuración que funcione. en mi sistema, la última es una extraña versión 17.03.1.ce (evidentemente la última mejor)
No estoy seguro de si es útil en general, pero tengo un libro de jugadas ansible que
hace todos los pasos para CentOS 7
https://github.com/sjenning/kubeadm-playbook
YMMV, pero al menos documenta el proceso. También hago algunas cosas como
cambie la ventana acoplable para usar el registro de archivos json y el almacenamiento de superposición.
Podría ser útil como referencia incluso si en realidad no ejecuta el libro de jugadas.
El martes 4 de abril de 2017 a las 12:55 p.m., Dave Cowden [email protected]
escribió:
@bostone https://github.com/bostone gracias. bajaré a eso
versión para ver si puedo obtener una configuración que funcione. en mi sistema, el último es un
extraña versión 17.03.1.ce (evidentemente la última mejor)-
Recibes esto porque te mencionaron.
Responda a este correo electrónico directamente, véalo en GitHub
https://github.com/kubernetes/kubernetes/issues/43815#issuecomment-291580822 ,
o silenciar el hilo
https://github.com/notifications/unsubscribe-auth/AAeJQ7CUA4vxhF3T7nMc9wRu47rbWe-Kks5rsoQmgaJpZM4MtMRe
.
@sjenning ¡Gracias! eso es muy útil!
Ok, aquí hay una complicación. después de ejecutar kubeadm reset
en master y minion y reiniciar los servicios de docker y kubelet kubeadm init
cuelga en Created API client, waiting for the control plane to become ready
una vez más. ¿Alguien puede proporcionar los pasos completos para restablecer kubeadm?
@sjenning, ¿ ha intentado volver a ejecutar su libro de jugadas después de ejecutarlo inicialmente?
@bostone en mi caso mover /var/lib/etcd/
hizo el truco.
@autostatic el directorio estaba vacío y cambiarle el nombre no ayudó. @sjenning, tu libro de jugadas se cuelga, creé un boleto para ti
¿Alguien ha intentado ejecutar el panel en v1.6.1? Recibo un error que indica lo siguiente:
Prohibido (403)
El usuario " system: serviceaccount : kube- system: default " no puede enumerar los espacios de nombres en el ámbito del clúster. (obtener espacios de nombres)
'
Supongo que necesito configurar más RBAC, como tienes que hacerlo para ejecutar Flannel.
@srzjulio ¿Puede presentar una nueva emisión por eso? Supongo que es algo en lo que SIG Auth y el equipo de Dashboard deberían trabajar juntos. Probablemente sea un cambio YAML simple.
@srzjulio , necesita actualizar las reglas de RBAC, las usamos para ponernos en marcha:
apiVersion: rbac.authorization.k8s.io/v1alpha1
tipo: ClusterRoleBinding
metadatos:
nombre: cluster-admin
roleRef:
apiGroup: rbac.authorization.k8s.io
tipo: ClusterRole
nombre: cluster-admin
asignaturas:
Tenga cuidado: el enlace que tiene @sbezverk es esencialmente desactivar RBAC. Tendrás un clúster súper inseguro si haces eso.
kind: Group
name: system:unauthenticated
Esto es particularmente malo. Significa que cualquier persona que pueda ponerse en contacto con su servidor API, incluso sin ninguna credencial, puede ejecutar comandos arbitrarios.
@jbeda coincide con el comportamiento que teníamos con 1.5.6
En realidad, hacer un sistema: un administrador de clúster
Si no desea autorización, use el autorizador AlwaysAllow
Si desea permitir todo mientras audita, use una combinación de RBAC, AlwaysAllow
Eso deshabilitará las solicitudes anónimas, registrará las denegaciones de RBAC en el registro del servidor API, pero continuará permitiendo que todas las solicitudes autenticadas hagan lo que quieran
Lo siento, y lo repito de nuevo, esto no tiene nada que ver con el problema original. Y aunque los problemas y cuestiones son válidos, deberíamos trasladar la conversación a otra parte.
Nuevamente, lo siento, presione enter demasiado pronto, pero tal como están las cosas:
1 - la versión 1.6.0 causa problemas
2 - no están todos arreglados
3 - mudarse a RBAC (bueno en mi opinión) pero es un problema, ¿por qué? ver punto 4
4 - Esto no se comunicó muy bien y no hay muchos documentos / blogs o lo que sea para explicarlo.
5 - Me inclino ante todas las personas que intentan salvar, pero necesitamos una mejor manera de hacer esto
https://kubernetes.io/docs/admin/authorization/rbac/#service -account-permissions es una buena guía para conocer las opciones más detalladas que tiene para abrir permisos.
agregar " --cgroup-driver = systemd " en kublet causa un nuevo problema en Centos / RHEL 7.3 (completamente actualizado, también conocido como docker 1.10.3):
Apr 12 14:23:25 machine01 kubelet[3026]: W0412 14:23:25.542322 3026 docker_service.go:196] No cgroup driver is set in Docker
Apr 12 14:23:25 machine01 kubelet[3026]: W0412 14:23:25.542343 3026 docker_service.go:197] Falling back to use the default driver: "cgroupfs"
Apr 12 14:23:25 machine01 kubelet[3026]: error: failed to run Kubelet: failed to create kubelet: misconfiguration: kubelet cgroup driver: "systemd" is different from docker cgroup driver: "cgroupfs"
mientras que podemos ver claramente que native.cgroupdriver = systemd está configurado en el demonio de la
ps -ef|grep -i docker
root 4365 1 3 14:30 ? 00:00:33 /usr/bin/docker-current daemon --authorization-plugin=rhel-push-plugin --exec-opt native.cgroupdriver=systemd --selinux-enabled --log-driver=journald --insecure-registry 172.30.0.0/16 --storage-driver devicemapper --storage-opt dm.fs=xfs --storage-opt dm.thinpooldev=/dev/mapper/vg.docker--pool --storage-opt dm.use_deferred_removal=true --storage-opt dm.use_deferred_deletion=true
@ReSearchITEng ¿por qué no actualiza la ventana acoplable a 1.12.6? Funciona a las mil maravillas con esta versión.
@sbezverk : ¡Acabo de actualizar a 1.12.5 y ahora está funcionando! ¡Muchas gracias!
Gracias a todos por la ayuda.
Finalmente trabajando completamente k8s 1.6.1 con franela. Todo está ahora en libros de jugadas ansible.
Probado en Centos / RHEL. También se iniciaron los preparativos para Debian (por ejemplo, Ubuntu), pero es posible que sea necesario perfeccionarlo.
https://github.com/ReSearchITEng/kubeadm-playbook/blob/master/README.md
PD: trabajo basado en sjenning / kubeadm-playbook - ¡Muchas gracias @sjenning !
@sjenning @ReSearchITEng
Hola, tengo un libro de jugadas vagabundo + ansible [0] muy similar al que ha creado, pero todavía no puedo hacerlo funcionar, aunque para mí está fallando en la configuración de la red. Lo he probado con percal, tejido y franela, y los tres fallan (aunque con diferentes síntomas).
Estoy ejecutando estas versiones:
[ vagrant @ master ~] $ docker --version
Docker versión 1.12.6, compilación 3a094bd / 1.12.6
[ vagrant @ master ~] $ kubelet --versión
Kubernetes v1.6.1
[ vagrant @ master ~] $ kubeadm versión
kubeadm version: version.Info {Major: "1", Minor: "6", GitVersion: "v1.6.1", GitCommit: "b0b7a323cc5a4a2019b2e9520c21c7830b7f708e", GitTreeState: "clean", BuildDate: "2017-04-03T20 27Z ", GoVersion:" go1.7.5 ", Compilador:" gc ", Plataforma:" linux / amd64 "}
errores:
[vagrant<strong i="19">@master</strong> ~]$ kubectl get all --all-namespaces
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system po/calico-etcd-gvrhd 1/1 Running 0 47m
kube-system po/calico-node-7jvs8 1/2 CrashLoopBackOff 12 45m
kube-system po/calico-node-7ljpn 2/2 Running 0 47m
kube-system po/calico-node-w15z3 1/2 CrashLoopBackOff 12 45m
kube-system po/calico-node-zq3zx 1/2 CrashLoopBackOff 12 45m
kube-system po/calico-policy-controller-1777954159-13x01 1/1 Running 0 47m
kube-system po/etcd-master 1/1 Running 0 46m
kube-system po/kube-apiserver-master 1/1 Running 0 46m
kube-system po/kube-controller-manager-master 1/1 Running 0 46m
kube-system po/kube-dns-3913472980-16m01 3/3 Running 0 47m
kube-system po/kube-proxy-70bmf 1/1 Running 0 45m
kube-system po/kube-proxy-9642h 1/1 Running 0 45m
kube-system po/kube-proxy-jhtvm 1/1 Running 0 45m
kube-system po/kube-proxy-nb7q5 1/1 Running 0 47m
kube-system po/kube-scheduler-master 1/1 Running 0 46m
NAMESPACE NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE
default svc/kubernetes 10.96.0.1 <none> 443/TCP 47m
kube-system svc/calico-etcd 10.96.232.136 <none> 6666/TCP 47m
kube-system svc/kube-dns 10.96.0.10 <none> 53/UDP,53/TCP 47m
NAMESPACE NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
kube-system deploy/calico-policy-controller 1 1 1 1 47m
kube-system deploy/kube-dns 1 1 1 1 47m
NAMESPACE NAME DESIRED CURRENT READY AGE
kube-system rs/calico-policy-controller-1777954159 1 1 1 47m
kube-system rs/kube-dns-3913472980 1 1 1 47m
[vagrant<strong i="5">@master</strong> ~]$ kubectl -n kube-system describe po/calico-node-zq3zx
Name: calico-node-zq3zx
Namespace: kube-system
Node: node1/192.168.10.101
Start Time: Wed, 26 Apr 2017 19:37:35 +0000
Labels: k8s-app=calico-node
pod-template-generation=1
Annotations: kubernetes.io/created-by={"kind":"SerializedReference","apiVersion":"v1","reference":{"kind":"DaemonSet","namespace":"kube-system","name":"calico-node","uid":"844cd287-2ab7-11e7-b184-5254008815b6","ap...
scheduler.alpha.kubernetes.io/critical-pod=
Status: Running
IP: 192.168.10.101
Controllers: DaemonSet/calico-node
Containers:
calico-node:
Container ID: docker://ca00b0a73a073a2d2e39cb0cc315b8366eaa20e2e479002dd16134b0d1e94f0b
Image: quay.io/calico/node:v1.1.3
Image ID: docker-pullable://quay.io/calico/node<strong i="6">@sha256</strong>:8e62eee18612a6ac7bcae90afaba0ed95265baba7bf3c0ab632b7b40ddfaf603
Port:
State: Waiting
Reason: CrashLoopBackOff
Last State: Terminated
Reason: Error
Exit Code: 1
Started: Mon, 01 Jan 0001 00:00:00 +0000
Finished: Wed, 26 Apr 2017 20:21:09 +0000
Ready: False
Restart Count: 12
Requests:
cpu: 250m
Environment:
ETCD_ENDPOINTS: <set to the key 'etcd_endpoints' of config map 'calico-config'> Optional: false
CALICO_NETWORKING_BACKEND: <set to the key 'calico_backend' of config map 'calico-config'> Optional: false
CALICO_DISABLE_FILE_LOGGING: true
FELIX_DEFAULTENDPOINTTOHOSTACTION: ACCEPT
CALICO_IPV4POOL_CIDR: 192.168.0.0/16
CALICO_IPV4POOL_IPIP: always
FELIX_IPV6SUPPORT: false
FELIX_LOGSEVERITYSCREEN: info
IP:
Mounts:
/lib/modules from lib-modules (ro)
/var/run/calico from var-run-calico (rw)
/var/run/secrets/kubernetes.io/serviceaccount from calico-cni-plugin-token-5wnmg (ro)
install-cni:
Container ID: docker://442c3adfa908f76654bb54070ef5ff638e4b68e0331ea0555ae877ce583ce858
Image: quay.io/calico/cni:v1.7.0
Image ID: docker-pullable://quay.io/calico/cni<strong i="7">@sha256</strong>:3612ffb0bff609d65311b45f4bae57fa80a05d25e1580ceb83ba4162e2ceef9f
Port:
Command:
/install-cni.sh
State: Running
Started: Wed, 26 Apr 2017 19:38:29 +0000
Ready: True
Restart Count: 0
Environment:
ETCD_ENDPOINTS: <set to the key 'etcd_endpoints' of config map 'calico-config'> Optional: false
CNI_NETWORK_CONFIG: <set to the key 'cni_network_config' of config map 'calico-config'> Optional: false
Mounts:
/host/etc/cni/net.d from cni-net-dir (rw)
/host/opt/cni/bin from cni-bin-dir (rw)
/var/run/secrets/kubernetes.io/serviceaccount from calico-cni-plugin-token-5wnmg (ro)
Conditions:
Type Status
Initialized True
Ready False
PodScheduled True
Volumes:
lib-modules:
Type: HostPath (bare host directory volume)
Path: /lib/modules
var-run-calico:
Type: HostPath (bare host directory volume)
Path: /var/run/calico
cni-bin-dir:
Type: HostPath (bare host directory volume)
Path: /opt/cni/bin
cni-net-dir:
Type: HostPath (bare host directory volume)
Path: /etc/cni/net.d
calico-cni-plugin-token-5wnmg:
Type: Secret (a volume populated by a Secret)
SecretName: calico-cni-plugin-token-5wnmg
Optional: false
QoS Class: Burstable
Node-Selectors: <none>
Tolerations: CriticalAddonsOnly=:Exists
node-role.kubernetes.io/master=:NoSchedule
node.alpha.kubernetes.io/notReady=:Exists:NoExecute for 300s
node.alpha.kubernetes.io/unreachable=:Exists:NoExecute for 300s
Events:
FirstSeen LastSeen Count From SubObjectPath Type Reason Message
--------- -------- ----- ---- ------------- -------- ------ -------
46m 46m 1 kubelet, node1 spec.containers{calico-node} Normal Pulling pulling image "quay.io/calico/node:v1.1.3"
45m 45m 1 kubelet, node1 spec.containers{calico-node} Normal Pulled Successfully pulled image "quay.io/calico/node:v1.1.3"
45m 45m 1 kubelet, node1 spec.containers{calico-node} Normal Created Created container with id e035a82202b2c8490e879cb9647773158ff05def6c60b31a001e23e6d288a977
45m 45m 1 kubelet, node1 spec.containers{calico-node} Normal Started Started container with id e035a82202b2c8490e879cb9647773158ff05def6c60b31a001e23e6d288a977
45m 45m 1 kubelet, node1 spec.containers{install-cni} Normal Pulling pulling image "quay.io/calico/cni:v1.7.0"
45m 45m 1 kubelet, node1 spec.containers{install-cni} Normal Pulled Successfully pulled image "quay.io/calico/cni:v1.7.0"
45m 45m 1 kubelet, node1 spec.containers{install-cni} Normal Created Created container with id 442c3adfa908f76654bb54070ef5ff638e4b68e0331ea0555ae877ce583ce858
45m 45m 1 kubelet, node1 spec.containers{install-cni} Normal Started Started container with id 442c3adfa908f76654bb54070ef5ff638e4b68e0331ea0555ae877ce583ce858
44m 44m 1 kubelet, node1 spec.containers{calico-node} Normal Created Created container with id 163a9073070aa52ce7ee98c798ffe130a581e4fdbbc503540ed5d3b79651c549
44m 44m 1 kubelet, node1 spec.containers{calico-node} Normal Started Started container with id 163a9073070aa52ce7ee98c798ffe130a581e4fdbbc503540ed5d3b79651c549
44m 44m 1 kubelet, node1 Warning FailedSync Error syncing pod, skipping: failed to "StartContainer" for "calico-node" with CrashLoopBackOff: "Back-off 10s restarting failed container=calico-node pod=calico-node-zq3zx_kube-system(c983e5d0-2ab7-11e7-b184-5254008815b6)"
44m 44m 1 kubelet, node1 spec.containers{calico-node} Normal Started Started container with id 07453d944dfb9a4ebae57c83158e4b51f8870bcab94b4f706239f6c0b93bb62d
44m 44m 1 kubelet, node1 spec.containers{calico-node} Normal Created Created container with id 07453d944dfb9a4ebae57c83158e4b51f8870bcab94b4f706239f6c0b93bb62d
43m 43m 2 kubelet, node1 Warning FailedSync Error syncing pod, skipping: failed to "StartContainer" for "calico-node" with CrashLoopBackOff: "Back-off 20s restarting failed container=calico-node pod=calico-node-zq3zx_kube-system(c983e5d0-2ab7-11e7-b184-5254008815b6)"
43m 43m 1 kubelet, node1 spec.containers{calico-node} Normal Started Started container with id 00f363848c16ff66743d54b87948133a87a97bfd32fbde2338622904d0990601
43m 43m 1 kubelet, node1 spec.containers{calico-node} Normal Created Created container with id 00f363848c16ff66743d54b87948133a87a97bfd32fbde2338622904d0990601
42m 42m 3 kubelet, node1 Warning FailedSync Error syncing pod, skipping: failed to "StartContainer" for "calico-node" with CrashLoopBackOff: "Back-off 40s restarting failed container=calico-node pod=calico-node-zq3zx_kube-system(c983e5d0-2ab7-11e7-b184-5254008815b6)"
41m 41m 1 kubelet, node1 spec.containers{calico-node} Normal Created Created container with id a5aad1f1a57a361fafcaa2ee6aba244bf19925f56c5b46771cfd45e5e7fd884e
41m 41m 1 kubelet, node1 spec.containers{calico-node} Normal Started Started container with id a5aad1f1a57a361fafcaa2ee6aba244bf19925f56c5b46771cfd45e5e7fd884e
41m 40m 6 kubelet, node1 Warning FailedSync Error syncing pod, skipping: failed to "StartContainer" for "calico-node" with CrashLoopBackOff: "Back-off 1m20s restarting failed container=calico-node pod=calico-node-zq3zx_kube-system(c983e5d0-2ab7-11e7-b184-5254008815b6)"
40m 40m 1 kubelet, node1 spec.containers{calico-node} Normal Created Created container with id 520ee97fe986fd726a0347cab6de5b2a8fba91f73df2d601e8b7625531ed2117
40m 40m 1 kubelet, node1 spec.containers{calico-node} Normal Started Started container with id 520ee97fe986fd726a0347cab6de5b2a8fba91f73df2d601e8b7625531ed2117
39m 36m 12 kubelet, node1 Warning FailedSync Error syncing pod, skipping: failed to "StartContainer" for "calico-node" with CrashLoopBackOff: "Back-off 2m40s restarting failed container=calico-node pod=calico-node-zq3zx_kube-system(c983e5d0-2ab7-11e7-b184-5254008815b6)"
36m 36m 1 kubelet, node1 spec.containers{calico-node} Normal Created Created container with id 90be4da6fd2e8c111c3e2a91256d60656db80316c1497c29c4155b8f009f241f
36m 36m 1 kubelet, node1 spec.containers{calico-node} Normal Started Started container with id 90be4da6fd2e8c111c3e2a91256d60656db80316c1497c29c4155b8f009f241f
31m 31m 1 kubelet, node1 spec.containers{calico-node} Normal Created Created container with id bf0d93f45d5ffa2d2c42487851f80048757da5c767491f673bfecfa37fe76e48
31m 31m 1 kubelet, node1 spec.containers{calico-node} Normal Started Started container with id bf0d93f45d5ffa2d2c42487851f80048757da5c767491f673bfecfa37fe76e48
44m 3m 12 kubelet, node1 spec.containers{calico-node} Normal Pulled Container image "quay.io/calico/node:v1.1.3" already present on machine
25m 3m 5 kubelet, node1 spec.containers{calico-node} Normal Started (events with common reason combined)
25m 3m 5 kubelet, node1 spec.containers{calico-node} Normal Created (events with common reason combined)
36m 15s 149 kubelet, node1 Warning FailedSync Error syncing pod, skipping: failed to "StartContainer" for "calico-node" with CrashLoopBackOff: "Back-off 5m0s restarting failed container=calico-node pod=calico-node-zq3zx_kube-system(c983e5d0-2ab7-11e7-b184-5254008815b6)"
44m 15s 173 kubelet, node1 spec.containers{calico-node} Warning BackOff Back-off restarting failed container
Esto parece información clave, pero no estoy seguro de cómo solucionarlo:
[vagrant<strong i="6">@master</strong> ~]$ kubectl -n kube-system logs calico-node-zq3zx calico-node
Skipping datastore connection test
time="2017-04-26T20:20:39Z" level=info msg="NODENAME environment not specified - check HOSTNAME"
time="2017-04-26T20:20:39Z" level=info msg="Loading config from environment"
ERROR: Unable to access datastore to query node configuration
Terminating
time="2017-04-26T20:21:09Z" level=info msg="Unhandled error: client: etcd cluster is unavailable or misconfigured; error #0: client: endpoint http://10.96.232.136:6666 exceeded header timeout
"
time="2017-04-26T20:21:09Z" level=info msg="Unable to query node configuration" Name=node1 error="client: etcd cluster is unavailable or misconfigured; error #0: client: endpoint http://10.96.232.136:6666 exceeded header timeout
"
Calico node failed to start
Cualquier ayuda será muy apreciada ...
[0] - https://github.com/thiagodasilva/kubernetes-swift/tree/master/roles
No pude identificar qué está mal en tu extremo.
Le sugiero que intente crear una instalación separada usando los libros de jugadas aquí: https://github.com/ReSearchITEng/kubeadm-playbook e intente ver cuál es la diferencia.
PD: mis últimas pruebas son con 1.6.2, tanto kube * como imágenes y parece estar bien.
@kelseyhightower
@ReSearchITEng lo siento, olvidé informar, pero finalmente lo hice funcionar, mis archivos vagrant + ansible están aquí: https://github.com/thiagodasilva/kubernetes-swift
También tuve el mismo problema, pero simplemente copié la configuración cni en el nodo maestro a la ubicación correspondiente del nodo trabajador, luego se volvió correcto.
● kubelet.service - kubelet: el agente de nodo de Kubernetes
Cargado: cargado (/etc/systemd/system/kubelet.service; habilitado; preajuste del proveedor: deshabilitado)
Drop-In: /etc/systemd/system/kubelet.service.d
└─10-kubeadm.conf
Activo: activo (en ejecución) desde Tue 2017-06-06 10:42:00 CST; Hace 18min
Documentos: http://kubernetes.io/docs/
PID principal: 4414 (kubelet)
Memoria: 43,0 M
CGroup: /system.slice/kubelet.service
├─4414 / usr / bin / kubelet --kubeconfig = / etc / kubernetes / kubelet.conf --require-kubeconfig = true --pod-manifest-path = / etc / kubernetes / manifests --network-plugin = cni - -cni-conf-dir = / etc / cni / net.d --cni-bin-dir = / opt / cni / bin --cluster-dns = 10.96.0.10 --cluster-domain = cluster.local --authorizatio -ca-file = / etc / kubernetes / pki / ca.crt --cgroup-driver = cgroupfs
└─4493 journalctl -k -f
06 de junio 10:59:46 contiv1.com kubelet [4414]: W0606 10: 59: 46.215827 4414 cni.go: 157] No se puede actualizar la configuración de cni: no se encontraron redes en /etc/cni/net.d
06 de junio 10:59:46 contiv1.com kubelet [4414]: E0606 10: 59: 46.215972 4414 kubelet.go: 2067] La red en tiempo de ejecución del contenedor no está lista: NetworkReady = mensaje falso listo
06 de junio 10:59:51 contiv1.com kubelet [4414]: W0606 10: 59: 51.216843 4414 cni.go: 157] No se puede actualizar la configuración de cni: no se encontraron redes en /etc/cni/net.d
06 de junio 10:59:51 contiv1.com kubelet [4414]: E0606 10: 59: 51.216942 4414 kubelet.go: 2067] La red en tiempo de ejecución del contenedor no está lista: NetworkReady = mensaje falso listo
06 de junio 10:59:56 contiv1.com kubelet [4414]: W0606 10: 59: 56.217923 4414 cni.go: 157] No se puede actualizar la configuración de cni: no se encontraron redes en /etc/cni/net.d
06 de junio 10:59:56 contiv1.com kubelet [4414]: E0606 10: 59: 56.218113 4414 kubelet.go: 2067] La red en tiempo de ejecución del contenedor no está lista: NetworkReady = mensaje falso listo
06 de junio 11:00:01 contiv1.com kubelet [4414]: W0606 11: 00: 01.219251 4414 cni.go: 157] No se puede actualizar la configuración de cni: no se encontraron redes en /etc/cni/net.d
06 de junio 11:00:01 contiv1.com kubelet [4414]: E0606 11: 00: 01.219382 4414 kubelet.go: 2067] La red de tiempo de ejecución del contenedor no está lista: NetworkReady = mensaje falso listo
06 de junio 11:00:06 contiv1.com kubelet [4414]: W0606 11: 00: 06.220396 4414 cni.go: 157] No se puede actualizar la configuración de cni: no se encontraron redes en /etc/cni/net.d
06 de junio 11:00:06 contiv1.com kubelet [4414]: E0606 11: 00: 06.220575 4414 kubelet.go: 2067] La red en tiempo de ejecución del contenedor no está lista: NetworkReady = mensaje falso listo
El estado de todos los nodos:
[ root @ swarm net.d] # kubectl obtener nodo
NOMBRE ESTADO EDAD VERSIÓN
contiv1.com Listo 1h v1.6.4
contiv2.com Listo 1h v1.6.4
swarm.com Listo 1h v1.6.4
¿Alguna resolución sobre esto? No pude hacer esto incluso después de probar todas las resoluciones mencionadas.
Como soy nuevo en la configuración de Kubernetes, me siento superconfundido. Intenté seguir https://medium.com/@SystemMining/setup -kubenetes-cluster-on-ubuntu-16-04-with-kubeadm-336f4061d929 que usa weave-kube para la red, pero también estoy atascado con el mismo problema . ¿Alguna forma de resolver esto?
Ready False Mon, 12 Jun 2017 16:55:16 +0200 Mon, 12 Jun 2017 12:22:45 +0200 KubeletNotReady runtime network not ready: NetworkReady=false reason:NetworkPluginNotReady message:docker: network plugin is not ready: cni config uninitialized
¿Por qué sigue siendo un problema? Ubuntu 16.04 / CentOS 7.3 con las últimas actualizaciones utilizando los repositorios oficiales de k8s con 1.6.4 y siguiendo los pasos que se describen aquí: https://kubernetes.io/docs/setup/independent/install-kubeadm/
Jun 13 09:57:21 tme-lnx1-centos kubelet: W0613 09:57:21.871413 10321 cni.go:157] Unable to update cni config: No networks found in /etc/cni/net.d
Jun 13 09:57:21 tme-lnx1-centos kubelet: E0613 09:57:21.871788 10321 kubelet.go:2067] Container runtime network not ready: NetworkReady=false reason:NetworkPluginNotReady message:docker: network plugin is not ready: cni config uninitialized
@drajen No, esto afectó solo a la v1.6.0_ . Se espera que kubelet no encuentre una red ya que no ha instalado ninguna. Por ejemplo, solo ejecuta
kubectl apply -f https://git.io/weave-kube-1.6
para instalar Weave Net y esos problemas desaparecerán. Puede optar por instalar Flannel, Calico, Canal o cualquier red CNI si lo desea
@luxas Sigo viendo referencias a esto, pero ¿cómo se supone que debo aplicar algo a un clúster que no se está ejecutando? No tengo nada con lo que conectarme.
@drajen Creo que el punto de @luxas es que este es el lugar equivocado para preguntar sobre la configuración.
Las diversas guías de configuración lo llevarán más allá de este punto: el paso típico que falta en las guías anteriores, que luxas menciona amablemente, en el sentido de que debe aplicar una configuración de red antes de que todo comience a funcionar correctamente.
Sí, puede que no sea obvio y lo sentimos, pero tampoco podemos tener un solo nombre de proveedor allí.
Charlé con @drajen en Slack y el problema estaba relacionado con cgroup, el kubelet no era saludable y no podía crear ningún Pod, de ahí el problema.
Gracias a @luxas por luchar contra mi problema particular hasta el suelo: https://github.com/kubernetes/kubeadm/issues/302
Aún presionando esto en Arch en 1.7, ¿hay una solución rápida en alguna parte?
Editar:
kubectl apply -f https://git.io/weave-kube-1.6
hizo el truco, parece que solo necesitábamos CNI funcionando
Al menos para CentOS / RHEL, asegúrese de actualizar /etc/systemd/system/kubelet.service.d/10-kubeadm.conf y agregue la bandera --cgroup-driver = "systemd"
Si vuelve a instalar en la misma máquina, este es un restablecimiento completo y adecuado:
https://github.com/ReSearchITEng/kubeadm-playbook/blob/master/reset.yml
(esto es necesario especialmente si usa flanneld)
Si desea hacer todo en uno, es posible que desee utilizar todo el proyecto: https://github.com/ReSearchITEng/kubeadm-playbook/
Encontré este problema, y absolutamente nada de lo que leí arriba funcionó. Así que lo intenté de nuevo con una configuración mucho más controlada, cambiando de Ubuntu al último CoreOS, yendo a una versión anterior de k8s para empezar y, en general, siendo muy anal con todo lo que se instaló en cada VM. NO estoy usando kubeadm, sino una combinación de vagabundo y ansible.
(¿Por qué? Porque no tenía idea de lo que estaba pasando en kubeadm y pensé de esta manera que al menos tendría el control y sería capaz de eludir cualquier verificación previa al vuelo demasiado entusiasta, sin mencionar la sensación de que tenía más control de automatización en general, y también no tener que preocuparse por la advertencia de no aplicar software alfa en producción).
Cuando probé esta configuración con una edición anterior (1.4.3) de k8s, este enfoque fue excelente. Luego intenté actualizar a 1.71. Una vez más, TODAVÍA tengo el mismo problema a pesar de no usar kubeadm en absoluto.
He confirmado que estoy ejecutando calicó en cada uno de mis nodos, incluido el Maestro y los tres Trabajadores potenciales. TODOS mis nodos se informan como NotReady, por lo que no estoy realmente seguro de cómo podría aplicar el tejido (o cualquier otra cosa) para que funcione.
Todo esto parece una gallina / huevo ... no se puede asignar un pod porque la red está fallando, pero es necesario que se esté ejecutando una red para crear una red en /etc/cni/net.d para poder asignar los pods. Y nuevamente, todo esto funcionaba hace unas horas con k8s 1.4.3. ¡Estoy muy frustrado!
Agradecería cualquier información que alguien pudiera dar.
Notas a pie de página:
En el maestro: journalctl -r -u kubelet me da
24 de julio 00:48:16 rogue-kube-master-01 kubelet-wrapper [7647]: E0724 00: 48: 16.592274 7647 kubelet.go: 2136] La red de tiempo de ejecución del contenedor no está lista: NetworkReady = razón falsa mensaje: docker : el complemento de red no es
24 de julio 00:48:16 rogue-kube-master-01 kubelet-wrapper [7647]: W0724 00: 48: 16.590588 7647 cni.go: 189] No se puede actualizar la configuración de cni: no se encontraron redes en / etc / cni / net .D
docker ps | grep calicó
(truncado para facilitar la lectura)
cde ... quay.io/calico/ leader-elector @ sha256 : ... "/run.sh --election = c" Hace 8 horas Hasta 8 horas
f72 ... calico / kube-policy-controller @ sha256 : ... "/ dist / controller" hace 8 horas Hasta 8 horas
c47 ... gcr.io/google_containers/pause-amd64:3.0 "/ pause" Hace 8 horas Hasta 8 horas
No hay /etc/cni/net.d
Desde mi caja de kubectl:
kubectl obtener nodos
10.0.0.111 NotReady, SchedulingDisabled 8h v1.7.1 + coreos.0
10.0.0.121 NotReady 8h v1.7.1 + coreos.0
10.0.0.122 NotReady 8h v1.7.1 + coreos.0
10.0.0.123 NotReady 8h v1.7.1 + coreos.0
kubectl aplicar -f https://git.io/weave-kube-1.6
NO arregló nada y, de hecho, solo parece crear más problemas.
bill @ rogue : ~ / vagrant_rogue / rogue-cluster $ kubectl apply -f https://git.io/weave-kube-1.6
cuenta de servicio "weave-net" creada
clusterrolebinding "weave-net" creado
Se creó el daemonset "weave-net"
Error del servidor (Prohibido): clusterroles.rbac.authorization.k8s.io "weave-net" está prohibido: intento de otorgar privilegios adicionales: [PolicyRule {Resources: ["pods"], APIGroups: [""], Verbos: ["get"]} PolicyRule {Recursos: ["pods"], APIGroups: [""], Verbos: ["list"]} PolicyRule {Recursos: ["pods"], APIGroups: [""], Verbos: ["watch"]} PolicyRule {Recursos: ["espacios de nombres"], APIGroups: [""], Verbos: ["get"]} PolicyRule {Recursos: ["espacios de nombres"], APIGroups: [""], Verbos: ["list"]} PolicyRule {Recursos: ["espacios de nombres"], APIGroups: [""], Verbos: ["watch"]} PolicyRule {Recursos: ["nodos"], APIGroups: [""], Verbos: ["get"]} PolicyRule {Recursos: ["nodos"], APIGroups: [""], Verbos: ["lista"]} PolicyRule {Recursos: ["nodos"], APIGroups: [""], Verbos: ["watch"]} PolicyRule {Recursos: ["networkpolicies"], APIGroups: ["extensions"], Verbos: ["get"]} PolicyRule {Recursos: ["networkpolicies"], APIGroups: ["extensions"], Verbos: ["list"]} PolicyRule {Recursos: ["networkpolicies"], APIGroups: ["extensions"], Verbos: ["watch"]}] user = & {kube-admin [system: a uthenticated] map []} ownerrules = [] ruleResolutionErrors = []
bill @ rogue : ~ / vagrant_rogue / rogue-cluster $ kubectl obtener pods --namespace = kube-system
NOMBRE ESTADO LISTO REINICIE EDAD
kube-apiserver-10.0.0.111 1/1 En ejecución 1 8h
kube-controller-manager-10.0.0.111 1/1 En ejecución 1 8h
kube-dns-v20-fcl01 0/3 Pendiente 0 8h
kube-proxy-10.0.0.111 1/1 En ejecución 1 8 h
kube-proxy-10.0.0.121 1/1 En ejecución 1 8 h
kube-proxy-10.0.0.122 1/1 En ejecución 1 8 h
kube-proxy-10.0.0.123 1/1 En ejecución 1 8 h
kube-planificador-10.0.0.111 1/1 En ejecución 1 8h
kubernetes-dashboard-v1.4.1-29zzk 0/1 Pendiente 0 8h
weave-net-2lplj 1/2 CrashLoopBackOff 3 3m
weave-net-2nbgd 1/2 CrashLoopBackOff 3 3m
weave-net-fdr1v 2/2 Corriendo 0 3m
weave-net-jzv50 1/2 CrashLoopBackOff 3 3m
Una investigación más profunda de los errores de tejido indica que o (a) no se pueden conectar al apiserver, o bien (b) en el caso del que está marcado como "En ejecución" se queja de que no se puede conectar a sí mismo.
@billmilligan Al tener problemas similares, el dns deja de funcionar pocos minutos después de que se inicia el contenedor
@Paxa @billmilligan Si desea obtener ayuda, no comente sobre este tema. En su lugar, abra nuevos en el repositorio de kubeadm con suficientes detalles solicitados.
@luxas Respetuosamente, tengo que preguntarme si este es un tema nuevo. Como obtengo exactamente el mismo resultado configurando k8s sin kubeadm que todos los demás obtienen con kubeadm, esto parece eliminar a kubeadm como la fuente del problema. ¿Quizás este tema debería cambiarse de nombre en consecuencia?
@billmilligan respetuosamente, dado que el problema es sobre kubeadm, y puedes reproducirlo sin kubeadm, ¿entonces es el lugar equivocado para archivarlo? Creo que este hilo resolvió el problema de kubeadm. Este es un tema nuevo. Creo que recibirá más atención como un tema nuevo. Como las personas en este hilo piensan que ya está resuelto y lo están ignorando.
Utilizo kubeadm y este problema lo afectó, y se ha resuelto desde 1.6.1. He implementado pérdidas de k8 desde entonces, así que realmente creo que tienes un problema aparte.
@ kfox1111 Gracias por los comentarios. Presentaré un nuevo problema, pero la cantidad de personas que todavía parecen enfrentarlo en otro lugar en 1.7.x todavía me hace preguntarme.
El mensaje de error
runtime network not ready: NetworkReady=false reason:NetworkPluginNotReady message:docker: network plugin is not ready: cni config uninitialized
NO es necesariamente malo.
Ese mensaje de error le dice que debe instalar un proveedor de implementación de especificaciones CNI de terceros .
CNI significa Container Network Interface y define una especificación que usa kubelet para crear una red para el clúster. Consulte esta página para obtener más información sobre cómo Kubernetes usa la especificación CNI para crear una red para el clúster.
A Kubernetes no le importa cómo se crea la red siempre que cumpla con la especificación CNI.
kubelet
está a cargo de conectar nuevos Pods a la red (puede ser una red superpuesta, por ejemplo).
kubelet
lee un directorio de configuración (a menudo /etc/cni/net.d
) para que lo utilicen las redes CNI.
Cuando se crea un nuevo Pod, el kubelet lee los archivos en el directorio de configuración, exec
sale al binario CNI especificado en el archivo de configuración (el binario suele estar en /opt/cni/bin
). El binario que se ejecutará pertenece y es instalado por un tercero (como Weave, Flannel, Calico, etc.).
kubeadm
es una herramienta genérica para activar los clústeres de Kubernetes y no sabe qué solución de red desea y no favorece a nadie en específico. Después de que se ejecuta kubeadm init
, no existe tal binario ni configuración CNI . Esto significa que kubeadm init
NO ES SUFICIENTE para poner en funcionamiento un clúster en pleno funcionamiento.
Esto significa que después de kubeadm init
, los registros de kubelet dirán
runtime network not ready: NetworkReady=false reason:NetworkPluginNotReady message:docker: network plugin is not ready: cni config uninitialized
esto es muy esperado. Si este no fuera el caso, hubiéramos favorecido a un proveedor de red específico.
Entonces, ¿cómo "soluciono" este error?
El siguiente paso de la guía de introducción de kubeadm es "Instalar una red de Pod".
Esto significa, kubectl apply
un manifiesto de su proveedor de red CNI preferido.
El DaemonSet copiará los binarios CNI necesarios en /opt/cni/bin
y la configuración necesaria en /etc/cni/net.d/
. También ejecutará el demonio real que configura la red entre los nodos (escribiendo reglas de iptables, por ejemplo).
Una vez instalado el proveedor de CNI, el kubelet notará que "oh, tengo información sobre cómo configurar la red", y utilizará la configuración de terceros y los binarios.
Y cuando la red es configurada por un proveedor externo (invocándolo por kubelet), el nodo se marcará a sí mismo Ready
.
Al final del ciclo v1.6, se fusionó un PR que cambió la forma en que kubelet informó el estado Ready/NotReady
. En versiones anteriores, kubelet
siempre había informado el estado de Ready
, independientemente de si la red CNI estaba configurada o no. En realidad, esto estaba un poco mal y se cambió para respetar el estado de la red CNI. Es decir, NotReady
cuando CNI no se inicializó y Ready
cuando se inicializó.
kubeadm en v1.6.0 esperó incorrectamente a que el nodo maestro estuviera en el estado Ready
antes de continuar con el resto de las tareas kubeadm init
. Cuando el comportamiento de kubelet cambió para informar NotReady
cuando CNI no se inicializó, kubeadm esperaría una eternidad a que el nodo obtuviera Ready
.
ESE ESPERA MAL CONCEPCIÓN EN EL LADO KUBEADM ES DE LO QUE SE TRATA ESTE PROBLEMA
Sin embargo, arreglamos rápidamente la regresión en v1.6.1 y la lanzamos algunos días después de v1.6.0.
Lea la retrospectiva para obtener más información sobre esto y por qué la v1.6.0 podría lanzarse con este defecto.
Bueno, realmente creo que no. Este problema se trata de cuándo kubeadm init
se interbloquea.
Ningún usuario o mantenedor ha visto eso en v1.6.1 +.
Sin embargo, lo que VERÁS es
runtime network not ready: NetworkReady=false reason:NetworkPluginNotReady message:docker: network plugin is not ready: cni config uninitialized
después de cada kubeadm init
en todas las versiones anteriores a la v1.6, pero eso NO ES MALO
@billmilligan Así que solo tienes que kubectl apply
el manifiesto de un proveedor de CNI para que tu clúster esté en funcionamiento, creo
Estoy resumiendo prácticamente lo que se ha dicho anteriormente, pero espero que de una manera más clara y detallada.
Si tiene preguntas sobre cómo funciona CNI, consulte los canales de soporte normales como StackOverflow, un problema o Slack.
(Por último, lo siento por ese texto en negrita, pero sentí que era necesario para llamar la atención de la gente).
Comentario más útil
Estoy intentando instalar kubernetes con kubeadm en Ubuntu 16.04. ¿Existe un arreglo rápido para esto?