Ich habe einen dockerisierten Python-Prozess, den ein Client ein- oder zweimal im Monat ausführen möchte. Es ruft eine Reihe von Google-APIs auf und speichert die Ergebnisse in einem Google Sheet. Netzwerkanforderungen werden nicht akzeptiert. Ich möchte einen "magischen Knopf" bereitstellen, der den Docker-Container hochfährt und dann alles herunterfährt.
Einige Hintergrundinformationen: Ich hatte dies zuvor über Docker Cloud auf einer AWS EC2-Mikroinstanz bereitgestellt. Mein Kunde erhielt ein Docker Cloud-Konto und konnte den Container bei Bedarf relativ problemlos ausführen. Bei diesem Workflow gibt es zwei Probleme:
- Die bereitgestellte EC2-Instanz (Docker-Host) wurde rund um die Uhr ausgeführt, unabhängig davon, ob der Docker-Container ausgeführt wurde oder nicht. Das wurde teuer.
- Die Docker Cloud wurde vor einem Monat heruntergefahren.
Alternativen scheinen Google- und AWS Kubernetes-Dienste zu sein. Mein Vorbehalt ist, dass sie für meinen Kunden zu kompliziert sind. Rat?
Antworten:
AWS bietet jetzt fargate an, das von ihnen verwaltet wird, anstatt ein Dienst wie ECS zu sein, für den Sie die Server ausgeführt haben, und sie verwalten die Steuerebene. Fargate ist im Grunde ein "serverloses" ECS. Sie können eine Cloudwatch verwenden, die sogar geplant ist, um gelegentlich etwas nach einem Zeitplan in einem Fargate-ECS-Cluster auszuführen. Deshalb zahlen Sie nur für das, was Sie verwenden. Zu berücksichtigen ist, dass Fargate einiges teurer ist als ECS, das auf Ihrer eigenen EC2-Instanz ausgeführt wird. Wenn Sie jedoch häufig arbeiten, werden Sie wahrscheinlich nur geringfügige Einsparungen erzielen.
Eine andere Möglichkeit wäre, etwas Ähnliches zu automatisieren. Erstellen Sie also einen ECS-Cluster mit einem ASG-Hintergrund, passen Sie die Skalierung an die ECS-Anforderungen an und starten Sie den Container mit Cloudwatch. ECS kann dann vergrößert und verkleinert werden. Dies kann jedoch schwierig sein, da diese Methode normalerweise zum automatischen Skalieren von ECS-Clustern verwendet wird, die auf Cloutwatch-Triggern basieren. Daher müssen Sie möglicherweise in Cloudwatch herumhacken und möglicherweise ein Lambda-Skript zusammen hacken, da Sie technisch gesehen sind Verwenden Sie es nicht so, wie es beabsichtigt ist. Am Ende wäre dies wahrscheinlich das kostengünstigste, aber in Ihrem Fall könnten die Kosteneinsparungen vernachlässigbar sein.
Meiner Meinung nach ist Kubernetes ein zehn Tonnen schwerer Hammer, mit dem Sie ein Bild an die Wand hängen würden. Es ist viel übertrieben.
Sie können diese beiden Optionen untersuchen und feststellen, ob sie kostengünstig und einfach zu verwalten sind. Andere Container-Orchestrierung wird normalerweise übertrieben sein, ECS hat den Vorteil (normalerweise einen Nachteil), einfach dumm zu sein, und Sie zahlen sehr wenig und haben im Grunde keinen Betriebsaufwand für die Steuerebene.
quelle
Der billigste Weg ist die Verwendung von Herokus Container Registry .
Es ist völlig kostenlos, einfach zu bedienen und bereitzustellen (Sie benötigen nicht einmal die Heroku-CLI, sondern müssen Ihr Image mit Ihrem Authentifizierungstoken per Docker an registry.heroku.com senden.)
Es ist vielleicht nicht das Beste, aber basierend auf Ihren Kommentaren denke ich, dass es für Sie in Ordnung sein sollte, siehe Nachteile hier .
Eine andere billige Alternative ist hyper.sh .
quelle
Sie können die Leistung von Zappa und Hug mischen , um Ihren Code in eine serverlose AWS Lambda- Funktion zu konvertieren, die Ihrer Hauptfunktion des Python-Prozesses nur einen Dekorator hinzufügt
Danach können Sie mit AWS Lambda bereitstellen
zappa deploy prod
und müssen die zurückgegebene URL nur noch zweimal im Monat aufrufen.quelle
Während ich normalerweise den anderen Antworten zustimme, dass Kubernetes übertrieben ist, vereinfacht KubeSail dies so weit wie möglich, um das Ausführen von Aufgaben wie Ihrer zu vereinfachen. Es gibt eine kostenlose Stufe, mit der Sie Ihren Job auf unbestimmte Zeit ausführen können. Sie müssen sich nur mit GitHub anmelden, Ihre Kube-Konfiguration abrufen und dann Folgendes verwenden:
Speichern Sie einfach das oben Gesagte unter
my-job.yaml
und ersetzen Sie esimage: asciimo/my-python-image
durch den Namen Ihres Bildes in Dockerhub (oder einer anderen Registrierung). Führen Sie es dann ausWenn Sie mehr über Jobs erfahren möchten, finden Sie in den Kubernetes-Dokumenten viele weitere Informationen und Optionen: https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/
Vollständige Offenlegung, ich bin einer der KubeSail-Gründer
quelle
Der ECS-Dienst von Amazon ist sehr einfach und ermöglicht es Ihnen, Containeraufgaben zu planen
https://docs.aws.amazon.com/AmazonECS/latest/developerguide/scheduling_tasks.html
quelle
Das Ansible ec2- Modul verfügt über die erforderlichen Funktionen (Instanzen starten, einige Aufgaben ausführen und dann beenden). Und sogar Beispielspielbuch haben.
quelle