Dichiarare le dipendenze tra gli oggetti risorsa

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

Config Sync rileva automaticamente le dipendenze implicite tra oggetti specifici quando li sincronizza con il cluster. Ad esempio, gli oggetti Namespace vengono sempre applicati prima di qualsiasi oggetto in questi spazi dei nomi e un oggetto CustomResourceDefinition (CRD) viene sempre applicato prima di qualsiasi risorsa personalizzata di questo tipo. Allo stesso modo, l'ordinamento di eliminazione è inverso per queste dipendenze implicite: gli spazi dei nomi vengono eliminati dopo gli oggetti in quello spazio dei nomi e i CRD vengono eliminati dopo le risorse personalizzate di quel tipo.

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

Requisiti

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

  • Limitazione: le dipendenze devono trovarsi nella stessa origine attendibile di quello da cui dipendono. Le dipendenze devono essere gestite dallo stesso oggetto RootSync o RepoSync dei relativi elementi dipendenti, il che garantisce che tutte le risorse si trovino nello stesso ResourceGroup.

Applica gruppo

Quando sincronizza le risorse con il cluster, Config Sync divide le risorse che hanno dipendenze dirette o indirette in diversi gruppi di applicazione. Un gruppo di applicazione è costituito solo da risorse senza dipendenze dirette o indirette tra loro. Il gruppo di applicazione in cui le risorse non hanno dipendenze verrà applicato per primo.

Attivazione e riconciliazione

Quando un oggetto viene attivato (applicato o eliminato), il controller potrebbe impiegare un po' di tempo per riconciliarlo. Ad esempio, quando viene applicato un deployment, i pod sottostanti potrebbero non essere pronti immediatamente. Una volta pronti i pod sottostanti, il deployment viene riconciliato. Per diversi tipi di oggetti, Config Sync controlla diversi tipi di condizioni per verificare se un oggetto è riconciliato. Ulteriori dettagli sono disponibili in sigs.k8s.io/cli-utils

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

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

Aggiungere l'annotazione depends-on a un oggetto

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

Per l'esempio di WordPress, l'annotazione nel deployment di WordPress è simile alla seguente:

# 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 l'elemento dipendente, il deployment wordpress.

Riferimenti agli 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 di dipendenza.
    • NAMESPACE: lo spazio dei nomi dell'oggetto di dipendenza con ambito di spazio dei nomi.
    • KIND: il tipo di oggetto di dipendenza. Questo campo distingue tra maiuscole e minuscole. Ad esempio, utilizza "Pod" anziché "pod".
    • NAME: il nome dell'oggetto di dipendenza.

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

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