Dichiara le dipendenze tra gli oggetti delle risorse

Questa guida 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 con il cluster. Ad esempio, gli oggetti Namespace vengono sempre applicati prima di tutti gli oggetti in tali spazi dei nomi, mentre un oggetto CustomResourceDefinition (CRD) viene sempre applicato prima di applicare 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 in tale 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 disponibile in Config Sync versione 1.11.0 o successiva. Ad esempio, potresti voler avviare MySQL StatefulSet prima del deployment di WordPress, in modo che il database venga applicato e sia pronto prima di avviare Wordpress.

Requisiti

  • Le API RootSync e RepoSync devono essere attivate. Se hai installato Config Sync manualmente utilizzando 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 di quella dipendente ed essere gestite dallo stesso oggetto RootSync o RepoSync.

Attuazione e riconciliazione

Quando un oggetto viene attivato (applicato o troncato), può essere necessario un po' di tempo perché l'oggetto venga riconciliato dal controller. 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 tipi di oggetti diversi, Config Sync controlla diversi tipi di condizioni per verificare se un oggetto è riconciliato. Ulteriori dettagli sono disponibili all'indirizzo 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 dipendenza sia riconciliato prima di applicare l'oggetto dipendente.

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 fa riferimento agli oggetti dipepency.

Per l'esempio di WordPress, l'annotazione in Wordpress Deployment appare come segue:

# 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 dipendente, wordpress Deployment.

Riferimenti a oggetti

La sintassi dei riferimenti agli oggetti è la seguente:

  • Per gli oggetti con spazio dei nomi:

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

    GROUP/KIND/NAME
    

    Sostituisci quanto segue:

    • GROUP: il gruppo di oggetti di dipendenza.
    • NAMESPACE: lo spazio dei nomi dell'oggetto dependency con ambito dello spazio dei nomi.
    • KIND: il tipo di oggetto di dipendenza. Questo campo fa distinzione tra maiuscole e minuscole. Ad esempio, utilizza "Pod"; invece di "Pod".
    • NAME: nome dell'oggetto di dipendenza.

Per gli oggetti nel gruppo principale, viene utilizzata al suo posto 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.