/freundliches Feature
@kubernetes/sig-cli
Was ist passiert :
Ich habe festgestellt, dass es nicht so einfach ist, neue Maschinen hinzuzufügen, wenn Sie keine ursprüngliche Joun-String-Ausgabe von kubeadm haben. "Gibt es eine Möglichkeit, den gesamten Join-Befehl zu generieren? Ich habe das Gefühl, dass ich den gesamten Cluster zurücksetzen muss, um die magische Zeichenfolge " @alexellis
Was Sie erwartet haben, zu passieren :
Ebenso können Sie in Docker Swarm dem Master jederzeit sagen, dass er einen kopier- und einfügbaren Join-String drucken soll, um ihn hinzuzufügen.. oder zu assimilieren? mehr Maschinen.
Beispieleingabe:
kubeadm token string
Beispielausgabe:
kubeadm join --token TOK MASTER_IP:6443 --discovery-token-ca-cert-hash sha256:HASH
Müssen wir noch etwas wissen? :
Du bist toll!
(Nachverfolgung von: https://github.com/kubernetes/kubernetes/pull/41663)
@luxas @mattmoyer @jamiehannaford
+1 für so etwas.
Einige Riffs zu dieser Idee:
kubeadm ca-cert-hash
Befehl (Name TBD), der nur den aktuellen CA-Hash ausgibt. Dies wäre im Grunde dasselbe wie der Befehl openssl
wir in den kubeadm join
Dokumenten angeben .Fügen Sie ein --print-join-command
Flag für kubeadm token create
, das den gesamten Join-Befehl genau wie kubeadm init
ausgibt. Dies würde die Automatisierung hoffentlich vereinfachen, indem während der Bereitstellung etwas wie kubeadm token create --print-join-command >> worker_init.sh
.
Ein neuer Befehl kubeadm token get <token id>
, der das vollständige Token mit der ID abruft, mit einem --print-join-command
Flag, um optional den vollständigen Join-Befehl statt nur des Tokens zu drucken.
Danke, dass du mich darin markiert hast. Machen Sie sich eine Notiz von der UX von Docker Swarm - Sie können jederzeit docker swarm join-token worker
und einen Befehl zum Einfügen in einen Worker oder zum Senden über SSH erhalten. Mit Kubeadm ist es so schwer, den Cluster buchstäblich abzureißen, um einen neuen Knoten hinzuzufügen - ich bin ziemlich sicher mit CLIs, also bin ich sicher, dass ich nicht der einzige bin.
Außerdem ist die Init-Ausgabe so umfangreich, dass Sie nicht wirklich nur den Join-Befehl abrufen und irgendwo verstecken können ... derzeit greife ich auf kubeadm init ... | grep 'kubeadm join --token' > /some_file
.
Wäre cool, einen leisen Modus zu haben, in dem das einzige Ding auf stdout der Join-Befehl ist.
Wie auch immer, was ist der Weg, um diesen ca-cert-hash jetzt zu bekommen? Natürlich ist die Ausgabe von kubeadm init
zu diesem Zeitpunkt schon lange nicht mehr vorhanden ... und ich habe sie nicht gespeichert, weil ich erwartet hatte, dass diese Informationen später bei Bedarf leicht extrahiert werden können.
Ich habe es geschafft, ein Join-Token mit kubeadm token list
und einem anderen Knoten mit kubeadm join --token
beigetreten zu sein, aber es sagt:
[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.
Wie übergebe ich diesen Parameter, bevor es zu einem Fehler kommt? Danke für jede Hilfe!
@zcalusic der aktuelle Weg ist, den Hash mit OpenSSL wie folgt zu berechnen (auf dem Master ausführen oder wo immer Sie eine Kopie von /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/^.* //'
Danke @mattmoyer für den Hinweis. Dein Oneliner hat perfekt funktioniert.
Natürlich muss ich zustimmen, dass --print-join-command
eine viel bessere Benutzererfahrung bieten würde.
Stimme --print-join-command
Wir haben im SIG-Meeting festgestellt, dass wir sowohl mit https://github.com/kubernetes/kubernetes/pull/55468 _und_ dieser Funktion fortfahren werden.
In welcher Form genau werden wir gleich sehen
Dies wurde beim Zoom-Call vom 21. November 2017 diskutiert; Minuten für diesen Anruf finden Sie unter https://docs.google.com/document/d/1deJYPIF4LmhGjDVaqrswErIrV7mtwJgovtLnPCDxP7U/edit#
Ich habe mir das gestern erst kurz angeschaut, aber noch nicht daran gearbeitet :)
Fügen Sie ein --print-join-command-Flag für kubeadm token create hinzu, das den gesamten Join-Befehl genau wie kubeadm init ausgibt. Dies würde es hoffentlich leicht machen, herumzuautomatisieren, indem während der Bereitstellung etwas wie kubeadm token create --print-join-command >> worker_init.sh ausgeführt wird.
Wenn wir diesen bevorzugen, denke ich, dass Bootstrap token create bereits dieselbe Logik enthält. Das können wir hier gebrauchen.
Ein neuer Befehl kubeadm token get
die das vollständige Token mit der ID erhält, mit einem --print-join-command-Flag, um optional den vollständigen Join-Befehl statt nur des Tokens zu drucken.
Ich persönlich bevorzuge dieses. Aber anscheinend brauchen beide Ideen mehr Kontext bei der Implementierung, zB brauchen wir MasterConfiguration, um die Adresse des Apiserver-Werbung zu erhalten. Derzeit verfügen die token create
nicht über die Konfiguration.
UPDATE: Vielleicht können wir beide Ideen umsetzen? @luxas @mattmoyer
Ich habe nur die erste Idee in https://github.com/kubernetes/kubernetes/pull/56185 umgesetzt. Ich bin auch nicht dagegen, die Idee von kubeadm get
umzusetzen, aber wir haben wenig Zeit.
Anstatt ein neues kubeadm get
erstellen, sollten wir IMO den Hash/die kubeadm-Join-Anweisung am Ende des bereits vorhandenen kubeadm token list
ausgeben.
Ich denke, kubeadm token list --print-join-command
wäre toll!
Ich mag diese Idee @luxas. Ich denke, wir könnten es weniger ausführlich machen, ich finde, ich tippe sehr lange Flags kubeadm
Vergleich zur docker
CLI.
kubeadm token list --verbose
kubeadm token list --tokens
kubeadm token list --join-token
kubeadm token list --verbose|-v
funktioniert bei mir auch
Hey, ist das fertig?
Wie kann ich das Token erhalten, um neuen Knoten in meinem Cluster beizutreten?
@tzurE es ist zusammengeführt, aber noch nicht veröffentlicht, es wird Teil von Kubernetes 1.9 sein, das Ende dieser Woche veröffentlicht werden soll .
Mit der neuen Funktionalität können Sie diesen Befehl ausführen, um Knoten beizutreten:
# 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
Nett, danke.
gibt es zwischenzeitlich eine lösung? Eine Möglichkeit, es zu extrahieren, ohne die regulären Befehle zu verwenden?
@tzurE siehe diesen Kommentar: https://github.com/kubernetes/kubeadm/issues/519#issuecomment -343192126
Hallo @mattmoyer
Der Befehl "kubeadm token create --print-join-command" funktioniert in 1.9 hervorragend. Aber ich erhalte den NotReady-Status auf meinem Knoten. Ich verwende Ubuntu 16.04 mit k8s 1.9.0. Irgendwelche Vorschläge?
@siddharthjoshi745 Stellen Sie ein Pod-Netzwerk wie Weave Net
Bitte kommentiere jedoch keine alten Probleme, sondern öffne stattdessen ein neues, wenn du etwas falsch gefunden hast, oder bitte um Hilfe auf Slack
Ich wünsche ihnen einen wunderbaren Tag!
Wie können wir nur einen Wert ausgeben? Sagen Sie das Token oder das Discovery-Token sha usw..
Hilfreichster Kommentar
@zcalusic der aktuelle Weg ist, den Hash mit OpenSSL wie folgt zu berechnen (auf dem Master ausführen oder wo immer Sie eine Kopie von
/etc/kubernetes/pki/ca.crt
):