2017-05-29 2 views
1

Ich dränge meine Phoenix-App zur Überprüfung auf einen Kubernetes-Cluster. Ich benutze GitLab, um einen Dienst für den Webserver und einen anderen Dienst für einen temporären Postgres-Pod zu erstellen.Kubernetes Cluster und Phoenix - automatisieren `Mix ecto.migrate`?

Was ich tun möchte, ist automatisieren mix ecto.create und mix ecto.migrate. Allerdings gibt es ein Timing-Problem - es gibt eine kurze Zeit, in der der Postgres-Server noch nicht fertig ist.

Ich konnte den Postgres-Dienst in meinem Bereitstellungsskript abfragen, bevor ich den Webanwendungsdienst erstelle. Aber ist das die praktischste Methode?

Antwort

2

Kubernetes hat etwas, das init containers genannt wird, das Ihnen helfen kann.

In der Dokumentation finden Sie ein Beispiel für einen App-Container, der auf einen dB-Container wartet.

apiVersion: v1 
kind: Pod 
metadata: 
    name: myapp-pod 
    labels: 
    app: myapp 
spec: 
    containers: 
    - name: myapp-container 
    image: busybox 
    command: ['sh', '-c', 'echo The app is running! && sleep 3600'] 
    initContainers: 
    - name: init-myservice 
    image: busybox 
    command: ['sh', '-c', 'until nslookup myservice; do echo waiting for myservice; sleep 2; done;'] 
    - name: init-mydb 
    image: busybox 
    command: ['sh', '-c', 'until nslookup mydb; do echo waiting for mydb; sleep 2; done;'] 
+0

Danke! Ich werde das einchecken – Mitkins

+0

Das ist genial! Der Init-Container-Mechanismus ist eine elegante/robuste Lösung im Vergleich zu meinem ursprünglichen Vorschlag – Mitkins

+0

Wissen Sie, ob es eine Möglichkeit gibt, dies mit einer Bereitstellung zu tun? – Mitkins

Verwandte Themen