En este artículo quiero decir cómo implementar aplicaciones en diferentes entornos. En este ejemplo, desplegaremos a: "Prueba" y "Producción". Por supuesto, puede agregar cualquier entorno.
Para implementar aplicaciones, uso HELM. Permite una gestión de configuración flexible. Lo que puedes ver a continuación. Se supone que ya tiene un corredor configurado con timón y que sabe y sabe cómo trabajar con HELM.
Archivo de ejemplo:
.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
Vale la pena prestar atención al hecho de que, dependiendo del entorno, pasamos una variable: "prueba" o "producción".
También creamos el nombre del proyecto teniendo en cuenta el nombre de la variable, para que helm comprenda que se trata de proyectos diferentes (helm ls).
A continuación, pasamos esta variable (entorno) a HELM como: "global.env".
Para el ejemplo anterior, helm debe ubicarse en la misma carpeta en su repositorio.
Ahora veamos un ejemplo de cómo usar la variable de entorno en los Gráficos HELM.
Cree tales
valores.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
Aquí puede ver que para diferentes entornos especificamos diferentes configuraciones.
Para mayor comodidad, puede especificar la configuración predeterminada.
Otro ejemplo para 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
Siempre puede verificar cómo va su Gráfico con el comando:
helm template ./helm --set "global.env=test" helm template ./helm --set "global.env=production"
También puede implementar su código en diferentes nodos según el entorno.
Un ejemplo:
{{ if eq .Values.global.env "test" }} nodeSelector: nodetype: testnodes {{ else if eq .Values.global.env "production" }} nodeSelector: nodetype: productionnodes {{ else }}
Gracias a todos. Implementar correctamente.