In diesem Artikel möchte ich erläutern, wie Anwendungen in verschiedenen Umgebungen bereitgestellt werden. In diesem Beispiel werden wir bereitstellen für: "Test" und "Produktion". Natürlich können Sie jede Umgebung hinzufügen.
Zum Bereitstellen von Anwendungen verwende ich HELM. Es ermöglicht ein flexibles Konfigurationsmanagement. Was Sie unten sehen können. Es wird davon ausgegangen, dass Sie bereits einen getunten Läufer mit Helm haben und wissen und wissen, wie man mit HELM arbeitet.
Beispieldatei:
.gitlab-ci.yml.base_deploy: &base_deploy stage: deploy script: - PROJECT_NAME="${CI_PROJECT_NAME}-${CI_ENVIRONMENT_SLUG}" - helm --namespace ${CI_ENVIRONMENT_SLUG} upgrade -i ${PROJECT_NAME} helm --set "global.env=${CI_ENVIRONMENT_SLUG}"; stages: - deploy Deploy to Test: <<: *base_deploy environment: name: test Deploy to Production: <<: *base_deploy environment: name: production when: manual
Es ist zu beachten, dass wir je nach Umgebung eine Variable übergeben: "Test" oder "Produktion".
Wir erstellen auch den Projektnamen unter Berücksichtigung des Variablennamens, damit das Ruder versteht, dass es sich um verschiedene Projekte handelt (Helme).
Als nächstes übergeben wir diese Variable (Umgebung) an HELM als: "global.env".
Für das obige Beispiel sollte sich der Helm im selben Ordner in Ihrem Repository befinden.
Schauen wir uns nun ein Beispiel für die Verwendung der Umgebungsvariablen in HELM-Diagrammen an.
Erstellen Sie solche
Werte.yaml :
replicas: test: 1 production: 3 domain: test: test.domain.com production: production.domain.com resources: requests: cpu: _default: 50m production: 50m memory: _default: 256Mi production: 10Mi limits: memory: _default: 1Gi production: 1Gi cpu: _default: 1000m
Hier sehen Sie, dass wir für verschiedene Umgebungen unterschiedliche Einstellungen festlegen.
Zur Vereinfachung können Sie Standardeinstellungen festlegen.
Ein weiteres Beispiel für ingress.yaml:
apiVersion: extensions/v1beta1 kind: Ingress metadata: name: {{ .Chart.Name }} spec: rules: - host: {{ pluck .Values.global.env .Values.domain | first | default .Values.domain._default }} http: paths: - path: / backend: serviceName: {{ .Chart.Name }} servicePort: 80
Sie können jederzeit mit dem folgenden Befehl überprüfen, wie Ihr Diagramm funktioniert:
helm template ./helm --set "global.env=test" helm template ./helm --set "global.env=production"
Sie können Ihren Code je nach Umgebung auch auf verschiedenen Knoten bereitstellen.
Ein Beispiel:
{{ if eq .Values.global.env "test" }} nodeSelector: nodetype: testnodes {{ else if eq .Values.global.env "production" }} nodeSelector: nodetype: productionnodes {{ else }}
Danke an alle. Richtig bereitstellen.