2015-11-26 19 views
7

Ich habe zwei separate Kubernetes-Cluster, die für eine Staging- bzw. eine Produktionsumgebung verwendet werden. Ich möchte YAML-Manifeste für die Kubernetes-API-Objekte haben, die ich an jeden Cluster senden werde, aber einige der Objekte werden leicht unterschiedliche Konfigurationen zwischen den beiden Umgebungen haben.Verwenden von dynamischen Werten in Kubernetes-Manifesten

Stellen Sie sich vor, Sie führen ein internes Docker-Registry auf jedem Cluster aus, wobei S3 als Speicher-Back-End und One das GCS-Back-End verwenden. Der Registrierungscontainer kann diese Konfigurationswerte als Umgebungsvariablen akzeptieren oder aus einer Datei lesen, die beide von Kubernetes unterstützt werden. Wie aber sollte ich diese Werte für jede Umgebung angeben?

Im Wesentlichen will, was ich ist ein Weg, ein Manifest zu haben, die etwa wie folgt aussieht, wo die $() Syntax Variable Interpolation ist, die auf dem Server passieren würden, wenn das Manifest vorgelegt wird:

--- 
apiVersion: v1 
kind: Pod 
metadata: 
    name: foo 
spec: 
    containers: 
    - name: foo 
     image: foo 
     env: 
     - name: bar 
      value: $(etcdctl get /path/to/bar) 

Ich könnte schreiben Vorlagen, die Platzhalter für die Werte verwenden und dann die Vorlage verarbeiten, wobei echte Werte aus einer externen Quelle abgerufen werden, um das endgültige Manifest zu erstellen, das tatsächlich an den Cluster gesendet wird. Allerdings dachte ich, ich würde zuerst fragen, für den Fall, dass ein Werkzeug, das das schon tut, existiert, oder es gibt eine Kubernetes-gesegnete Art, dies zu tun, was mir nicht bewusst ist. Es scheint sicherlich etwas zu sein, was viele Leute tun müssen, um Kubernetes zu benutzen.

Andere Ideen, die ich hatte, mit einer Kombination von etcd, confd und Skripten auf den Host-Knoten, aber dies beginnt in das Reich der Host-Konfigurations-Management, die ich zu fast allen Kosten vermeiden möchte. Ich benutze CoreOS und die Hosts werden komplett über coreos-cloudinit bereitgestellt. Mit anderen Worten, auf dem Hostsystem, das zum Zeitpunkt der Erstellung des Knotens nicht definiert ist, wird nichts manipuliert, so dass herkömmliche Konfigurationsverwaltungstools wie Ansible nicht verfügbar sind.

Ich kenne Kubernetes Geheimnis-System, aber einige dieser Variablenwerte könnten ziemlich groß sein, und die meisten von ihnen sind keine Geheimnisse.

Antwort

Verwandte Themen