Mantieni tutto organizzato con le raccolte Salva e classifica i contenuti in base alle tue preferenze.

Dichiarare le dipendenze tra gli oggetti delle risorse

Questa guida ti insegna come funzionano le dipendenze in Config Sync e come specificare le tue dipendenze.

Config Sync rileva automaticamente le dipendenze implicite tra oggetti specifici durante la sincronizzazione nel cluster. Ad esempio, gli oggetti Namespace vengono sempre applicati prima di qualsiasi oggetto in questi spazi dei nomi e viene sempre applicato un oggetto CustomResourceDefinition (CRD) prima dell'applicazione di qualsiasi risorsa personalizzata di questo tipo. Analogamente, l'ordinamento di eliminazione è inverso per le dipendenze implicite: gli spazi dei nomi vengono eliminati dopo gli oggetti nello spazio dei nomi, mentre i CRD vengono eliminati dopo le risorse personalizzate del tipo in questione.

Puoi anche impostare dipendenze esplicite utilizzando l'annotazione depends-on. Ad esempio, potresti volere che il tuo StatefulSet MySQL si avvii prima del deployment di WordPress, in modo che il tuo database venga applicato e pronto prima dell'avvio di WordPress.

Requisiti

  • Le API RootSync e RepoSync devono essere abilitate. Se hai installato Config Sync manualmente con kubectl e non hai abilitato le API RootSync e RepoSync, devi eseguire la migrazione dell'oggetto ConfigManagement.

  • Le dipendenze devono trovarsi nello stesso repository Git del dipendente e devono essere gestite dallo stesso oggetto RootSync o RepoSync.

Applica gruppo

Durante la sincronizzazione delle risorse con il cluster, Config Sync suddivide le risorse con dipendenze dirette o indirette in gruppi di applicazione diversi. Un gruppo applica è costituito solo da risorse senza dipendenze dirette o indirette. Il gruppo in cui le risorse non hanno dipendenze verranno applicate per prime.

Attuazione e riconciliazione

Quando un oggetto viene attivato (applicato o eliminato), la sua riconciliazione con il controller può richiedere un po' di tempo. Ad esempio, quando viene applicato un deployment, i pod sottostanti potrebbero non essere immediatamente pronti. Quando i pod sottostanti sono pronti, il deployment viene riconciliato. Per diversi tipi di oggetti, Config Sync controlla diversi tipi di condizioni per verificare se un oggetto è riconciliato. Maggiori dettagli sono disponibili in sigs.k8s.io/cli-utils

Con l'annotazione depends-on, Config Sync non solo applica gli oggetti nell'ordine che preferisci, ma verifica anche che l'oggetto delle dipendenze venga riconciliato prima di applicare l'oggetto dipendente.

Se l'oggetto delle dipendenze non viene riconciliato entro il timeout predefinito di 5 minuti, Config Sync non applicherà l'oggetto dipendente fino al periodo di sincronizzazione successivo. Puoi ignorare il timeout di riconciliazione predefinito impostando spec.override.reconcileTimeout.

Aggiungi l'annotazione depends-on a un oggetto

Per specificare una dipendenza, aggiungi l'annotazione config.kubernetes.io/depends-on nell'oggetto dipendente con un valore che fa riferimento agli oggetti di dipendenza.

Per l'esempio di Wordpress, l'annotazione nel deployment di Wordpress ha il seguente aspetto:

# deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: wordpress
  namespace: default
  labels:
    app: wordpress
  annotations:
    config.kubernetes.io/depends-on: apps/namespaces/default/StatefulSet/wordpress-mysql

Quando Config Sync applica gli oggetti, applica prima la dipendenza, l'oggetto wordpress-mysql StatefulSet. Una volta riconciliata la dipendenza, Config Sync applica il deployment wordpress dipendente.

Riferimenti degli oggetti

I riferimenti agli oggetti utilizzano la seguente sintassi:

  • Per gli oggetti con spazio dei nomi:

    GROUP/namespaces/NAMESPACE/KIND/NAME
    
  • Per gli oggetti con ambito cluster:

    GROUP/KIND/NAME
    

    Sostituisci quanto segue:

    • GROUP: il gruppo dell'oggetto della dipendenza.
    • NAMESPACE: lo spazio dei nomi dell'oggetto della dipendenza con ambito dello spazio dei nomi.
    • KIND: il tipo di oggetto delle dipendenze. Questo campo distingue tra maiuscole e minuscole. Ad esempio, utilizza "Pod" anziché "pod".
    • NAME: il nome dell'oggetto della dipendenza.

Per gli oggetti nel gruppo principale, viene invece usata la stringa vuota, ad esempio /namespaces/test/Pod/pod-a.

Utilizza , per separare più riferimenti di oggetti, ad esempio /namespaces/test/Pod/pod-a,/namespaces/test/Pod/pod-b.