Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
S’applique à : ✔️ Fleet Manager avec cluster hub
Le placement intelligent des ressources Azure Kubernetes Fleet Manager peut être utilisé pour déployer la même ressource sur plusieurs clusters dans une flotte. Il est souvent nécessaire de modifier la configuration des ressources pour appliquer des règles relatives au comportement dans différents environnements (développement, test, prod). À cet effet, Fleet Manager offre des surcharges de ressources, qui offrent une fonctionnalité conceptuellement similaire à la façon dont les modèles Helm et les patches Kustomize sont utilisés.
Voici quelques exemples de situations où la modification d’une configuration de ressource est utile :
- Je souhaite utiliser un
ClusterRolenommésecret-readersur tous les clusters, mais avec un plus petit jeu d’actions autorisées pour ce rôle dans mes clusters de production. - Je veux utiliser le même
Deploymentsur tous les clusters, mais des images de conteneur ou des ports différents sur mes clusters de production.
Cet article explique comment créer des remplacements pour les ressources déployées via le placement de ressources de Fleet Manager.
Azure Kubernetes Fleet Manager prend en charge deux niveaux pour les substitutions :
-
Étendue limitée au cluster : utilisez
ClusterResourceOverrideavecClusterResourcePlacementpour les administrateurs de flotte qui gèrent les modifications au niveau de l’infrastructure. -
Étendue limitée à l’espace de noms: utilisez
ResourceOverrideavecResourcePlacementpour les équipes d’application qui gèrent les déploiements au sein de leurs espaces de noms spécifiques.
Vous pouvez sélectionner l’étendue la plus applicable à vous dans les choix de type d’étendue en haut de l’article.
Remplacements de ressources dans l’étendue du cluster
Un ClusterResourceOverride possède les propriétés suivantes :
-
clusterResourceSelectors: spécifie l'ensemble des ressources de cluster sélectionnées pour le remplacement. -
policy: spécifie l’ensemble de règles à appliquer aux ressources de cluster sélectionnées.
Note
Policy les définitions sont identiques pour les ressources de cluster et celles délimitées par l'espace de noms.
Utilisons l’exemple ClusterRole suivant nommé secret-reader pour illustrer le ClusterResourceOverride fonctionnement.
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: secret-reader
rules:
- apiGroups: [""]
resources: ["secrets"]
verbs: ["get", "watch", "list"]
Sélection des ressources de cluster
Un ClusterResourceOverride peut inclure un ou plusieurs clusterResourceSelector afin de déterminer quelles ressources doivent être remplacées. Chacun clusterResourceSelector prend en charge les champs suivants.
-
group: groupe d’API de la ressource. -
version: version d’API de la ressource. -
kind: type de ressource. -
name: nom de la ressource.
Note
Si vous sélectionnez un espace de noms dans le ClusterResourceSelector, celui-ci s’applique à toutes les ressources de cet espace de noms.
À l’aide de notre exemple ClusterRole, voyons comment nous le sélectionnons dans un 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
Remplacements de ressources à portée d’espace de noms (version préliminaire)
Un ResourceOverride possède les propriétés suivantes :
-
resourceSelectors: spécifie l’ensemble de ressources sélectionnées pour le remplacement. -
policy: spécifie l’ensemble de règles à appliquer aux ressources sélectionnées.
Note
Policy les définitions sont identiques pour les ressources de cluster et celles à l'échelle du namespace.
Utilisons l’exemple Deployment suivant nommé nginx-sample pour illustrer le ResourceOverride fonctionnement.
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
Sélection des ressources d’espace de noms
Un ResourceOverride peut inclure un ou plusieurs resourceSelector pour choisir les ressources à remplacer. Chacun resourceSelector prend en charge les champs suivants.
-
group: groupe d’API de la ressource. -
version: version d’API de la ressource. -
kind: type de ressource. -
name: nom de la ressource.
L’espace de noms de la ressource à remplacer est déterminé en spécifiant le namespace dans la metadata du ResourceOverride.
À l’aide de notre exemple Deployment, voyons comment nous le sélectionnons dans un 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
Important
- Si vous sélectionnez un espace de noms dans le
resourceSelector(kind: Namespace), celui-ci s’applique à toutes les ressources de cet espace de noms. - Le
ResourceOverridedoit se trouver dans le même espace de noms que la ressource à remplacer.
Nous avons maintenant la ressource sélectionnée. Voyons comment configurer le remplacement à l’aide d’un policy.
Policy
Un policy comprend un ensemble de overrideRules qui spécifient les modifications à appliquer aux ressources sélectionnées. Chacun overrideRules prend en charge les champs suivants :
-
clusterSelector: spécifie l’ensemble de clusters auxquels la règle de remplacement s’applique. -
jsonPatchOverrides: spécifie les modifications à appliquer aux ressources sélectionnées.
Sélecteur de cluster
Vous pouvez utiliser le clusterSelector champ dans le overrideRules pour spécifier les clusters auxquels la règle s’applique. Le clusterSelector prend en charge le champ suivant :
-
clusterSelectorTerms: liste de termes qui spécifient les critères de sélection de clusters. Chaque terme inclut unlabelSelectorchamp qui définit un ensemble d’étiquettes à mettre en correspondance.
Important
Seul labelSelector est pris en charge dans le champ clusterSelectorTerms.
Remplacements via correctif JSON
Vous pouvez utiliser jsonPatchOverrides dans overrideRules pour spécifier les modifications à appliquer aux ressources sélectionnées. La JsonPatch propriété prend en charge les champs suivants :
op: opération à effectuer. Les opérations prises en charge sont les suivantes :-
add: ajoute une nouvelle valeur au chemin d’accès spécifié. -
remove: supprime la valeur au niveau du chemin spécifié. -
replace: remplace la valeur au chemin spécifié.
-
path: chemin d’accès au champ à modifier. Des conseils sur la spécification des chemins d’accès incluent :- Doit commencer par un caractère de barre oblique (
/). - Ne peut pas être vide ou contenir une chaîne vide.
- Il ne peut pas s’agir d’un
TypeMetachamp (/kindou/apiVersion). - Ne peut pas être un
Metadatachamp (/metadata/nameou/metadata/namespace), à l’exception des champs/metadata/labelset/metadata/annotations. - Le correctif ne peut pas cibler un champ de la section status de la ressource.
Voici quelques exemples de chemins valides :
/metadata/labels/new-label/metadata/annotations/new-annotation/spec/template/spec/containers/0/resources/limits/cpu/spec/template/spec/containers/0/resources/requests/memory
- Doit commencer par un caractère de barre oblique (
value: valeur à ajouter, supprimer ou remplacer. Siopestremove, vous ne pouvez pas spécifiervalue.
Les jsonPatchOverrides champs appliquent un correctif JSON sur les ressources sélectionnées en suivant RFC 6902.
En prolongeant notre exemple, nous configurons un policy pour supprimer le verbe list du ClusterRole nommé secret-reader sur les clusters étiquetés avec 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
En étendant notre exemple, nous configurons un policy pour remplacer l’image du conteneur dans Deployment par celle de nginx:1.30.0 pour les clusters avec le label env: prod.
apiVersion: placement.kubernetes-fleet.io/v1
kind: ResourceOverride
metadata:
name: example-resource-override
namespace: test-namespace
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"
Définir plusieurs remplacements.
Vous pouvez ajouter plusieurs jsonPatchOverrides éléments à overrideRules pour appliquer plusieurs modifications aux ressources de cluster sélectionnées. Voici un exemple :
Cet exemple supprime les verbes « list » et « watch » dans notre exemple ClusterRole nommé secret-reader sur des clusters avec l’étiquette 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
Cet exemple remplace à la fois l’image conteneur et le port dans Deployment par 443 pour les clusters portant l’étiquette env: prod.
apiVersion: placement.kubernetes-fleet.io/v1
kind: ResourceOverride
metadata:
name: example-resource-override
namespace: test-namespace
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"
Variables réservées dans la valeur du correctif JSON
Les variables réservées sont remplacées au moment du placement par la value dans la règle de correctif JSON. Variables réservées actuellement prises en charge :
-
${MEMBER-CLUSTER-NAME}: remplacé par le nom dumemberCluster.
Par exemple, pour créer un nom d’hôte DNS Azure qui contient le nom du cluster, l’exemple ResourceOverride, ajoute une valeur fleet-clustername-eastus aux clusters de la région Azure eastus.
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"}
Règles de remplacement multiples
Vous pouvez ajouter plusieurs overrideRules à un policy champ pour appliquer plusieurs modifications aux ressources sélectionnées. Voici un exemple pour ResourceOverride.
Cet exemple remplace l’image conteneur dans le Deployment par :
- L'image
nginx:1.20.0pour les clusters avec l'étiquetteenv: prod. - Image
nginx:latestdes clusters avec l’étiquetteenv: 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"
Utilisation avec le placement de ressources de cluster
Créez une
ClusterResourcePlacementafin de définir les règles de placement pour distribuer les remplacements de ressources de cluster dans l’infrastructure des clusters. Voici un exemple de code. Veillez à sélectionner la ressource appropriée.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: prodCet exemple distribue des ressources sur tous les clusters étiquetés avec
env: prod. À mesure que les modifications sont implémentées, les configurations correspondantesClusterResourceOverridesont appliquées aux clusters désignés. La sélection d’une ressource de rôle de cluster correspondante,secret-readerdéclenche l’application des configurations aux clusters.Appliquez le
ClusterResourcePlacementà l’aide de la commandekubectl apply:kubectl apply -f cluster-resource-placement.yamlVérifiez que l’application
ClusterResourceOverridea été appliquée aux ressources sélectionnées en vérifiant l’état de laClusterResourcePlacementressource via lakubectl describecommande :kubectl describe clusterresourceplacement crpVotre sortie doit ressembler à l’exemple suivant :
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
ClusterResourcePlacementOverriddencondition indique si le remplacement de ressource a été correctement appliqué aux ressources sélectionnées dans les clusters. Chaque cluster conserve sa propreApplicable Cluster Resource Overridesliste. Cette liste contient l’instantané du remplacement de ressource de cluster, le cas échéant. Les messages d’état individuels pour chaque cluster indiquent si les règles de remplacement ont été correctement appliquées.
Utiliser en conjonction avec le placement des ressources
Créez une ressource
ClusterResourcePlacementafin de définir les règles de placement pour distribuer les remplacements de ressources dans l’infrastructure des clusters. Voici un exemple de code. Veillez à sélectionner les espaces de noms appropriés.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: testCet exemple distribue les ressources au sein
test-namespacede tous les clusters étiquetés avecenv:prodetenv:test. À mesure que les modifications sont implémentées, les configurations correspondantesResourceOverridesont appliquées aux ressources désignées. La sélection d’une ressource de déploiement correspondante déclenchemy-deploymentl’application des configurations aux ressources désignées.Appliquez la
ClusterResourcePlacementressource à l’aide de lakubectl applycommande :kubectl apply -f cluster-resource-placement.yamlVérifiez que l’application
ResourceOverridea été appliquée aux ressources sélectionnées en vérifiant l’état de laClusterResourcePlacementressource via lakubectl describecommande :kubectl describe clusterresourceplacement crp-exampleVotre sortie doit ressembler à l’exemple suivant :
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
ClusterResourcePlacementOverriddencondition indique si le remplacement de ressource a été correctement appliqué aux ressources sélectionnées. Chaque cluster conserve sa propreApplicable Resource Overridesliste. Cette liste contient l’instantané du remplacement de ressource, le cas échéant. Les messages d’état individuels pour chaque cluster indiquent si les règles de remplacement ont été correctement appliquées.