Wie kann ich einen container läuft auf Kubernetes?
Ich bin jetzt versuchen, führen Sie eine einfache Behälter mit shell (/bin/bash), die auf einem Kubernetes cluster.
Ich dachte, es war ein Weg, um einen container auf einem Docker container mit pseudo-tty
und trennen Sie die option (-td
option auf docker run
Befehl).
Beispielsweise
$ sudo docker run -td ubuntu:latest
Ist es eine option, wie dies in Kubernetes?
Ich habe versucht, läuft ein container mit einem kubectl run-container
Befehl wie:
kubectl run-container test_container ubuntu:latest --replicas=1
Aber der container verlässt für ein paar Sekunden (genau wie die Einleitung mit der docker run
Befehl ohne Optionen, die ich oben erwähnt habe). Und ReplicationController startet es wieder von vorne.
Gibt es einen Weg, um einen container läuft auf Kubernetes wie die -td
Optionen in den docker run
Befehl?
- Mit diesem Bild (als Kubernetes docs schon sagt) ist ganz praktisch:
kubectl run curl --image=radial/busyboxplus:curl -i --tty
- Diese Frage wurde bereits auf dieses video: Kubernetes die sehr hart an Datadog mit einem dia-Titel "Cargo culting. Aus wikipedia: Der Begriff cargo-Kult-Programmierer kann gelten, wenn ein unerfahrener oder Anfänger computer-programmer (oder ein unerfahrener mit dem problem bei der hand) kopiert einige Programm-code von einem Ort zum anderen mit wenig oder kein Verständnis, wie es funktioniert oder ob es erforderlich ist, in seiner neuen position.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Einen container beendet, wenn seine main-Prozess beendet. Etwas wie:
halten, den container zu öffnen ist ehrlich gesagt ein hack, der sollte nur verwendet werden, für schnelle tests und Beispiele. Wenn Sie wollen einfach nur einen container zum testen für ein paar Minuten, die ich tun würde:
Was den Vorteil hat, dass der container wird automatisch verlassen, wenn Sie es vergessen. Alternativ könnte man so etwas in einem
while
Schleife zu halten, es läuft ewig, oder führen Sie einfach eine Anwendung wietop
. Alle diese sollte einfach zu tun, Kubernetes.Die Frage ist, warum würden Sie wollen, dies zu tun? Ihre container werden sollte, eine Dienstleistung, deren Verfahren halten die container, die im hintergrund laufen.
cat
ohne Argumente undtop
undsleep
mit dem argument der großen Zahl.sleep infinity
funktioniert in vielen Fällen (nicht busybox)Container sollen bis zum Abschluss ausgeführt. Sie müssen Ihren Behälter mit einer Aufgabe, die wird nie fertig. So etwas wie dies funktionieren sollte:
ubuntu
und versuchtebash
Bild, aber konnte es nicht zu funktionieren. Eine Idee, wie man das gleiche tun wie diese mitbash
Bild?Können Sie diese CMD in Ihre
Dockerfile
:Dadurch halten Sie Ihre container am Leben, bis Sie sagte zu stoppen. Mit Falle und warten, wird Ihr container sofort reagieren, um eine stop-Anforderung. Ohne Falle/warten, das stoppen dauert ein paar Sekunden.
Für busybox-basierten images (alpine basierte Bilder) schlafen, weiß nicht, über den infinity-argument. Diese Problemumgehung bietet Ihnen die gleiche unmittelbaren Antwort auf eine
docker stop
wie im obigen Beispiel:In Ihrem Dockerfile verwenden Sie diesen Befehl:
CMD ["sh", "-c", "tail -f /dev/null"]
Bauen Sie Ihre docker-image.
kubectl run debug-container -it --image=<your-image>
Ich war in der Lage, dies funktioniert mit dem Befehl
sleep infinity
im Kubernetes, die die container öffnen. Sehen diese Antwort für alternativen, wenn das nicht funktioniert.sleep infinity
hält die container öffnen, bietet die gleiche Art von Funktionalität, die Frage fragt nach (für die meisten Arten von Containern). Es bietet auch einen link zu alternativen für die Fälle, wenn, dass bestimmte Befehle nicht funktionierenIn Ordnung zu halten, ein POD läuft der POD sollte die Durchführung werden bestimmte Aufgabe, sonst Kubernetes finden es unnötig, daher wird er beendet. Es gibt viele Möglichkeiten, um einen POD läuft.
Habe ich vor ähnlichen Problemen, wenn ich Sie brauchte ein POD nur kontinuierlich ausgeführt werden, ohne etwas zu tun. Im folgenden sind die zwei Möglichkeiten, diese für mich gearbeitet:
Obwohl die erste option ist einfacher als die zweite und genügen der Anforderung, es ist nicht die beste option. Wie, es gibt ein limit, wie weit die Anzahl der Sekunden, die Sie vergeben in den sleep-Befehl.
Aber ein Behälter mit unendlichen Schleife ausgeführt wird, innerhalb es nie beendet.
Allerdings werde ich beschreiben beide Möglichkeiten(wenn man Sie ausführen busybox container):
1. Sleep-Befehl
2. Endlosschleife
Führen Sie den folgenden Befehl ein, um das pod:
Hoffe, es hilft!
Den einfachsten Befehl, wie es sein kann, für k8s-pod manifest zu laufen, für immer im container:
In meinem Fall, eine Schule mit einem initContainer konnte nicht initialisiert werden. Läuft
docker ps -a
und danndocker logs exited-container-id-here
gab mir eine log-Meldung, diekubectl logs podname
nicht angezeigt. Rätsel gelöst 🙂