Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Si applica a: ✔️ Gestione flotta con un cluster hub
Il posizionamento intelligente delle risorse di Azure Kubernetes Fleet Manager può distribuire la stessa risorsa in più cluster all’interno di una flotta. Spesso è necessario modificare la configurazione delle risorse per applicare regole relative al comportamento in ambienti diversi (sviluppo, test, produzione). A questo scopo, Gestione flotta fornisce override delle risorse, che offrono una funzionalità concettualmente simile al modo in cui vengono usati i modelli Helm e le patch Kustomize.
La modifica di una configurazione delle risorse è utile in situazioni come:
- Si desidera usare un
ClusterRoledenominatosecret-readerin tutti i cluster, ma con un set di azioni consentite più limitato per il ruolo nei cluster di produzione. - Si desidera usare lo stesso
Deploymentin tutti i cluster, ma usare un'immagine del container o una porta diversa nei cluster di produzione.
Questo articolo mostra come creare override per le risorse distribuite dal posizionamento delle risorse di Gestione flotta.
Azure Kubernetes Fleet Manager supporta due ambiti per gli override:
-
Ambito cluster: usare
ClusterResourceOverrideconClusterResourcePlacementper gli amministratori della flotta che gestiscono le modifiche a livello di infrastruttura. -
Con ambito spazio dei nomi: usare
ResourceOverrideconResourcePlacementper i team delle applicazioni che gestiscono le distribuzioni negli spazi dei nomi specifici.
Selezionare l'ambito più applicabile dalle scelte relative al tipo di ambito nella parte superiore dell'articolo.
Override delle risorse con ambito cluster
Un oggetto ClusterResourceOverride ha le proprietà seguenti:
-
clusterResourceSelectors: specifica il set di risorse del cluster selezionato per l'override. -
policy: specifica il set di regole da applicare alle risorse cluster selezionate.
Annotazioni
Policy le definizioni sono le stesse per le risorse a livello di cluster e di spazio dei nomi.
L'esempio ClusterRole seguente denominato secret-reader illustra come ClusterResourceOverride funziona.
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: secret-reader
rules:
- apiGroups: [""]
resources: ["secrets"]
verbs: ["get", "watch", "list"]
Selezione delle risorse del cluster
Un ClusterResourceOverride può includere uno o più clusterResourceSelector per scegliere di quali risorse eseguire l'override. Ognuno clusterResourceSelector supporta i campi seguenti.
-
group: gruppo API della risorsa. -
version: versione API della risorsa. -
kind: tipo di risorsa. -
name: nome della risorsa.
Annotazioni
Se si seleziona un namespace in ClusterResourceSelector, l'override si applica a tutte le risorse nel namespace.
Usando l'esempio ClusterRoleviene illustrato come selezionarlo in un oggetto ClusterResourceOverride.
apiVersion: placement.kubernetes-fleet.io/v1
kind: ClusterResourceOverride
metadata:
name: example-cro
spec:
clusterResourceSelectors:
- group: rbac.authorization.k8s.io
kind: ClusterRole
version: v1
name: secret-reader
Sovrascrittura delle risorse con ambito namespace
Un oggetto ResourceOverride ha le proprietà seguenti:
-
resourceSelectors: specifica il set di risorse selezionate per l'override. -
policy: specifica il set di regole da applicare alle risorse selezionate.
Annotazioni
Policy le definizioni sono le stesse per le risorse a livello di cluster e di spazio dei nomi.
Per illustrare il funzionamento ResourceOverride , usare l'esempio Deployment seguente denominato nginx-sample.
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-sample
namespace: nginx-demo
spec:
replicas: 2
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.25
ports:
- containerPort: 80
Selezione delle risorse dello spazio dei nomi
Un ResourceOverride può includere uno o più resourceSelector per scegliere di quali risorse eseguire l'override. Ognuno resourceSelector supporta i campi seguenti:
-
group: gruppo API della risorsa. -
version: versione API della risorsa. -
kind: tipo di risorsa. -
name: nome della risorsa.
Si determina il namespace della risorsa da sovrascrivere specificando il set namespace nel metadata del ResourceOverride.
Usando l'esempio Deployment, è possibile vedere come selezionarlo in un oggetto ResourceOverride.
apiVersion: placement.kubernetes-fleet.io/v1
kind: ResourceOverride
metadata:
name: example-resource-override
namespace: nginx-demo
spec:
resourceSelectors:
- group: apps
kind: Deployment
version: v1
name: nginx-sample
Importante
- Se si seleziona un namespace in
resourceSelector(kind: Namespace), l'override si applica a tutte le risorse nel namespace. - Il
ResourceOverridedeve trovarsi nello stesso spazio dei nomi della risorsa da sovrascrivere.
Ora che è stata selezionata la risorsa, si esaminerà come configurare l'override usando un oggetto policy.
Policy
Un policy oggetto è costituito da un set di overrideRules che specificano le modifiche da applicare alle risorse selezionate. Ognuno overrideRules supporta i campi seguenti:
-
clusterSelector: specifica il set di cluster a cui si applica la regola di override. -
jsonPatchOverrides: specifica le modifiche da applicare alle risorse selezionate.
Selettore cluster
Usare il clusterSelector campo in overrideRules per specificare i cluster a cui si applica la regola.
clusterSelector Supporta il campo seguente:
-
clusterSelectorTerms: elenco di termini che specificano i criteri per la selezione dei cluster. Ogni termine include un campolabelSelectorche definisce un set di etichette da corrispondere.
Importante
Solo labelSelector è supportato nel campo clusterSelectorTerms.
Override di patch JSON
Usare jsonPatchOverrides in overrideRules per specificare le modifiche da applicare alle risorse selezionate. La JsonPatch proprietà supporta i campi seguenti:
op: operazione da eseguire. Le operazioni supportate includono:-
add: aggiunge un nuovo valore al percorso specificato. -
remove: rimuove il valore nel percorso specificato. -
replace: sostituisce il valore in corrispondenza del percorso specificato.
-
path: percorso del campo da modificare. Le linee guida per specificare i percorsi includono:- Deve iniziare con un carattere barra (
/). - Non può essere vuoto o contenere una stringa vuota.
- Non può essere un
TypeMetacampo (/kindo/apiVersion). - Non può essere un
Metadatacampo (/metadata/nameo/metadata/namespace), ad eccezione dei campi/metadata/labelse/metadata/annotations. - Non può essere alcun campo nel stato della risorsa.
Esempi di percorsi validi includono:
/metadata/labels/new-label/metadata/annotations/new-annotation/spec/template/spec/containers/0/resources/limits/cpu/spec/template/spec/containers/0/resources/requests/memory
- Deve iniziare con un carattere barra (
value: valore da aggiungere, rimuovere o sostituire. Seopèremove, non è possibile specificarevalue.
I jsonPatchOverrides campi applicano una patch JSON alle risorse selezionate seguendo RFC 6902.
Estendendo l'esempio, si configura un oggetto policy per rimuovere il list verbo dal ClusterRole denominato secret-reader nei cluster etichettati con env:prod.
apiVersion: placement.kubernetes-fleet.io/v1
kind: ClusterResourceOverride
metadata:
name: example-cro
spec:
clusterResourceSelectors:
- group: rbac.authorization.k8s.io
kind: ClusterRole
version: v1
name: secret-reader
policy:
overrideRules:
- clusterSelector:
clusterSelectorTerms:
- labelSelector:
matchLabels:
env: prod
jsonPatchOverrides:
- op: remove
path: /rules/0/verbs/2
Estendendo l'esempio, si configura un oggetto policy per sostituire l'immagine del contenitore in Deployment con l'immagine nginx:1.30.0 per i cluster con l'etichetta env: prod .
apiVersion: placement.kubernetes-fleet.io/v1
kind: ResourceOverride
metadata:
name: example-resource-override
namespace: nginx-demo
spec:
resourceSelectors:
- group: apps
kind: Deployment
version: v1
name: test-nginx
policy:
overrideRules:
- clusterSelector:
clusterSelectorTerms:
- labelSelector:
matchLabels:
env: prod
jsonPatchOverrides:
- op: replace
path: /spec/template/spec/containers/0/image
value: "nginx:1.30.0"
Definire più sostituzioni
Aggiungi più campi jsonPatchOverrides a overrideRules per applicare più modifiche alle risorse del cluster selezionate. Ecco un esempio:
In questo esempio vengono rimossi i verbi list e watch nell'esempio ClusterRole denominato secret-reader nei cluster con l'etichetta env: prod.
apiVersion: placement.kubernetes-fleet.io/v1
kind: ClusterResourceOverride
metadata:
name: cro-1
spec:
clusterResourceSelectors:
- group: rbac.authorization.k8s.io
kind: ClusterRole
version: v1
name: secret-reader
policy:
overrideRules:
- clusterSelector:
clusterSelectorTerms:
- labelSelector:
matchLabels:
env: prod
jsonPatchOverrides:
- op: remove
path: /rules/0/verbs/2
- op: remove
path: /rules/0/verbs/1
Questo esempio sostituisce sia l'immagine del container che la porta in Deployment con 443 per i cluster con etichetta env: prod.
apiVersion: placement.kubernetes-fleet.io/v1
kind: ResourceOverride
metadata:
name: example-resource-override
namespace: nginx-demo
spec:
resourceSelectors:
- group: apps
kind: Deployment
version: v1
name: test-nginx
policy:
overrideRules:
- clusterSelector:
clusterSelectorTerms:
- labelSelector:
matchLabels:
env: prod
jsonPatchOverrides:
- op: replace
path: /spec/template/spec/containers/0/image
value: "nginx:1.30.0"
- op: replace
path: /spec/template/spec/containers/0/ports/0/containerPort
value: "443"
Variabili riservate nel valore di override della patch JSON
Il value della regola di override della patch JSON sostituisce le variabili riservate durante il posizionamento. Variabili riservate attualmente supportate:
-
${MEMBER-CLUSTER-NAME}: sostituito dal nome dell'oggettomemberCluster.
Ad esempio, per creare un nome host DNS di Azure che contiene il nome del cluster, nell'esempio ResourceOverride viene aggiunto un valore di fleet-clustername-eastus nei cluster nell'area eastus Azure.
apiVersion: placement.kubernetes-fleet.io/v1
kind: ResourceOverride
metadata:
name: ro-kuard-demo-eastus
namespace: kuard-demo
spec:
placement:
name: crp-kuard-demo
resourceSelectors:
- group: ""
kind: Service
version: v1
name: kuard-svc
policy:
overrideRules:
- clusterSelector:
clusterSelectorTerms:
- labelSelector:
matchLabels:
fleet.azure.com/location: eastus
jsonPatchOverrides:
- op: add
path: /metadata/annotations
value:
{"service.beta.kubernetes.io/azure-dns-label-name":"fleet-${MEMBER-CLUSTER-NAME}-eastus"}
Più regole di override
Aggiungi più overrideRules a un campo policy per applicare più modifiche alle risorse selezionate. Ecco un esempio per ResourceOverride.
Questo esempio sostituisce l'immagine del contenitore nel Deployment con:
- L'immagine
nginx:1.20.0per i cluster con l'etichettaenv: prod. - L'immagine
nginx:latestper i cluster con l'etichettaenv: test.
apiVersion: placement.kubernetes-fleet.io/v1
kind: ResourceOverride
metadata:
name: ro-1
namespace: test
spec:
resourceSelectors:
- group: apps
kind: Deployment
version: v1
name: test-nginx
policy:
overrideRules:
- clusterSelector:
clusterSelectorTerms:
- labelSelector:
matchLabels:
env: prod
jsonPatchOverrides:
- op: replace
path: /spec/template/spec/containers/0/image
value: "nginx:1.20.0"
- clusterSelector:
clusterSelectorTerms:
- labelSelector:
matchLabels:
env: test
jsonPatchOverrides:
- op: replace
path: /spec/template/spec/containers/0/image
value: "nginx:latest"
Usare con il posizionamento delle risorse del cluster
Creare un
ClusterResourcePlacementper specificare le regole di posizionamento per la distribuzione degli override delle risorse del cluster nell'infrastruttura del cluster. Il codice seguente è un esempio. Assicurarsi di selezionare la risorsa appropriata.apiVersion: placement.kubernetes-fleet.io/v1 kind: ClusterResourcePlacement metadata: name: crp spec: resourceSelectors: - group: rbac.authorization.k8s.io kind: ClusterRole version: v1 name: secret-reader policy: placementType: PickAll affinity: clusterAffinity: requiredDuringSchedulingIgnoredDuringExecution: clusterSelectorTerms: - labelSelector: matchLabels: env: prodQuesto esempio distribuisce le risorse in tutti i cluster etichettati con
env: prod. Man mano che vengono implementate le modifiche, le configurazioni corrispondentiClusterResourceOverridevengono applicate ai cluster designati. La selezione di una risorsa del ruolo del cluster corrispondente,secret-reader, attiva l'applicazione delle configurazioni nei cluster.Applicare il comando
ClusterResourcePlacementusandokubectl apply.kubectl apply -f cluster-resource-placement.yamlVerificare che sia
ClusterResourceOverridestato applicato alle risorse selezionate controllando lo stato dellaClusterResourcePlacementrisorsa tramite ilkubectl describecomando :kubectl describe clusterresourceplacement crpL'output dovrebbe essere simile all'esempio seguente:
Status: Conditions: ... Last Transition Time: 2024-04-27T04:18:00Z Message: The selected resources are successfully overridden in the 10 clusters Observed Generation: 1 Reason: OverriddenSucceeded Status: True Type: ClusterResourcePlacementOverridden ... Observed Resource Index: 0 Placement Statuses: Applicable Cluster Resource Overrides: example-cro-0 Cluster Name: member-50 Conditions: ... Message: Successfully applied the override rules on the resources Observed Generation: 1 Reason: OverriddenSucceeded Status: True Type: Overridden ...La
ClusterResourcePlacementOverriddencondizione indica se l'override della risorsa è stato applicato correttamente alle risorse selezionate nei cluster. Ogni cluster mantiene un proprioApplicable Cluster Resource Overrideselenco. Questo elenco contiene lo snapshot dell'override delle risorse del cluster, se rilevante. I singoli messaggi di stato per ogni cluster indicano se le regole di override sono state applicate correttamente.
Usare con il posizionamento delle risorse
Creare una risorsa
ClusterResourcePlacementper specificare le regole di posizionamento per la distribuzione degli override delle risorse nell'infrastruttura del cluster. Il codice seguente è un esempio. Assicurarsi di selezionare i namespace appropriati.apiVersion: placement.kubernetes-fleet.io/v1 kind: ClusterResourcePlacement metadata: name: crp-example spec: resourceSelectors: - group: "" kind: Namespace name: test-namespace version: v1 policy: placementType: PickAll affinity: clusterAffinity: requiredDuringSchedulingIgnoredDuringExecution: clusterSelectorTerms: - labelSelector: matchLabels: env: prod - labelSelector: matchLabels: env: testQuesto esempio distribuisce le risorse all'interno
test-namespacedi tutti i cluster etichettati conenv:prodeenv:test. Man mano che vengono implementate le modifiche, le configurazioni corrispondentiResourceOverridevengono applicate alle risorse designate. La selezione di una risorsa di distribuzione corrispondente,my-deployment, attiva l'applicazione delle configurazioni alle risorse designate.Applicare la
ClusterResourcePlacementrisorsa usando ilkubectl applycomando :kubectl apply -f cluster-resource-placement.yamlVerificare che sia
ResourceOverridestato applicato alle risorse selezionate controllando lo stato dellaClusterResourcePlacementrisorsa tramite ilkubectl describecomando :kubectl describe clusterresourceplacement crp-exampleL'output dovrebbe essere simile all'esempio seguente:
Status: Conditions: ... Message: The selected resources are successfully overridden in the 10 clusters Observed Generation: 1 Reason: OverriddenSucceeded Status: True Type: ClusterResourcePlacementOverridden ... Observed Resource Index: 0 Placement Statuses: Applicable Resource Overrides: Name: ro-1-0 Namespace: test-namespace Cluster Name: member-50 Conditions: ... Last Transition Time: 2024-04-26T22:57:14Z Message: Successfully applied the override rules on the resources Observed Generation: 1 Reason: OverriddenSucceeded Status: True Type: Overridden ...La
ClusterResourcePlacementOverriddencondizione indica se l'override della risorsa è stato applicato correttamente alle risorse selezionate. Ogni cluster mantiene un proprioApplicable Resource Overrideselenco. Questo elenco contiene lo snapshot dell'override delle risorse, se pertinente. I singoli messaggi di stato per ogni cluster indicano se le regole di override sono state applicate correttamente.