Imscaradh a eagrú chuig timpeallachtaí iolracha k8s ag baint úsáide as helmfile

Helmfile - fillteán le haghaidh Helm, a ligeann duit cur síos a dhéanamh ar go leor eisiúintí clog in aon áit amháin, a gcuid cairteacha a pharaiméadar do roinnt timpeallachtaí, agus freisin ord a n-imscaradh a shocrú.

Is féidir leat léamh faoi helmfile féin agus samplaí dá úsáid i EOLAIS и treoir dea-chleachtas.

Cuirfimid aithne ar bhealaí neamhshoiléire chun cur síos a dhéanamh ar eisiúintí i helmfile

Ligean le rá go bhfuil paca cairteacha stiúrtha againn (mar shampla, abair linn postgres agus roinnt feidhmchláir backend) agus roinnt timpeallachtaí (roinnt braislí kubernetes, roinnt spásanna ainm, nó roinnt den dá cheann). Glacaimid an comhad helm, léimid na doiciméid agus cuirimid síos ar ár dtimpeallachtaí agus ar ár n-eisiúintí:

    .
    ├── envs
    │   ├── devel
    │   │   └── values
    │   │       ├── backend.yaml
    │   │       └── postgres.yaml
    │   └── production
    │       └── values
    │           ├── backend.yaml
    │           └── postgres.yaml
    └── helmfile.yaml

helmfile.yaml

environments:
  devel:
  production:

releases:
  - name: postgres
    labels:
      app: postgres
    wait: true
    chart: stable/postgresql
    version: 8.4.0
    values:
      - envs/{{ .Environment.Name }}/values/postgres.yaml
  - name: backend
    labels:
      app: backend
    wait: true
    chart: private-helm-repo/backend
    version: 1.0.5
    needs:
      - postgres
    values:
      - envs/{{ .Environment.Name }}/values/backend.yaml

Chríochnaíomar suas le 2 timpeallacht: fhorbairt, táirgeadh — tá a luachanna féin ag gach ceann acu le haghaidh na gcairteacha scaoilte stiúrtha. Déanfaimid imscaradh chucu mar seo:

helmfile -n <namespace> -e <env> apply

Leaganacha éagsúla de chairteacha stiúrtha i dtimpeallachtaí éagsúla

Cad a tharlóidh má theastaíonn uainn leaganacha éagsúla den inneall a rolladh amach chuig timpeallachtaí éagsúla? Conas an leagan scaoilte a pharaiméadarú? Na luachanna comhshaoil ​​atá ar fáil tríd {{ .Values }}

helmfile.yaml

environments:
  devel:
+   values:
+   - charts:
+       versions:
+         backend: 1.1.0
  production:
+   values:
+   - charts:
+       versions:
+         backend: 1.0.5
...
  - name: backend
    labels:
      app: backend
    wait: true
    chart: private-helm-repo/backend
-   version: 1.0.5
+   version: {{ .Values.charts.versions.backend }}
...

Sraith éagsúil d'iarratais i dtimpeallachtaí éagsúla

Go hiontach, ach cad mura bhfuil gá againn production postgres a rolladh amach, mar tá a fhios againn nach gá dúinn an bunachar sonraí a bhrú isteach i k8s agus ar díol tá braisle postgres iontach ar leith againn? Chun an fhadhb seo a réiteach tá lipéid againn

helmfile -n <namespace> -e devel apply
helmfile -n <namespace> -e production -l app=backend apply

Tá sé seo iontach, ach go pearsanta is fearr liom cur síos a dhéanamh ar na feidhmchláir atá le himscaradh sa chomhshaol gan úsáid a bhaint as argóintí seolta, ach sa chur síos ar na timpeallachtaí féin. Cad atá le déanamh? Is féidir leat na tuairiscí scaoilte a chur i bhfillteán ar leith, liosta de na heisiúintí riachtanacha a chruthú sa tuairisc timpeallachta agus "piocadh suas" na heisiúintí riachtanacha amháin, gan aird a thabhairt ar an gcuid eile

    .
    ├── envs
    │   ├── devel
    │   │   └── values
    │   │       ├── backend.yaml
    │   │       └── postgres.yaml
    │   └── production
    │       └── values
    │           ├── backend.yaml
    │           └── postgres.yaml
+   ├── releases
+   │   ├── backend.yaml
+   │   └── postgres.yaml
    └── helmfile.yaml

helmfile.yaml


  environments:
    devel:
      values:
      - charts:
          versions:
            backend: 1.1.0
      - apps:
        - postgres
        - backend

    production:
      values:
      - charts:
          versions:
            backend: 1.0.5
      - apps:
        - backend

- releases:
-    - name: postgres
-      labels:
-        app: postgres
-      wait: true
-      chart: stable/postgresql
-      version: 8.4.0
-      values:
-        - envs/{{ .Environment.Name }}/values/postgres.yaml
-    - name: backend
-      labels:
-        app: backend
-      wait: true
-      chart: private-helm-repo/backend
-     version: {{ .Values.charts.versions.backend }}
-     needs:
-       - postgres
-     values:
-       - envs/{{ .Environment.Name }}/values/backend.yaml
+ ---
+ bases:
+ {{- range .Values.apps }}
+   - releases/{{ . }}.yaml
+ {{- end }}

releases/postgres.yaml

releases:
  - name: postgres
    labels:
      app: postgres
    wait: true
    chart: stable/postgresql
    version: 8.4.0
    values:
      - envs/{{ .Environment.Name }}/values/postgres.yaml

releases/backend.yaml

releases:
  - name: backend
    labels:
      app: backend
    wait: true
    chart: private-helm-repo/backend
    version: {{ .Values.charts.versions.backend }}
    needs:
      - postgres
    values:
      - envs/{{ .Environment.Name }}/values/backend.yaml

An nóta

Nuair a bheidh ag úsáid an bases: is gá deighilteoir yaml a úsáid ---, ionas gur féidir leat eisiúintí teimpléid (agus páirteanna eile, mar shampla helmDefaults) le luachanna ó thimpeallachtaí

Sa chás seo, ní bheidh an scaoileadh postgres san áireamh fiú sa tuairisc le haghaidh táirgeadh. An-chompordach!

Luachanna domhanda sáraitheacha maidir le heisiúintí

Ar ndóigh, tá sé iontach gur féidir leat luachanna a shocrú le haghaidh cairteacha stiúrtha do gach timpeallacht, ach cad má tá cur síos déanta ar roinnt timpeallachtaí againn, agus ba mhaith linn, mar shampla, an rud céanna a shocrú do chách. affinity, ach nílimid ag iarraidh é a chumrú de réir réamhshocraithe sna cairteacha iad féin, a stóráiltear i tornapaí.

Sa chás seo, le haghaidh gach scaoileadh d'fhéadfaimis 2 chomhad a shonrú le luachanna: an chéad cheann le luachanna réamhshocraithe, a chinnfidh luachanna na cairte féin, agus an dara ceann le luachanna don chomhshaol, rud a sháróidh an cinn réamhshocraithe.

    .
    ├── envs
+   │   ├── default
+   │   │   └── values
+   │   │       ├── backend.yaml
+   │   │       └── postgres.yaml
    │   ├── devel
    │   │   └── values
    │   │       ├── backend.yaml
    │   │       └── postgres.yaml
    │   └── production
    │       └── values
    │           ├── backend.yaml
    │           └── postgres.yaml
    ├── releases
    │   ├── backend.yaml
    │   └── postgres.yaml
    └── helmfile.yaml

releases/backend.yaml

releases:
  - name: backend
    labels:
      app: backend
    wait: true
    chart: private-helm-repo/backend
    version: {{ .Values.charts.versions.backend }}
    needs:
      - postgres
    values:
+     - envs/default/values/backend.yaml
      - envs/{{ .Environment.Name }}/values/backend.yaml

envs/default/values/backend.yaml

affinity:
  podAntiAffinity:
    preferredDuringSchedulingIgnoredDuringExecution:
    - weight: 1
      podAffinityTerm:
        labelSelector:
          matchExpressions:
          - key: app.kubernetes.io/name
            operator: In
            values:
            - backend
        topologyKey: "kubernetes.io/hostname"

Luachanna domhanda a shainiú le haghaidh cairteacha stiúrtha de gach eisiúint ag leibhéal an chomhshaoil

Ligean le rá a chruthú dúinn dul isteach i roinnt eisiúintí - d'fhéadfadh muid a shainiú de láimh do gach cairt hosts:, ach inár gcás tá an fearann ​​mar an gcéanna, mar sin cén fáth nach gcuirfeá in athróg dhomhanda éigin é agus go simplí in ionad a luach sna cairteacha? Chun seo a dhéanamh, ní mór an síneadh a bheith ag na comhaid sin le luachanna a theastaíonn uainn a pharaiméadarú .gotmpl, ionas go mbeidh a fhios ag helmfile gur gá é a reáchtáil tríd an inneall teimpléad.

    .
    ├── envs
    │   ├── default
    │   │   └── values
-   │   │       ├── backend.yaml
-   │   │       ├── postgres.yaml
+   │   │       ├── backend.yaml.gotmpl
+   │   │       └── postgres.yaml.gotmpl
    │   ├── devel
    │   │   └── values
    │   │       ├── backend.yaml
    │   │       └── postgres.yaml
    │   └── production
    │       └── values
    │           ├── backend.yaml
    │           └── postgres.yaml
    ├── releases
    │   ├── backend.yaml
    │   └── postgres.yaml
    └── helmfile.yaml

helmfile.yaml

  environments:
    devel:
      values:
      - charts:
          versions:
            backend: 1.1.0
      - apps:
        - postgres
        - backend
+     - global:
+         ingressDomain: k8s.devel.domain

    production:
      values:
      - charts:
          versions:
            backend: 1.0.5
      - apps:
        - backend
+     - global:
+         ingressDomain: production.domain
  ---
  bases:
  {{- range .Values.apps }}
    - releases/{{ . }}.yaml
  {{- end }}

envs/default/values/backend.yaml.gotmpl

ingress:
  enabled: true
  paths:
    - /api
  hosts:
    - {{ .Values.global.ingressDomain }}

envs/default/values/postgres.yaml.gotmpl

ingress:
  enabled: true
  paths:
    - /
  hosts:
    - postgres.{{ .Values.global.ingressDomain }}

An nóta

Ar ndóigh, is rud an-amhrasach é dul isteach sa chairt postgres, mar sin tugtar an t-alt seo go simplí mar shampla sféarúil i bhfolús agus ionas nach gcuirfear roinnt scaoileadh nua isteach san alt díreach ar mhaithe le cur síos a dhéanamh ar theacht isteach.

Rúin a chur in ionad luachanna comhshaoil

De réir analaí leis an sampla thuas, is féidir leat a chur in ionad cinn criptithe ag baint úsáide as rúin helm bríonna. In ionad ár gcomhad rúin féin a chruthú do gach scaoileadh, inar féidir linn luachanna criptithe a shainiú don chairt, is féidir linn a shainiú go simplí sa default.yaml.gotmpl scaoileadh na luachanna a thógfar ó na hathróga atá sainithe ag an leibhéal timpeallachta. Agus is féidir na luachanna nach gá dúinn a cheilt ó dhuine ar bith a ath-shainmhíniú go héasca sna luachanna scaoilte i dtimpeallacht ar leith.

    .
    ├── envs
    │   ├── default
    │   │   └── values
    │   │       ├── backend.yaml
    │   │       └── postgres.yaml
    │   ├── devel
    │   │   ├── values
    │   │   │   ├── backend.yaml
    │   │   │   └── postgres.yaml
+   │   │   └── secrets.yaml
    │   └── production
    │       ├── values
    │       │   ├── backend.yaml
    │       │   └── postgres.yaml
+   │       └── secrets.yaml
    ├── releases
    │   ├── backend.yaml
    │   └── postgres.yaml
    └── helmfile.yaml

helmfile.yaml

  environments:
    devel:
      values:
      - charts:
          versions:
            backend: 1.1.0
      - apps:
        - postgres
        - backend
      - global:
          ingressDomain: k8s.devel.domain
+     secrets:
+       - envs/devel/secrets.yaml

    production:
      values:
      - charts:
          versions:
            backend: 1.0.5
      - apps:
        - backend
      - global:
          ingressDomain: production.domain
+     secrets:
+       - envs/production/secrets.yaml
  ---
  bases:
  {{- range .Values.apps }}
    - releases/{{ . }}.yaml
  {{- end }}

envs/devel/secrets.yaml

secrets:
    elastic:
        password: ENC[AES256_GCM,data:hjCB,iv:Z1P6/6xBJgJoKLJ0UUVfqZ80o4L84jvZfM+uH9gBelc=,tag:dGqQlCZnLdRAGoJSj63rBQ==,type:int]
...

envs/production/secrets.yaml

secrets:
    elastic:
        password: ENC[AES256_GCM,data:ZB/VpTFk8f0=,iv:EA//oT1Cb5wNFigTDOz3nA80qD9UwTjK5cpUwLnEXjs=,tag:hMdIUaqLRA8zuFBd82bz6A==,type:str]
...

envs/default/values/backend.yaml.gotmpl

elasticsearch:
  host: elasticsearch
  port: 9200
  password: {{ .Values | getOrNil "secrets.elastic.password" | default "password" }}

envs/devel/values/backend.yaml

elasticsearch:
  host: elastic-0.devel.domain

envs/production/values/backend.yaml

elasticsearch:
  host: elastic-0.production.domain

An nóta

Dála an scéil, getOrNil - feidhm speisialta le haghaidh teimpléid dul i helmfile, a, fiú amháin más rud é .Values.secrets ní bheidh ann, ní bheidh caith earráid, ach beidh an toradh a cheadú ag baint úsáide as an fheidhm default ionad luach réamhshocraithe

Conclúid

Is cosúil go bhfuil na rudaí a gcuirtear síos orthu sách soiléir, ach tá faisnéis maidir le cur síos áisiúil ar imscaradh chuig roinnt timpeallachtaí ag baint úsáide as helmfile an-ghann, agus is breá liom IaC (Bonneagar-mar-Cód) agus ba mhaith liom cur síos soiléir a bheith agam ar staid an imscartha.

Mar fhocal scoir, ba mhaith liom a chur leis gur féidir, ar a seal, na hathróga don timpeallacht réamhshocraithe a pharaiméadar le hathróga timpeallachta an OS de rádala áirithe óna seolfar an t-imscaradh, agus dá bhrí sin timpeallachtaí dinimiciúla a fháil.

helmfile.yaml

environments:
  default:
    values:
    - global:
        clusterDomain: {{ env "CLUSTER_DOMAIN" | default "cluster.local" }}
        ingressDomain: {{ env "INGRESS_DOMAIN" }}

Foinse: will.com

Add a comment