Neste artigo, quero dizer como implantar aplicativos em diferentes ambientes. Neste exemplo, implantaremos em: "Teste" e "Produção". Obviamente, você pode adicionar qualquer ambiente.
Para implantar aplicativos, eu uso o HELM. Permite gerenciamento de configuração flexível. O que você pode ver abaixo. Supõe-se que você já tenha um corredor configurado com leme e saiba e saiba como trabalhar com o HELM.
Arquivo de exemplo:
.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 a pena prestar atenção ao fato de que, dependendo do ambiente, passamos por uma variável: "test" ou "production".
Também criamos o nome do projeto levando em consideração o nome da variável, para que o helm entenda que esses são projetos diferentes (helm ls).
Em seguida, passamos essa variável (ambiente) para HELM como: "global.env".
Para o exemplo acima, o helm deve estar localizado na mesma pasta no seu repositório.
Agora vamos ver um exemplo de como usar a variável de ambiente nos HELM Charts.
Crie esses
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
Aqui você pode ver que, para ambientes diferentes, especificamos configurações diferentes.
Por conveniência, você pode especificar as configurações padrão.
Outro exemplo 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
Você sempre pode verificar como o seu gráfico está seguindo o comando:
helm template ./helm --set "global.env=test" helm template ./helm --set "global.env=production"
Você também pode implantar seu código em diferentes nós, dependendo do ambiente.
Um exemplo:
{{ if eq .Values.global.env "test" }} nodeSelector: nodetype: testnodes {{ else if eq .Values.global.env "production" }} nodeSelector: nodetype: productionnodes {{ else }}
Obrigado a todos. Implante corretamente.