Kubernetes (k8s) + Helm + GitLab CI / CD. Implantar corretamente

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.

Source: https://habr.com/ru/post/pt422493/


All Articles