Dichiara le dipendenze tra gli oggetti delle risorse

Questa guida illustra come funzionano le dipendenze in Config Sync e come specificarle.

Config Sync rileva automaticamente dipendenze implicite tra oggetti specifici quando li sincronizza con il cluster. Ad esempio, gli oggetti Spazio dei nomi 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'ordine di eliminazione è inverso per queste dipendenze implicite: gli spazi dei nomi vengono eliminati dopo gli oggetti nello spazio dei nomi, mentre 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 MySQL StatefulSet prima del deployment di WordPress, in modo che il database venga applicato e pronto prima dell'avvio di WordPress.

Requisiti

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

  • Le dipendenze devono trovarsi nella stessa fonte attendibile delle dipendenze 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 di applicazione è costituito solo da risorse senza dipendenze dirette o indirette l'una dall'altra. Il gruppo di applicazione in cui le risorse non hanno dipendenze verrà applicato per primo.

Attuazione e riconciliazione

Quando un oggetto viene attivato (applicato o eliminato), potrebbe essere necessario un po' di tempo prima che il controller venga riconciliato con l'oggetto. Ad esempio, quando viene applicato un deployment, i pod sottostanti potrebbero non essere pronti immediatamente. 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. Ulteriori 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 sia stato riconciliato prima di applicare l'oggetto dipendente.

Se l'oggetto dipendenza non viene riconciliato entro il timeout di riconciliazione predefinito di 5 minuti, Config Sync non applicherà l'oggetto dipendente fino al successivo periodo di sincronizzazione. 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 sull'oggetto dipendente con un valore che faccia riferimento agli oggetti delle dipendenze.

Per l'esempio di Wordpress, l'annotazione nel deployment di Wordpress è la 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, prima applica la dipendenza, ovvero l'oggetto wordpress-mysql StatefulSet. Una volta riconciliata la dipendenza, Config Sync applica il deployment dipendente 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 delle dipendenze.
    • NAMESPACE: lo spazio dei nomi dell'oggetto delle dipendenze con ambito dello spazio dei nomi.
    • KIND: il tipo di oggetto delle dipendenze. Questo campo è sensibile alle maiuscole. Ad esempio, usa "Pod" anziché "pod".
    • NAME: il nome dell'oggetto delle dipendenze.

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

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