2017-03-06 2 views
5

vorbei Gibt es eine Möglichkeit Bildversion von einem Varibale/config zu übergeben, wenn ein offensichtlichen .yaml vorbei BefehlWie Bildversion parametrieren, wenn yaml für Containererstellung

Beispiel kubectl:

apiVersion: v1 
kind: ReplicationController 
metadata: 
    name: nginx 
spec: 
    replicas: 1 
    selector: 
    app: nginx 
    template: 
    metadata: 
     name: nginx 
     labels: 
     app: nginx 
    spec: 
     containers: 
     - name: nginx 
     image: nginx:${IMAGE_VERSION} 
     imagePullPolicy: Always 
     resources: 
     limits: 
      cpu: "1.2" 
      memory: 100Mi 
     ports: 
     - containerPort: 80 

Verwenden Fall ist es, bestimmte Image-Version zu starten, die auf Kubernetes-Ebene festgelegt ist, und dass die Variable von Kubernetes selbst auf der Serverseite aufgelöst wird.

Danke und Grüße, Ravi

Antwort

3

K8S Manifest-Dateien sind statisch yaml/json.

Wenn Sie die Manifeste Vorlage möchten (und mehrere Ressourcen in einem Bündel artig verwalten), empfehle ich Ihnen einen Blick auf Helm

habe ich vor kurzem a Workshop which focuses precisely on the "Templating" features of Helm erstellt haben.

Helm ist viel mehr als nur Templating, er ist als vollwertiger Paketmanager für Kubernetes-Anwendungen gebaut (denke Apt/Yum/Homebrew).

Wenn Sie alles Client-Seite zu handhaben, haben einen Blick auf https://github.com/errordeveloper/kubegen

Obwohl an einem gewissen Punkt, müssen Sie die anderen Funktionen von Helm und eine Migration benötigt werden, wenn die Zeit kommt - Ich empfehle beißend die Kugel und Helm direkt aufstehen.

+0

Eine weitere Option ist die Verwendung des 'kubectl set' -Befehls, um das Image-Tag für eine bestehende Implementierung zu setzen (die Teil einer CI/CD-Pipeline sein kann, um ein laufendes Update auszulösen) manifestiert. –

+0

Hypothetischer Anwendungsfall, um es klarer zu machen. Sprich, ich habe einen Notebooklancher-Dienst startet Zeppelin Notebook-Container Nun, im Launcher-Service ... nicht hart-Codierung der Zeppelin-Image-Version zu starten oder Tag 'neueste' Nun, wenn es eine Möglichkeit, dynamisch war pump in der zeppelin.image.version mit einer ConfigMap .... hätte es genagelt. Ich versuchte diesen Ansatz .... offensichtlich hat nicht funktioniert. Wieder muss die Image-Version von der Server-Seite von Kube erkannt werden, d. H. In api-Server beim Lesen/Parsing von Yaml ... Helm oder andere Bash-Templater tun dies auf der Client-Seite. – user1543211

+0

Statt eines hypothetischen Anwendungsfalls, durch den Workshop laufen, verlinkte ich mit einem praktischen Beispiel und lassen Sie mich wissen, ob das noch unklar ist? –

1

Nachdem wir uns das kürzlich angesehen haben, haben wir uns entschieden, einfach mit sed zu gehen. Wickeln Sie kubectl apply in ein kleines Bash-Skript und ersetzen Sie die Platzhalter, bevor Sie Apply anwenden.

Wir haben uns etwas anspruchsvollere Werkzeuge angeschaut, aber wir haben nur Helm gefunden. Helm ist jedoch ein komplexes Stück Technologie, das viel mehr als nur Templating leistet. Es verändert Ihren Workflow stark, da Sie nicht mehr mit kubectl bereitstellen und ein Helm-Paket benötigen, um Ihre Pakete zu pushen. Unsere Einschätzung war, dass Helm nicht nützlich für die Bereitstellung unserer Anwendung ist und die Verwendung nur für das Templating ist Overkill.

+1

Helm-Paket-Repos nicht notwendig sind . Wir sind von Makefiles mit 'sed' und' kubectl Patch Deployment ... umgezogen ...'zu einer Flask-REST-API, die Jinja2-Templates gerendert und in den Cluster-Service-Accounts verwendet hat, um Bereitstellungen zu aktualisieren ... als wir voll waren, haben wir nie zurück geschaut - sparen Sie sich den Ärger und versuchen Sie es. –

+0

PS: häufiger ist die Verwendung von Sigil anstelle von sed –