/ tipo de característica
@ kubernetes / sig-cli
Que paso :
He descubierto que si no es tan fácil agregar nuevas máquinas, si no tiene la salida original de la cadena joun de kubeadm. "¿Hay alguna manera de generar el comando de combinación completo? Siento que tengo que restablecer todo el clúster para poder" alcanzar "la cadena mágica " (c) @alexellis
Qué esperabas que sucediera :
Del mismo modo, en Docker Swarm, siempre puede decirle al maestro que imprima una cadena de unión que se pueda copiar y pegar para agregar ... ¿o asimilar? más máquinas.
Entrada de ejemplo:
kubeadm token string
Salida de ejemplo:
kubeadm join --token TOK MASTER_IP:6443 --discovery-token-ca-cert-hash sha256:HASH
¿Algo más que necesitemos saber? :
¡Usted es maravilloso!
(Seguimiento de: https://github.com/kubernetes/kubernetes/pull/41663)
@luxas @mattmoyer @jamiehannaford
+1 en algo como esto.
Algunos riffs sobre esta idea:
kubeadm ca-cert-hash
(nombre TBD) que simplemente imprime el hash de CA actual. Básicamente, esto sería lo mismo que el comando openssl
que damos en los documentos kubeadm join
.Agregue una bandera --print-join-command
para kubeadm token create
que imprima el comando de unión completo tal como lo hace kubeadm init
. Con suerte, esto facilitaría la automatización ejecutando algo como kubeadm token create --print-join-command >> worker_init.sh
durante el aprovisionamiento.
Un nuevo comando kubeadm token get <token id>
que obtiene el token completo dado el ID, con una bandera --print-join-command
para imprimir opcionalmente el comando de unión completo en lugar de solo el token.
Gracias por etiquetarme en esto. Tome una nota de la UX de Docker Swarm: en cualquier momento puede escribir docker swarm join-token worker
y tener un comando para pegar en un trabajador o enviar por SSH. Con Kubeadm es tan difícil que literalmente derribo el clúster para agregar un nuevo nodo; tengo bastante confianza con las CLI, así que estoy seguro de que no soy el único.
Además, la salida de inicio es tan pesada que realmente no puede obtener solo el comando de unión y guardarlo en algún lugar ... actualmente estoy recurriendo a kubeadm init ... | grep 'kubeadm join --token' > /some_file
.
Sería genial tener un modo silencioso donde lo único en stdout es el comando de unión.
De todos modos, ¿cuál es la forma de obtener ese ca-cert-hash ahora mismo? Por supuesto, la salida de kubeadm init
desapareció hace mucho tiempo en este punto ... y no la guardé esperando que fuera fácil extraer esa información más tarde, a pedido.
Me las arreglé para unirme al token con kubeadm token list
y me uní a otro nodo con kubeadm join --token
, pero dice:
[validation] WARNING: using token-based discovery without DiscoveryTokenCACertHashes can be unsafe (see https://kubernetes.io/docs/admin/kubeadm/#kubeadm-join).
[validation] WARNING: Pass --discovery-token-unsafe-skip-ca-verification to disable this warning. This warning will become an error in Kubernetes 1.9.
Entonces, antes de que se convierta en un error, ¿cómo paso ese parámetro? ¡Gracias por cualquier ayuda!
@zcalusic, la forma actual es calcular el hash con OpenSSL de esta manera (ejecutar en el maestro o donde tenga una copia de /etc/kubernetes/pki/ca.crt
):
openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'
Gracias @mattmoyer por la pista. Tu delineador funcionó a la perfección.
Por supuesto, debo estar de acuerdo en que --print-join-command
sería una experiencia de usuario mucho mejor.
De acuerdo con --print-join-command
Concluimos en la reunión del SIG que procederemos con https://github.com/kubernetes/kubernetes/pull/55468 _y_ esta función adicional.
Veremos en qué forma exactamente en un momento
Esto se discutió en la llamada de zoom del 21 de noviembre de 2017; los minutos de esa llamada están en https://docs.google.com/document/d/1deJYPIF4LmhGjDVaqrswErIrV7mtwJgovtLnPCDxP7U/edit#
Ayer le eché un vistazo rápido, pero todavía no he trabajado en él :)
Agregue un indicador --print-join-command para kubeadm token create que imprima el comando de unión completo tal como lo hace kubeadm init. Con suerte, esto facilitaría la automatización ejecutando algo como kubeadm token create --print-join-command >> worker_init.sh durante el aprovisionamiento.
Si preferimos este, creo que ya existe la misma lógica en la creación de tokens de arranque . Podemos usar eso aquí.
Un nuevo comando kubeadm token get
que obtiene el token completo dado el ID, con una marca --print-join-command para imprimir opcionalmente el comando de combinación completo en lugar de solo el token.
Yo prefiero este personalmente. Pero parece que ambas ideas necesitan más contexto cuando se implementan, por ejemplo, necesitamos MasterConfiguration para obtener una dirección de publicidad de servidor. Actualmente, token create
no tiene la configuración.
ACTUALIZACIÓN: ¿tal vez podamos implementar ambas ideas? @luxas @mattmoyer
Implementé solo la primera idea en https://github.com/kubernetes/kubernetes/pull/56185. No me opongo a implementar la idea kubeadm get
también, pero tenemos poco tiempo.
En lugar de crear un nuevo kubeadm get
, IMO deberíamos imprimir el hash / la declaración de unión kubeadm al final del kubeadm token list
ya existente.
¡Creo que kubeadm token list --print-join-command
sería genial!
Me gusta esa idea @luxas. Creo que podríamos hacerlo menos detallado, encuentro que estoy escribiendo indicadores muy largos kubeadm
comparación con el docker
CLI.
kubeadm token list --verbose
kubeadm token list --tokens
kubeadm token list --join-token
kubeadm token list --verbose|-v
me funciona
Oye, ¿esto está hecho?
¿Cómo puedo hacer que el token se una a nuevos nodos en mi clúster?
@tzurE se fusionó pero aún no se lanzó, será parte de Kubernetes 1.9, que se lanzará a finales de esta semana .
La nueva funcionalidad le permite ejecutar este comando para unir nodos:
# on a master node (or any node with admin access to your cluster)
$ kubeadm token create --print-join-command
kubeadm join --token 447067.20b55955bd6abe6c 192.168.99.100:8443 --discovery-token-ca-cert-hash sha256:17023a5c90b996e50c514e63e161e46f78be216fd48c0c3df3be67e008b28889
# on the new node (copy-pasted from the output above)
$ kubeadm join --token 447067.20b55955bd6abe6c 192.168.99.100:8443 --discovery-token-ca-cert-hash sha256:17023a5c90b996e50c514e63e161e46f78be216fd48c0c3df3be67e008b28889
bien gracias.
¿Hay alguna solución mientras tanto? ¿Una forma de extraerlo sin usar los comandos habituales?
@tzurE ver este comentario: https://github.com/kubernetes/kubeadm/issues/519#issuecomment -343192126
Hola @mattmoyer
El comando "kubeadm token create --print-join-command" funciona muy bien en 1.9. Pero obtengo el estado NotReady en mi nodo. Estoy usando ubuntu 16.04 con k8s 1.9.0. ¿Alguna sugerencia?
@ siddharthjoshi745 Implemente una red Pod como Weave Net (como se puede ver en nuestros documentos).
Sin embargo, no comentes sobre problemas antiguos, abre uno nuevo si encuentras algo mal o pide ayuda en Slack.
¡Qué tengas un lindo día!
¿Cómo podemos generar un solo valor? Diga la ficha o la ficha de descubrimiento sha, etc.
Comentario más útil
@zcalusic, la forma actual es calcular el hash con OpenSSL de esta manera (ejecutar en el maestro o donde tenga una copia de
/etc/kubernetes/pki/ca.crt
):