Kubernetes (k8s) + Helm + GitLab CI / CDред рд╕рд╣реА рдврдВрдЧ рд╕реЗ рддреИрдирд╛рдд рдХрд░реЗрдВ

рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдореИрдВ рдпрд╣ рдмрддрд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рд╡рд┐рднрд┐рдиреНрди рд╡рд╛рддрд╛рд╡рд░рдгреЛрдВ рдореЗрдВ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЛ рдХреИрд╕реЗ рддреИрдирд╛рдд рдХрд┐рдпрд╛ рдЬрд╛рдПред рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╣рдо "рдЯреЗрд╕реНрдЯ" рдФрд░ "рдкреНрд░реЛрдбрдХреНрд╢рди" рдХреЗ рд▓рд┐рдП рддреИрдирд╛рдд рд╣реЛрдВрдЧреЗред рдмреЗрд╢рдХ, рдЖрдк рдХрд┐рд╕реА рднреА рд╡рд╛рддрд╛рд╡рд░рдг рдХреЛ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред

рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рд╣реЗрд▓реНрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВред рдпрд╣ рд▓рдЪреАрд▓рд╛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдкреНрд░рдмрдВрдзрди рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЖрдк рдиреАрдЪреЗ рдХреНрдпрд╛ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкрддрд╡рд╛рд░ рдХреЗ рд╕рд╛рде рдПрдХ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдзрд╛рд╡рдХ рд╣реИ рдФрд░ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ рдФрд░ рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рд╣реЗрд▓реНрдо рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рдирд╛ рд╣реИред

рдЙрджрд╛рд╣рд░рдг рдлрд╝рд╛рдЗрд▓: .itlab-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 

рдпрд╣ рдЗрд╕ рддрдереНрдп рдкрд░ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐, рдкрд░реНрдпрд╛рд╡рд░рдг рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рд╣рдо рдПрдХ рдЪрд░ рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ: "рдкрд░реАрдХреНрд╖рдг" рдпрд╛ "рдЙрддреНрдкрд╛рджрди"ред

рд╣рдо рд╡реИрд░рд┐рдПрдмрд▓ рдирд╛рдо рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдП рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдирд╛рдо рднреА рдмрдирд╛рддреЗ рд╣реИрдВ, рддрд╛рдХрд┐ рдкрддрд╡рд╛рд░ рдХреЛ рд╕рдордЭ рдореЗрдВ рдЖрдП рдХрд┐ рдпреЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╣реИрдВ (рд╣реЗрд▓реНрдо ls)ред

рдЕрдЧрд▓рд╛, рд╣рдо рдЗрд╕ рд╡реИрд░рд┐рдПрдмрд▓ (рдкрд░реНрдпрд╛рд╡рд░рдг) рдХреЛ HELM рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ: "Global.env"ред

рдЙрдкрд░реЛрдХреНрдд рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣реЗрд▓реНрдо рдЖрдкрдХреЗ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рдЙрд╕реА рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд╕реНрдерд┐рдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдЕрдм рдПрдХ рдЙрджрд╛рд╣рд░рдг рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рд╣реЗрд▓реНрдо рдЪрд╛рд░реНрдЯ рдореЗрдВ рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░реЗрдВред

рдРрд╕реЗ рдорд╛рди рдмрдирд╛рдПрдВред

 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 

рдпрд╣рд╛рдВ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╡рд┐рднрд┐рдиреНрди рд╡рд╛рддрд╛рд╡рд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рд╣рдо рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддреЗ рд╣реИрдВред
рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП, рдЖрдк рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

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 

рдЖрдк рд╣рдореЗрд╢рд╛ рдпрд╣ рдЬрд╛рдВрдЪ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЖрдкрдХрд╛ рдЪрд╛рд░реНрдЯ рдХрдорд╛рдВрдб рджреНрд╡рд╛рд░рд╛ рдХреИрд╕рд╛ рдЪрд▓ рд░рд╣рд╛ рд╣реИ:

 helm template ./helm --set "global.env=test" helm template ./helm --set "global.env=production" 

рдЖрдк рдкрд░реНрдпрд╛рд╡рд░рдг рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЕрдкрдиреЗ рдХреЛрдб рдХреЛ рд╡рд┐рднрд┐рдиреНрди рдиреЛрдбреНрд╕ рдореЗрдВ рднреА рддреИрдирд╛рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдПрдХ рдЙрджрд╛рд╣рд░рдг:

 {{ if eq .Values.global.env "test" }} nodeSelector: nodetype: testnodes {{ else if eq .Values.global.env "production" }} nodeSelector: nodetype: productionnodes {{ else }} 

рдЖрдк рд╕рднреА рдХрд╛ рдзрдиреНрдпрд╡рд╛рджред рд╕рд╣реА рдврдВрдЧ рд╕реЗ рддреИрдирд╛рдд рдХрд░реЗрдВред

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


All Articles