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 durante la sincronizzazione 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. Analogamente, l'ordine di eliminazione è opposto per queste dipendenze implicite: gli spazi dei nomi vengono eliminati dopo gli oggetti nello spazio dei nomi e le CRD vengono eliminate 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 WordPress, in modo che il database sia applicato e 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 attivato le API RootSync e RepoSync, devi eseguire la migrazione dell'oggetto ConfigManagement.
Limitazione: le dipendenze devono trovarsi nella stessa fonte attendibile del loro elemento dipendente. Le dipendenze devono essere gestite dallo stesso oggetto RootSync o RepoSync degli 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 suddivide le risorse con 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), può essere necessario un po' di tempo prima che venga riconciliato dal relativo controller. Ad esempio, quando viene applicato un deployment, i pod sottostanti potrebbero non essere pronti immediatamente. Una volta che i pod di base sono pronti, il deployment viene riconciliato. Per tipi di oggetti diversi, Config Sync controlla diversi tipi di condizioni per verificare se un oggetto è stato riconciliato. Maggiori dettagli sono disponibili in sigs.k8s.io/cli-utils
Con l'annotazione depends-on
, la Config Sync non solo applica gli oggetti nell'ordine che preferisci, ma verifica anche che l'oggetto di dipendenza venga 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 successivo periodo di sincronizzazione. Puoi ignorare 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 il deployment dipendente, wordpress
.
Riferimenti a 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 dipendenza.NAMESPACE
: lo spazio dei nomi dell'oggetto di dipendenza basato sullo spazio dei nomi.KIND
: il tipo di oggetto di dipendenza. Questo campo è sensibile alle maiuscole. Ad esempio, utilizza "Pod" anziché "pod".NAME
: il nome dell'oggetto dipendenza.
Per gli oggetti del gruppo principale, viene 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
.