Wie legen Sie dynamische Werte mit Kubernetes yaml-Datei?
Beispiel für ein deployment-yaml-Datei:
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: guestbook
spec:
replicas: 2
template:
metadata:
labels:
app: guestbook
spec:
container:
- name: guestbook
image: {{Here want to read value from config file outside}}
Es ist ein ConfigMap
Funktion mit Kubernetes, aber auch das schreiben, das Schlüssel/Wert-auf der yaml-Datei. Gibt es eine Möglichkeit, um die Schlüssel zu Umgebungsvariablen?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich glaube nicht, dass es möglich ist, um Bild-durch variable oder Config Anzeigen in Kubernetes. Aber Sie können zum Beispiel Helm, um Ihre Bereitstellungen viel mehr flexibel und konfigurierbar.
Können Sie es nicht automatisch, müssen Sie ein externes Skript zu "kompilieren" Ihre Vorlage, oder verwenden Ruder wie vorgeschlagen von @Jakub.
Den Sie verwenden möchten, können Sie eine benutzerdefinierte bash-Skript, vielleicht integriert mit Ihren CI-pipeline.
Gegeben, eine Vorlage yml Datei namens
deploy.yml.template
sehr ähnlich zu der von Ihnen vorausgesetzt, Sie können so etwas wie dies:helm
Dokument. Es ist ein großartiges Werkzeug. Ihr Skript ist eine richtige Weg, um eine Anwendung bereitzustellen, mit CI.Einer Zeile:
In yaml:
cat app-deployment.yaml | sed "s/{{BITBUCKET_COMMIT}}/${BITBUCKET_COMMIT:=1}/g" | kubectl apply -f -
sed
Dateien Lesen kann völlig in Ordnung auf seine eigene, werden alle verbleibenden Argumente analysiert werden, die als input-Datei-Pfade.Mein Ansatz:
tools/jinja2-cli.py
:Regel:
Innerhalb der
.j2
Vorlage-Datei, die Sie verwenden können, jede jinja-syntax-Konstrukt, z.B.{{env.GUEST}}
wird ersetzt durch den Wert vonGUEST
definiert in.env
Damit Ihre
templates/deploy.yaml.j2
würde wie folgt Aussehen:Einem anderen Ansatz (mit nur
bash
gelieferten undxargs
) könnte es sein,Können Sie auch
envsubst
bei der Bereitstellung.z.B.
Es ersetzt alle Variablen in der Datei mit den Werten.
Wir sind erfolgreich mit diesem Ansatz auf unsere CI bei der Bereitstellung auf mehreren Umgebungen, auch, um zu injizieren, die CI_TAG etc in die Bereitstellungen.
Erstelle ich ein Skript namens
kubectl_create
und es verwenden, um führen Sie den create Befehl. Es ersetzt einen beliebigen Wert in der Vorlage, auf die verwiesen wird, die in einer Umgebungsvariablen.Zum Beispiel, wenn die Datei Vorlage hat:
Laufen
kubectl_create nginx-service.yaml
und dann die Umgebungsvariable PUBLIC_IP ersetzt werden, vor dem ausführen der eigentlichen kubectl create-Befehl.Ich habe mit kubetpl
Es hat drei verschiedene template-Aromen und unterstützt die ConfigMap/Secret einfrieren.
Erstelle ich ein Skript namens kubectl_apply. Es lädt Variablen aus .env, ersetzen Sie ${CUSTOMVAR} in yml und übergeben es an kubectl Befehl