IBM Cloud Docs
Creazione del pacchetto di applicazioni per il riutilizzo in più ambienti con Kustomize

Creazione del pacchetto di applicazioni per il riutilizzo in più ambienti con Kustomize

Nell'ambito di un'applicazione cloud-nativa a dodici fattori, si vuole mantenere la parità di dev-to-prod impostando una pipeline di sviluppo e consegna continua che utilizzi una fonte di codice di base comune e controllata dalla versione. Nei repository della base di codice, vengono memorizzati i file manifest di configurazione delle risorse di Kubernetes, spesso in formato YAML. È possibile utilizzare il progetto Kubernetes Kustomize sia per standardizzare che per personalizzare le distribuzioni in più ambienti.

Ad esempio, è possibile impostare un file YAML di base kustomization per dichiarare gli oggetti Kubernetes, come le distribuzioni e i PVC, condivisi negli ambienti di sviluppo, test e produzione. Successivamente, è possibile impostare file YAML kustomization separati, con configurazioni personalizzate per ciascun ambiente, ad esempio un numero maggiore di repliche in produzione rispetto a quelle di test. Questi file YAML personalizzati possono essere sovrapposti, o costruiti, sul file YAML di base condiviso, in modo da poter gestire ambienti per lo più identici, tranne che per alcune differenze di configurazione di sovrapposizione, controllate alla fonte. Per ulteriori informazioni su Kustomize, come il glossario e le FAQ, consultare i documenti di Kustomize.

Prima di cominciare:

Per configurare i file di configurazione con Kustomize:

  1. Installare lo strumento kustomize.

    • Per macOS, puoi utilizzare il gestore pacchetti brew.
      brew install kustomize
      
    • Se utilizzi Windows, puoi utilizzare il gestore pacchetti chocolatey.
      choco install kustomize
      
  2. Crea una directory per la tua applicazione in un sistema di controllo della versione, quale Git.

    git init ~/<my_app>
    
  3. Creare la struttura del repo per la cartella kustomize base directory, overlay e le directory degli ambienti, come staging e produzione. Nei passi successivi, configuri questi repository per l'utilizzo con kustomize.

    mkdir -p ~/<my_app>/base &&
    mkdir -p ~/<my_app>/overlay &&
    mkdir -p ~/<my_app>/overlay/staging &&
    mkdir -p ~/<my_app>/overlay/prod
    

    Struttura repo di esempio

    .
    ├── base
    └── overlay
        ├── prod
        └── staging
    
  4. Configura il repository base.

    1. Passa al repository di base.

      cd ~/<my_app>/base
      
    2. Crea un insieme iniziale di file YAML di configurazione Kubernetes per la distribuzione della tua applicazione. Potresti usare il wasliberty Esempio YAML per creare una distribuzione, un servizio, una mappa di configurazione e una richiesta di volume persistente.

    3. Creare un file kustomization che specifichi la configurazione di base da applicare a tutti gli ambienti. Il file kustomization deve includere l'elenco di file YAML di configurazione delle risorse di Kubernetes archiviate nello stesso repository base. Nel file kustomization, puoi anche aggiungere le configurazioni che si applicano a tutti i file YAML delle risorse nel repository di base, come ad esempio un prefisso o un suffisso aggiunto a tutti i nomi delle risorse, un'etichetta, lo spazio dei nomi esistente in cui tutte le risorse vengono create, i segreti, le mappe di configurazione e altro.

      apiVersion: kustomize.config.k8s.io/v1beta1
      kind: Kustomization
      namespace: wasliberty
      namePrefix: kustomtest-
      nameSuffix: -v2
      commonLabels:
        app: kustomized-wasliberty
      resources:
      - deployment.yaml
      - service.yaml
      - pvc.yaml
      - configmap.yaml
      - secret.yaml
      

      I nomi dei file YAML delle resources devono corrispondere a quelli degli altri file del repository base. Potresti includere più configurazioni nello stesso file, ma in questo esempio le configurazioni sono file distinti quali deployment.yaml, service.yaml e pvc.yaml.

    4. Genera i file YAML delle risorse con le configurazioni che hai definito nel file YAML di base kustomization. Le risorse vengono create combinando le configurazioni del file kustomization e dei file YAML delle risorse. I file YAML combinati sono restituiti in stdout nell'output. Utilizzare questo stesso comando per generare qualsiasi modifica successiva apporti al file YAMLkustomization, quale l'aggiunta di una etichetta.

      kustomize build
      
  5. Configura il tuo repository di sovrapposizioni con file YAML kustomization univoci per ciascuno dei tuoi ambienti, quali gli ambienti di preparazione e produzione.

    1. Nel repository di preparazione, crea un file kustomization.yaml. Aggiungi qualsiasi configurazione univoca per la preparazione, come ad esempio un'etichetta, una tag di immagine o un file YAML per un nuovo componente da testare.

      apiVersion: kustomize.config.k8s.io/v1beta1
      kind: Kustomization
      namePrefix: staging-
      commonLabels:
        env: staging
        owner: TeamA
      bases:
      - ../../base
      patchesStrategicMerge:
      - configmap.yaml
      - new_staging_resource.yaml
      resources:
      - new_staging_resource.yaml
      
      Comprendere i componenti YAML
      Componente Descrizione
      namePrefix Specificare un prefisso da allegare al nome di ogni risorsa che si vuole creare con il file di staging kustomization, come ad esempio staging-.
      commonLabels Aggiungi etichette univoche per gli oggetti di preparazione, quali l'ambiente di preparazione e il team responsabile.
      bases Aggiungere un percorso relativo a una directory o URL a un repo remoto che contiene un file di base kustomization. In questo esempio, il percorso relativo punta al file di base kustomization nel repo base, creato in precedenza. Questo campo è obbligatorio per una sovrapposizione kustomization.
      patchesStrategicMerge Elencare i file YAML di configurazione delle risorse che si desidera unire alla base kustomization. È necessario aggiungere questi file allo stesso repo del file kustomization, ad esempio overlay/staging. Questi file di configurazione delle risorse possono contenere piccole modifiche che vengono fuse nei file di configurazione di base omonimi come se si trattasse di una patch. La risorsa ottiene tutti i componenti presenti nel file di configurazione base, più eventuali componenti aggiuntivi specificati nel file di configurazione overlay. Se la configurazione è un nuovo file non presente nella base, è necessario aggiungere anche il nome del file nel campo resources.
      resources Elenca qualsiasi file YAML di configurazione delle risorse univoco per la repository di preparazione non incluso nella repository di base. Includere anche questi file nel campo patchesStrategicMerge e aggiungerli allo stesso repo del file kustomization, ad esempio overlay/staging.
      Altre configurazioni possibili Per ulteriori configurazioni da aggiungere al file, vedere la sezione Creare un file kustomization.
    2. Genera i tuoi file di configurazione della sovrapposizione di preparazione.

      kustomize build overlay/staging
      
    3. Ripeti questa procedura per creare il tuo file kustomization di sovrapposizione del prodotto e altri file YAML di configurazione. Ad esempio, potresti aumentare il numero di repliche del tuo file deployment.yaml, in modo che il tuo ambiente di produzione possa gestire più richieste degli utenti.

    4. Rivedi la struttura del tuo repository kustomize, al fine di accertarti che includa tutti i file di configurazione YAML di cui necessiti. La struttura potrebbe essere simile al seguente esempio.

      ├── base
      │   ├── configmap.yaml
      │   ├── deployment.yaml
      │   ├── kustomization.yaml
      │   ├── pvc.yaml
      │   ├── secret.yaml
      │   └── service.yaml
      └── overlay
          ├── prod
          │   ├── deployment.yaml
          │   ├── kustomization.yaml
          │   └── new_prod_resource.yaml
          └── staging
              ├── configmap.yaml
              ├── kustomization.yaml
              └── new_staging_resource.yaml
      
  6. Applica le risorse Kubernetes per l'ambiente che desideri distribuire. Il seguente esempio utilizza il repository di preparazione.

    1. Passa alla directory di sovrapposizione di preparazione. Se non hai creato risorse nel passo precedente, creale ora.
      cd overlay/staging && kustomize build
      
    2. Applica le risorse Kubernetes al tuo cluster. Includere l'opzione -k e la directory in cui si trova il file kustomization. Ad esempio, se ti trovi già nella directory di preparazione, includi ../staging per contrassegnare il percorso alla directory.
      kubectl apply -k ../staging
      
      Output di esempio
      configmap/staging-kustomtest-configmap-v2 created
      secret/staging-kustomtest-secret-v2 created
      service/staging-kustomtest-service-v2 created
      deployment.apps/staging-kustomtest-deployment-v2 created
      job.batch/staging-pi created
      persistentvolumeclaim/staging-kustomtest-pvc-v2 created
      
    3. Controlla che le modifiche univoche della preparazione siano state applicate. Ad esempio, se hai aggiunto il prefisso staging-, i pod e le altre risorse che hai creato possono includerlo nel loro nome.
      kubectl get -k ../staging
      
      Output di esempio
      NAME                                        DATA   AGE
      configmap/staging-kustomtest-configmap-v2   2      90s
      
      NAME                                  TYPE     DATA   AGE
      secret/staging-kustomtest-secret-v2   Opaque   2      90s
      
      NAME                                    TYPE       CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
      service/staging-kustomtest-service-v2   NodePort   172.21.xxx.xxx   <none>        9080:30200/TCP   90s
      
      NAME                                               READY   UP-TO-DATE   AVAILABLE   AGE
      deployment.apps/staging-kustomtest-deployment-v2   0/3     3            0           91s
      
      NAME                   COMPLETIONS   DURATION   AGE
      job.batch/staging-pi   1/1           41s        2m37s
      
      NAME                                              STATUS    VOLUME   CAPACITY   ACCESS MODES   STORAGECLASS       AGE
      persistentvolumeclaim/staging-kustomtest-pvc-v2   Pending                                      ibmc-file-bronze   90s
      
    4. Ripeti questa procedura per ciascun ambiente che vuoi generare.
  7. Facoltativo: ripulisci il tuo ambiente, rimuovendo tutte le risorse che hai applicato con Kustomize.

    kubectl delete -k <directory>
    

    Output di esempio

    configmap "staging-kustomtest-configmap-v2" deleted
    secret "staging-kustomtest-secret-v2" deleted
    service "staging-kustomtest-service-v2" deleted
    deployment.apps "staging-kustomtest-deployment-v2" deleted
    job.batch "staging-pi" deleted
    persistentvolumeclaim "staging-kustomtest-pvc-v2" deleted