Mantieni tutto organizzato con le raccolte Salva e classifica i contenuti in base alle tue preferenze.

Configura cluster e oggetti con ambito cluster

Questa pagina spiega come configurare i cluster e gli oggetti con ambito cluster. Scopri di più sulla configurazione di spazi dei nomi e oggetti con ambito a livello di spazio dei nomi.

Nei repository non strutturati, puoi organizzare le config per i cluster e gli oggetti con ambito cluster nel repository in base alle tue esigenze. Se non includi un ClusterSelector nel repository, tutte le configurazioni degli oggetti con ambito cluster si applicano a ogni cluster registrato in Config Sync.

Nei repository gerarchici, tutte le configurazioni per cluster e oggetti con ambito cluster si trovano all'interno della directory cluster/ di un repository gerarchico. Se non includi un ClusterSelector nel repository, una configurazione in cluster/ viene applicata a ogni cluster registrato in Config Sync.

Limita i cluster interessati da una configurazione

In genere, Config Sync applica una configurazione a ogni cluster registrato. Se la configurazione si trova nella sottodirectory namespaces/ di un repository gerarchico, Config Sync crea prima lo spazio dei nomi all'interno di ogni cluster, quindi applica tutte le configurazioni ereditate a quello spazio.

Tuttavia, se devi applicare una configurazione a un sottoinsieme di cluster, puoi aggiungere un'annotazione o un ClusterSelector alle configurazioni. Per informazioni su come utilizzare queste funzionalità, consulta la pagina Utilizzare i ClusterSelector.

Configura le etichette del cluster

Puoi utilizzare una configurazione del cluster per configurare le etichette e le annotazioni di un cluster. Se utilizzi ClusterSelector, ogni cluster deve avere un set di etichette selezionabili da ClusterSelector. Sebbene tu possa etichettare manualmente i cluster, ti consigliamo di configurare le etichette utilizzando una configurazione del cluster.

Configura CustomResourceDefinizioni

Config Sync consente di sincronizzare le CustomResourceDefinizioni (CRD) con la stessa sincronizzazione di qualsiasi altra risorsa. Ci sono alcuni aspetti da tenere presenti durante la sincronizzazione dei CRD:

  • I CRD nei repository gerarchici, anche quando dichiarano una risorsa personalizzata con spazio dei nomi, devono essere inseriti nella directory cluster/.

  • Gli aggiornamenti ai CRD e alle risorse personalizzate corrispondenti non si verificano in alcun ordine prevedibile. Se modifichi i CRD e le risorse personalizzate corrispondenti nello stesso commit, non è previsto che gli aggiornamenti del CRD vengano eseguiti prima degli aggiornamenti delle risorse personalizzate. Questo potrebbe causare la segnalazione di un errore temporaneo di nomos status per un breve periodo di tempo, fino a quando sia la risorsa personalizzata che il CRD sono presenti nel cluster.

  • Config Sync non consente la rimozione di un CRD se quest'ultimo include risorse personalizzate nel repository. Per rimuovere un CRD, devi rimuovere anche la risorsa personalizzata. Ti consigliamo di rimuoverli entrambi nello stesso commit nel repository.

  • Puoi sincronizzare una risorsa personalizzata senza sincronizzare il suo CRD, a condizione che tu possa garantire che il CRD esista già nel cluster.

Configura un sottoinsieme di cluster

Puoi applicare una configurazione a un sottoinsieme di cluster con l'annotazione configsync.gke.io/cluster-name-selector. Puoi utilizzare questa annotazione per applicare una configurazione a un insieme di cluster, indicata dai nomi dei cluster. Il valore dell'annotazione è un elenco separato da virgole di nomi dei cluster di destinazione. Puoi applicare l'annotazione a oggetti con ambito a livello di cluster e di spazio dei nomi. Gli oggetti dello spazio dei nomi sono selezionati quando l'annotazione corrisponde al nome del cluster e quando viene selezionato anche lo spazio dei nomi a cui appartengono i cluster.

Seleziona un singolo cluster

La configurazione seguente crea un ruolo denominato namespace-reader che definisce un insieme di autorizzazioni per la lettura degli spazi dei nomi. È creata un'istanza di questo ruolo solo sul cluster con il nome cluster-1.

kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  namespace: my-namespace
  name: namespace-reader
  annotations:
    configsync.gke.io/cluster-name-selector: cluster-1
rules:
- apiGroups: [""]
  resources: ["namespaces"]
  verbs: ["get", "watch", "list"]

Seleziona un elenco di cluster

La configurazione seguente crea lo stesso ruolo dell'esempio precedente, ma questa istanza viene creata solo nei cluster con nome cluster-1, cluster-2 o cluster-3.

kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  namespace: my-namespace
  name: namespace-reader
  annotations:
    configsync.gke.io/cluster-name-selector: cluster-1,cluster-2,cluster-3
rules:
- apiGroups: [""]
  resources: ["namespaces"]
  verbs: ["get", "watch", "list"]

Usare i ClusterSelector

Un ClusterSelector è un tipo speciale di configurazione che utilizza labelSelectors di Kubernetes. Puoi utilizzare un ClusterSelector per limitare i cluster a cui si applica una determinata configurazione, in base alle etichette del cluster. Puoi anche usare ClusterSelector per limitare i cluster che creano un'istanza di un oggetto con ambito dello spazio dei nomi.

Come altri nodeSelector, anche i ClusterSelector operano utilizzando la logica AND. Poiché i ClusterSelector utilizzano la logica E, gli oggetti vengono selezionati solo quando corrispondono a tutte le etichette che definisci.

Una configurazione ClusterSelector non viene conservata in un cluster. Invece, fai riferimento a questa in un'altra configurazione utilizzando un'annotazione e la configurazione si applica solo ai cluster che corrispondono a ClusterSelector.

Prima di poter utilizzare ClusterSelector, ogni cluster deve avere un nome univoco. Puoi applicare le etichette manualmente a ciascun cluster, ma ti consigliamo di utilizzare una configurazione Cluster.

A questo punto, crea il ClusterSelector e esegui il riferimento in un'altra configurazione.

Aggiungi etichette a un cluster

Per utilizzare ClusterSelector, ogni cluster deve avere un insieme di etichette selezionabili. Puoi etichettare i cluster manualmente, ma è consigliabile utilizzare una configurazione cluster per ogni cluster. Nei repository non strutturati, le configurazioni dei cluster possono essere archiviate arbitrariamente nella directory di sincronizzazione o nelle sue directory discendenti. Nei repository gerarchici, le configurazioni dei cluster vengono archiviate nella directory clusterregistry/ del tuo repository Git.

Il campo clusterName del file config-management.yaml deve corrispondere al campo metadata.name di almeno una delle configurazioni del cluster.

La seguente configurazione di cluster di esempio dichiara che cluster-2 ha le etichette environment: prod e location: central.

kind: Cluster
apiVersion: clusterregistry.k8s.io/v1alpha1
metadata:
  name: cluster-2
  labels:
    environment: prod
    location: central

Puoi anche applicare le annotazioni utilizzando una configurazione del cluster.

Crea un ClusterSelector

Un ClusterSelector seleziona solo i cluster con una determinata etichetta o combinazione di etichette. Nei repository non strutturati, i ClusterSelector possono essere archiviati in modo arbitrario nella directory di sincronizzazione o nelle directory discendenti. Nei repository gerarchici, i ClusterSelector vengono archiviati nella directory clusterregistry/ di livello superiore nel repository.

Il seguente ClusterSelector seleziona solo i cluster con l'etichetta environment: prod.

kind: ClusterSelector
apiVersion: configmanagement.gke.io/v1
metadata:
  name: selector-env-prod
spec:
  selector:
    matchLabels:
      environment: prod

Il seguente ClusterSelector seleziona eventuali cluster con le etichette location: central o location: west.

kind: ClusterSelector
apiVersion: configmanagement.gke.io/v1
metadata:
  name: selector-central-or-west
spec:
  selector:
    matchExpressions:
      - key: location
        operator: In
        values:
        - central
        - west 

Un ClusterSelector non ha effetto finché non lo fare riferimento in un'altra configurazione.

Riferimento a un ClusterSelector

Per fare riferimento a un ClusterSelector in un'altra configurazione, imposta l'annotazione configmanagement.gke.io/cluster-selector: CLUSTERSELECTOR-NAME.

La configurazione seguente crea un ClusterRole denominato namespace-reader, che definisce un insieme di autorizzazioni per la lettura degli spazi dei nomi. Questo ClusterRole viene identificato solo nei cluster che corrispondono a ClusterSelector di selector-env-prod.

kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: namespace-reader
  annotations:
    configmanagement.gke.io/cluster-selector: selector-env-prod
rules:
- apiGroups: [""]
  resources: ["namespaces"]
  verbs: ["get", "watch", "list"]

Limita i cluster interessati dalla configurazione con ambito dello spazio dei nomi

Per impostazione predefinita, Config Sync applica le configurazioni ereditate da uno spazio dei nomi a quest'ultimo in ogni cluster in cui esiste. Puoi utilizzare un ClusterSelector per applicare la configurazione solo a un sottoinsieme di questi cluster.

Ad esempio, puoi configurare i cluster in modo diverso a seconda della località geografica o dei clienti. Questa configurazione può essere utile per la localizzazione o per la conformità legale. Gli esempi in questa sezione applicano configurazioni specifiche per le impostazioni internazionali solo ai cluster con l'etichetta location: france.

La seguente configurazione del cluster aggiunge un'etichetta location: france a un cluster denominato cluster-1:

kind: Cluster
apiVersion: clusterregistry.k8s.io/v1alpha1
metadata:
  name: cluster-1
  labels:
    location: france

Puoi etichettare manualmente ogni cluster pertinente, ma questo processo crea spazio per errori e non è consigliato.

Creare una configurazione ClusterSelector che faccia riferimento alle etichette che vuoi selezionare. Il seguente ClusterConfig seleziona l'etichetta location: france:

kind: ClusterSelector
apiVersion: configmanagement.gke.io/v1
metadata:
  name: selector-location-france
spec:
  selector:
    matchLabels:
      location: france

Un ClusterSelector non ha effetto finché non vi fai riferimento in un'altra configurazione. La seguente configurazione RoleBinding seleziona solo i cluster che corrispondono a selector-location-franceClusterSelector. Questa configurazione potrebbe essere utile, ad esempio, se una linea guida sulla conformità consentiva a un determinato account di servizio di visualizzare le informazioni sui cluster nella regione specificata.

kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: viewers
  annotations:
    configmanagement.gke.io/cluster-selector: selector-location-france
subjects:
- kind: Group
  name: system:serviceaccounts:foo
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: ClusterRole
  name: view
  apiGroup: rbac.authorization.k8s.io

Se inserisci questa configurazione in uno spazio dei nomi astratto o in una directory, come namespaces/eng, viene applicata agli spazi dei nomi che la ereditano, ma solo nei cluster con etichetta location: france.

Passaggi successivi