2017-12-15 6 views

Antwort

1

Vielleicht helm kann Ihnen hier helfen. Helm erlaubt es Ihnen, Ihre k8s-YAML-Dateien zu erstellen und sie in einem bereitstellbaren K8S-Paket zu bündeln. Ihre Konfigurationsdateien werden möglicherweise in ConfigMaps abgelegt und können auch mit einem Steuerpult versehen werden. Wie das im Detail gemacht wird, kann man in der chart template guide sehen.

Eine Möglichkeit, diese Vorlagen zu deploy Zeit zu füllen, dann wäre:

helm upgrade --install my-service /path/to/my/chart/package --set my.value=${MY_VALUE_ENV_VAR} 
+0

Danke !. Anstatt die Werte zur Laufzeit anzugeben, können die Werte von Vault abgerufen werden, sodass sie automatisch ausgefüllt werden. –

+0

@DanielSagayaraj Du meinst, deine Kapseln ziehen beim Start direkt Geheimnisse aus dem Tresor? In diesem Fall könnten Sie consul-template mit [exec-mode] (https://github.com/hashicorp/consul- template#exec-mode) integrieren, das speziell für Container entwickelt wurde. Sie können die Consul-Template-Datei in eine Config-Map einfügen, sie in den Container einhängen und die Consul-Template beim Start des Containers mit Vault verzaubern lassen. – fishi

2

Dynamische Config-Datei Generation kann Erstellung von

  1. Config-Dateistruktur umfassen:

    Die Konfigurationsdateien für zB redis.yaml können für Entwicklungs-, Staging- und Produktionsumgebungen verwendet werden. zB:

    Inszenierung

    ${ENVIRONMENT}: 
        host: ${REDIS_HOST} 
        namespace: ${REDIS_NAMESPACE} 
        port: 6379 
    

    Produktion:

    ${ENVIRONMENT}: 
        host: ${REDIS_HOST} 
        namespace: ${REDIS_NAMESPACE} 
        port: 6379 
        connect_timeout: ${REDIS_CONNECT_TIMEOUT} 
        timeout: {REDIS_TIMEOUT} 
    
  2. Config-Datei Inhalt:

    Der Inhalt der Konfigurationsdateien wieder dynamisch aufgefüllt werden können.

konnten wir config-templates oder config-file-structure mit Helm erzeugen und montieren sie an der gewünschten Stelle (zB config/redis.yaml) innerhalb der pod.Then diese config-Vorlagen können in die richtige Datei konvertiert/wiedergegeben werden unter Verwendung von Dienstprogrammen auf Laufzeit des Containers.

Die dynamische Erstellung von Konfigurationsdateien basierend auf den environment/environment_variables konnte folgendermaßen erreicht werden.

Die Bash Way (mit eval und cat):

  1. eine Datei inator mit dem folgenden Inhalt erstellen

    #!/bin/bash 
    eval "cat <<EOF 
    $(<$1) 
    EOF 
    " | tee $1 >/dev/null 
    
  2. inator als ausführbar machen und es im Inneren des Docker platzieren Bild und führen Sie es als ENTRYPOINT Skript

  3. Unter Berücksichtigung der env Zugriffe auf Variablen sind avilable in der Schote/Behälter

    zB:

    $ env 
    ENVIRONMENT=staging 
    REDIS_HOST=abc.com 
    REDIS_NAMESPACE=inator 
    
    $ cat config/redis.yaml 
    ${ENVIRONMENT}: 
        host: ${REDIS_HOST} 
        namespace: ${REDIS_NAMESPACE} 
        port: 6379 
    
    $ ./inator config/redis.yaml 
    $ cat config/redis.yaml 
    staging: 
        host: abc.com 
        namespace: inator 
        port: 6379 
    

    Produktion

    $ env 
    ENVIRONMENT=production 
    REDIS_HOST=redis.prod.com 
    REDIS_NAMESPACE=prod 
    REDIS_CONNECT_TIMEOUT=5 
    TIMEOUT=10 
    
    $ cat config/redis.yaml 
    ${ENVIRONMENT}: 
        host: ${REDIS_HOST} 
        namespace: ${REDIS_NAMESPACE} 
        port: 6379 
        connect_timeout: ${REDIS_CONNECT_TIMEOUT}   
        timeout: {REDIS_TIMEOUT} 
    
    $ ./inator config/redis.yaml 
    $ cat config/redis.yaml 
    production: 
        host: redis.prod.com 
        namespace: prod 
        port: 6379 
        connect_timeout: 5 
        timeout: 10 
    

Vorteile Inszenierung: kein zusätzliches Paket erforderlich.

Die dockerize Weise:

dockerize ist ein Dienstprogramm laufende Anwendungen in Andockfensters Behältern zu vereinfachen. Es verwendet intern go-Vorlagen, um Konfigurationsdateien aus Umgebungsvariablen zu füllen.

Weitere Informationen finden Sie in diesem Blogpost Environment Variable Templates.

Verwandte Themen