Factoring out common components when kustomizing kubernetes manifests

Estoy usando kustomize binario para crear archivos yaml de implementación de kubernetes específicos.

{Version:kustomize/v3.8.1 GitCommit:0b359d0ef0272e6545eda0e99aacd63aef99c4d0 BuildDate:2020-07-16T00:58:46Z GoOs:linux GoArch:amd64}

Aquí está mi estructura de directorio:

overlays
├── parser
│   ├── dev
│   │   └── nonsec
│   │       ├── dev-patches-parsers-tests.yaml
│   │       ├── dev-patches-parsers.yaml
│   │       └── kustomization.yaml
│   ├── prod
│   │   ├── nonsec
│   │   │   ├── kustomization.yaml
│   │   │   ├── prod-patches-parsers-tests.yaml
│   │   │   └── prod-patches-parsers.yaml
│   │   ├── sec
│   │   │   ├── kustomization.yaml
│   │   │   ├── prod-patches-parsers-sec-tests.yaml
│   │   │   ├── prod-patches-parsers-sec.yaml
│   │   │   ├── prod-patches-parsers-tests.yaml
│   │   │   └── prod-patches-parsers.yaml
│   │   └── v3r
│   │       └── empty.txt
│   ├── stage

│   └── suit

Observe que los overlays/parser/prod/nonsec y /overlays/parser/prod/sec contienen dos conjuntos de archivos de parche idénticos. Quiero tener en cuenta los archivos comunes y empujarlos a un nivel bajo el prod - No quiero copias de los mismos parches en varios dirs. Quiero que no segundos y sec construya para usar el mismo conjunto de púas prod pero no sé cómo hacerlo con kustomize. He intentado ponerlos en el dir arriba, pero kustomize no permite ninguna referencia a los archivos de parche en los directorios anteriores - que es lo que necesito hacer.

¿Cómo puedo evitar la duplicación de estos archivos prod-patches*.yaml en múltiples dirs?!

Aquí está mi kustomización no ssec. Yaml

# Use this as the base code
resources:
  - ../../../../base

# Decorate the base code with the following components
components:
  - ../../../../components/common-all
  - ../../../../components/common-prod
  - ../../../../components/parser

# Then finally, patch the results from above with this:
patchesStrategicMerge:
 - prod-patches-parsers.yaml
 - prod-patches-parsers-tests.yaml

Y esta es mi sec kustomization. Yaml:

# Use this as the base code
resources:
  - ../../../../base

# Decorate the base code with the following components
components:
  - ../../../../components/common-all
  - ../../../../components/common-prod
  - ../../../../components/parser

# Then finally, patch the results from above with this:
patchesStrategicMerge:
 - prod-patches-parsers.yaml
 - prod-patches-parsers-tests.yaml
 - prod-patches-parsers-sec.yaml
 - prod-patches-parsers-sec-tests.yaml 

Pregunta hecha hace 3 años, 5 meses, 5 días - Por scriptsorcererf493


3 Respuestas:

  • Podrías hacer lo siguiente:

    overlays
    ├── parser
    │   ├── dev
    │   │   └── nonsec
    │   │       ├── dev-patches-parsers-tests.yaml
    │   │       ├── dev-patches-parsers.yaml
    │   │       └── kustomization.yaml
    │   ├── prod
    │   │   ├── kustomization.yaml
    │   │   ├── prod-patches-parsers-tests.yaml
    │   │   ├── prod-patches-parsers.yaml
    │   │   ├── nonsec
    │   │   │   └── kustomization.yaml
    │   │   ├── sec
    │   │   │   ├── kustomization.yaml
    │   │   │   ├── prod-patches-parsers-sec-tests.yaml
    │   │   │   └── prod-patches-parsers-sec.yaml
    │   │   └── v3r
    │   │       └── empty.txt
    

    con overlays/parser/prod/kustomization.yaml:

    resources:
      - ../../../../base
      - ../../../../components/common-all
      - ../../../../components/common-prod
      - ../../../../components/parser
    
    patchesStrategicMerge:
      - prod-patches-parsers.yaml
      - prod-patches-parsers-tests.yaml
    

    overlays/parser/prod/nonsec/kustomization.yaml:

    resources:
      - ../
    

    overlays/parser/prod/sec/kustomization.yaml:

    resources:
      - ../
    
    patchesStrategicMerge:
      - prod-patches-parsers.yaml
      - prod-patches-parsers-tests.yaml
    

    La estructura general del directorio es un poco compleja y es posible que desee simplificarlo o aplanarlo.

    Respondida el Dec 17, 2020 a las 23:16 - por codejuggernaut

    Votos positivos: 0 | Votos negativos: 0

  • Para evitar la duplicación de los archivos prod-patches<strong>.yaml en múltiples directorios, puedes utilizar los recursos compartidos en kustomize. Aquí te muestro cómo puedes organizar tus archivos para lograrlo:

    • Crea un nuevo directorio en el nivel `overlays/parser` llamado `base` (o cualquier otro nombre que prefieras).
    • Mueve los archivos comunes `prod-patches-parsers.yaml` y `prod-patches-parsers-tests.yaml` a este nuevo directorio `base`.
    • Dentro de los directorios `nonsec` y `sec`, modifica los archivos `kustomization.yaml` de la siguiente manera:

    En el directorio nonsec:

    yaml
    resources:
    
    • ../../../base
    patchesStrategicMerge:
    • dev-patches-parsers.yaml
    • dev-patches-parsers-tests.yaml

    En el directorio sec:

    yaml
    resources:
    
    • ../../../base
    patchesStrategicMerge:
    • prod-patches-parsers-sec.yaml
    • prod-patches-parsers-sec-tests.yaml
    • prod-patches-parsers.yaml
    • prod-patches-parsers-tests.yaml

    De esta manera, los archivos comunes estarán en el directorio base y serán referenciados desde los directorios nonsec y sec, evitando la duplicación de los mismos.

    Después de realizar estos cambios, puedes ajustar tus recursos en kustomization.yaml para asegurarte de estar referenciando los archivos de la ubicación correcta.

    Con esta organización, los archivos prod-patches-parsers</strong>.yaml serán compartidos y utilizados por ambos directorios nonsec y sec, eliminando la duplicación innecesaria de código.

    Respondida el Dec 18, 2020 a las 23:15 - por Gpt

    Votos positivos: 0 | Votos negativos: 0

  • Paso 1: Crea un directorio de parches comunes

    Crea un directorio llamado common-patches dentro del directorio overlays/parser/. Mueve los archivos de parche duplicados (prod-patches-parsers.yaml y prod-patches-parsers-tests.yaml) a este directorio nuevo.

    Paso 2: Modifica los archivos de kustomización

    En los archivos kustomization.yaml de overlays/parser/prod/nonsec y overlays/parser/prod/sec, reemplaza las referencias a los archivos de parche duplicados con la siguiente referencia:

    
    patchesStrategicMerge:
        
    • ../../common-patches/prod-patches-parsers.yaml
    • ../../common-patches/prod-patches-parsers-tests.yaml

    Paso 3: Modifica el archivo kustomization.yaml del directorio raíz

    Agrega el directorio common-patches a la ruta de búsqueda de parches en el archivo kustomization.yaml del directorio raíz (overlays/parser/). Esto permitirá que los parches comunes sean aplicados tanto por las implementaciones nosec como por las sec.

    
    patchesStrategicMerge:
        
    • ../../common-patches/prod-patches-parsers-sec.yaml
    • ../../common-patches/prod-patches-parsers-sec-tests.yaml

    Estructura de directorio final:

    
    overlays
    ├── parser
    │   ├── common-patches
    │   │   ├── prod-patches-parsers.yaml
    │   │   ├── prod-patches-parsers-tests.yaml
    │   ├── dev
    │   │   └── nonsec
    │   │       ├── dev-patches-parsers-tests.yaml
    │   │       └── dev-patches-parsers.yaml
    │   │       └── kustomization.yaml
    │   ├── prod
    │   │   ├── nonsec
    │   │   │   └── kustomization.yaml
    │   │   ├── sec
    │   │   │   └── kustomization.yaml
    │   │   └── v3r
    │   │       └── empty.txt
    │   ├── stage
    
    │   └── suit
    

    Beneficios de esta solución:

    Evita la duplicación de archivos de parche. Mantiene la modularidad y la reutilización. * Simplifica el mantenimiento y las actualizaciones.

    Respondida el Dec 18, 2020 a las 23:27 - por Gemini

    Votos positivos: 0 | Votos negativos: 0