Wir haben ein benutzerdefiniertes Docker-Image basierend auf dem offiziellen WordPress-Image, das ein benutzerdefiniertes Thema enthält, das wir entwickeln. Wir haben CI/CD in diesem Projekt mit Gitlab CI und Bereitstellung von Branches auf einem Bare-Metal-Kubernetes-Cluster v1.6 zur Überprüfung. Es funktioniert gut, aber wir versuchen, den Prozess zu verbessern, indem wir die erforderlichen manuellen Aktionen automatisieren, wenn eine neue Instanz bereitgestellt wird:
- WordPress installieren
- Administratoranmeldeinformationen festlegen
- Festlegen des Site-Namens und der URL
- Thema aktivieren
- Plugins aktivieren
- Importieren von Daten
- usw.
wp-cli hat alle nötigen Befehle. Aber wie verwendet man es mit Containern und K8S? Uns ist bewusst, dass es zwei Möglichkeiten gibt:
- Installieren des Tools in unserem WordPress-basierten Image.
- Verwenden Sie einen zweiten Behälter, der nur enthält wp-cli und kommuniziert mit dem Hauptcontainer.
Es gibt WordPress-Images mit vorinstalliertem wp-cli (zB tutum-docker-wordpress), aber wir glauben, dass dies nicht der richtige Weg ist. Irgendwann möchten wir eine CronJob-Ressource mit dem cli-Image verwenden, um jeden Tag Daten zu exportieren, und wir versuchen, den Prozess so generisch wie möglich zu gestalten, und wir möchten dabei bleiben offizielle Bilder Daher wird die zweite Option bevorzugt. Basierend auf unseren Recherchen müssen wir zur Umsetzung der zweiten Option zwei Dinge erreichen:
- Greifen Sie über den CLI-Container auf die Dateien der WordPress-Installation zu.
- Versuchen Sie es nach erfolgreicher Ausführung nicht erneut.
Wir haben einige Optionen ohne vollen Erfolg recherchiert:
- Zweiter Container im selben Pod – Es scheint möglich, Dateien zwischen beiden Containern zu teilen EmptyDiraber selbst wenn der Container erfolgreich ist, wird er neu gestartet.
- InitContainer – Das klingt sehr verlockend, weil Datenbankmigrationen auf diese Weise durchgeführt werden. Es scheint jedoch unmöglich zu sein, die Dateien zu erhalten, es sei denn, Sie verwenden ein benutzerdefiniertes Image.
- Arbeit – Es ist genau auf einmalige Aufgaben ausgelegt, jedoch scheint der Zugriff auf die Dateien eines Containers in einem Pod nicht möglich zu sein.
Dies scheint eine ziemlich häufige Funktion zu sein, wenn Sie Überprüfungsbereitstellungen von WordPress auf Kubernetes bereitstellen, und jemand sollte dies bereits getan haben. Wir konnten jedoch keine spezifischen Informationen zu diesem Anwendungsfall finden.
Lassen Sie sich beraten, was für Sie der beste Weg ist, um die gewünschte Umsetzung zu erreichen, und wie?
Kann wp-cli zur Image-Erstellungszeit ausgeführt werden? Aus der Beschreibung geht hervor, dass es so sein sollte.
– Jonah Benton
5. Februar 2018 um 16:59 Uhr
Die Befehle auf dem wp-cli schreiben in die Datenbank, die sich auf einem anderen Pod befindet, daher scheint es mir, dass es nicht möglich ist, diese Befehle zur Build-Zeit auszuführen.
– kmozow
6. Februar 2018 um 7:42 Uhr
Änderungen, die zur Laufzeit am Dateisystem eines Containers vorgenommen werden, werden nach Neustarts des Containers nicht beibehalten. Die beiden Optionen sind also: Orchestrieren Sie einen Build-Time-Prozess, der ein aktualisiertes WordPress-Image mit einer importierbaren Datenbank-Dump-Datei erzeugt; oder einen Startprozess zur Laufzeit orchestrieren, der die wp-cli-Sequenz bei jedem Neustart des Containers unveränderlich im WordPress-Container ausführt.
– Jonah Benton
6. Februar 2018 um 17:00 Uhr
Ersteres kann mit Tricks orchestriert werden, bei denen die Datenbank im Hintergrund im WordPress-Image gestartet wird, siehe zum Beispiel: stackoverflow.com/questions/29145370/…
– Jonah Benton
6. Februar 2018 um 17:00 Uhr
@Jon Wir haben uns für die Verwendung eines Init-Containers entschieden, der ein leicht angepasstes wp-cli-Image verwendet. Der Trick besteht darin, dass wir, um das Design hineinzubekommen und nicht zwei Bilder zu erstellen, einen anderen Init-Container des App-Images verwenden, der vor dem cli-Container ausgeführt wird, der die App in einen freigegebenen Speicherordner kopiert. Wenn der cli init-Container gestartet wird, enthält er auf diese Weise die Themen, Plugins usw. und kann sie installieren, die Datenbank füllen usw. Ich hoffe, diese Informationen sind für Sie nützlich.
– kmozow
24. Oktober 2018 um 17:26 Uhr