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 quando li sincronizzi con il cluster. Ad esempio, gli oggetti Spazio dei nomi vengono sempre applicati prima di qualsiasi in quegli spazi dei nomi, mentre un oggetto CustomResourceDefinition (CRD) viene sempre applicato viene applicata qualsiasi risorsa personalizzata di questo tipo. Analogamente, l'ordinamento di eliminazione invertire le dipendenze implicite: gli spazi dei nomi vengono eliminati dopo che gli oggetti nello 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 lo StatefulSet MySQL prima che
Deployment Wordpress, in modo che il database venga applicato e pronto prima
Si avvia Wordpress.
Requisiti
Le API RootSync e RepoSync devono essere abilitate. Se hai installato manualmente Config Sync utilizzando kubectl e non hai API RootSync e RepoSync abilitate, è necessario eseguire la migrazione dell'oggetto ConfigManagement.
Limitazione: le dipendenze devono essere riportate nella stessa fonte di riferimento utilizzata ai dipendenti. Le dipendenze devono essere gestite dallo stesso sistema RootSync o RepoSync come relativi dipendenti, per fare in modo che tutte le risorse siano nello stesso modo ResourceGroup.
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 applicazioni è composto 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.
Attivazione e riconciliazione
Quando un oggetto viene attivato (applicato o eliminato), l'oggetto può richiedere del tempo a essere riconciliati con il titolare. Ad esempio, quando viene applicato un deployment, i pod sottostanti potrebbero non essere immediatamente pronti. Dopo che i pod sottostanti sono pronti, il deployment è riconciliato. Per diversi tipi di oggetti, Config Sync controlla diversi tipi di condizioni per eseguire la verifica se un oggetto viene riconciliato. Puoi trovare ulteriori dettagli in sigs.k8s.io/cli-utils
Con l'annotazione depends-on
, Config Sync non applica solo gli oggetti nel
dell'ordine desiderato, verifica anche
che l'oggetto di dipendenza venga riconciliato prima dell'applicazione dell'oggetto dipendente.
Se l'oggetto dipendente non viene riconciliato entro il timeout predefinito di 5 minuti, Config Sync non applicherà l'oggetto dipendente fino al successivo periodo di sincronizzazione. Puoi ignorare il timeout predefinito della riconciliazione 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 fa riferimento
oggetti di dipendenza.
Per l'esempio Wordpress, l'annotazione nel deployment Wordpress è simile al 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 modello dipendente,
wordpress
Deployment.
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 dipendenza.NAMESPACE
: lo spazio dei nomi dell'ambito con ambito dello spazio dei nomi un oggetto dipendenza.KIND
: il tipo di oggetto di dipendenza. Questo campo fa distinzione tra maiuscole e minuscole. Ad esempio, utilizza "Pod" anziché "pod".NAME
: il nome dell'oggetto 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
.