ACK One utilise des politiques de propagation et des politiques de substitution pour distribuer les applications au sein d'un parc. Une politique de propagation définit quelles ressources sont distribuées vers quels clusters. Une politique de substitution applique des remplacements de configuration spécifiques au cluster à ces ressources.
Politiques de propagation
Une politique de propagation sélectionne des ressources Kubernetes et les distribue vers un ou plusieurs clusters membres. Définissez une PropagationPolicy ou ClusterPropagationPolicy — toutes deux sont basées sur le projet open source Karmada et sont compatibles avec l'API Karmada.
PropagationPolicy: Distribue des ressources au niveau du namespace. S'applique uniquement au sein du namespace où la politique est définie.ClusterPropagationPolicy: Distribue des ressources étendues au cluster (PersistentVolume,StorageClass,Namespace,CustomResourceDefinition) et des ressources au niveau du namespace dans n'importe quel namespace, à l'exception des namespaces système. Le contrôle d'accès basé sur les rôles (RBAC) pour la distribution des ressources est régi par permissions RBAC du parc multi-cluster.
L'exemple suivant distribue un Deployment et un ConfigMap vers deux clusters avec des pondérations de réplicas statiques :
apiVersion: policy.one.alibabacloud.com/v1alpha1
kind: PropagationPolicy
metadata:
name: web-demo
namespace: demo
spec:
resourceSelectors:
- apiVersion: apps/v1
kind: Deployment
name: web-demo
- apiVersion: v1
kind: ConfigMap
name: cm-demo
- apiVersion: apps/v1
kind: Deployment
labelSelector:
matchExpressions:
- key: app
operator: In
values:
- xxxx
preserveResourcesOnDeletion: true
placement:
clusterAffinity:
clusterNames:
- cxxxxx # Your cluster ID.
- cxxxxx # Your cluster ID.
replicaScheduling:
replicaSchedulingType: Divided
replicaDivisionPreference: Weighted
weightPreference:
staticWeightList:
- targetCluster:
clusterNames:
- cxxxxx
weight: 2
- targetCluster:
clusterNames:
- cxxxxxx
weight: 1
Paramètres
| Paramètre | Obligatoire | Description | Exemple |
|---|---|---|---|
apiVersion |
Oui | La version de l'API. | policy.one.alibabacloud.com/v1alpha1 |
kind |
Oui | L'étendue de la politique. PropagationPolicy distribue les ressources au sein de son propre namespace. ClusterPropagationPolicy distribue les ressources étendues au cluster et les ressources dans n'importe quel namespace non système. |
PropagationPolicy |
namespace |
Non | Obligatoire lorsque kind est PropagationPolicy. Spécifiez un namespace existant. |
demo |
name |
Non | Le nom de la politique de propagation. | policy-xxxx |
resourceSelectors |
Non | Sélectionne les ressources Kubernetes à distribuer. Si omis, aucune ressource n'est sélectionnée. Consultez paramètres resourceSelector. | — |
propagateDeps |
Non | Indique s'il faut distribuer automatiquement les ressources dont dépend la charge de travail sélectionnée (par exemple, un ConfigMap référencé par un Deployment). | true |
placement |
Oui | Spécifie les clusters cibles et la planification des réplicas. Contient clusterAffinity et replicaScheduling. Consultez paramètres clusterAffinity et paramètres replicaScheduling. |
— |
dependentOverrides |
Non | Répertorie les objets OverridePolicy qui doivent être appliqués avant la distribution des ressources. |
- overridePolicy1 |
failover |
Non | Contrôle le comportement lorsqu'une application devient indisponible. Consultez configuration du basculement. | — |
preserveResourcesOnDeletion |
Oui | Indique s'il faut conserver les ressources distribuées dans les clusters membres après la suppression de la politique. Par défaut : true. |
false |
Paramètres resourceSelector
| Paramètre | Obligatoire | Description | Exemple |
|---|---|---|---|
apiVersion |
Oui | La version de l'API de la ressource à distribuer. | v1 |
kind |
Oui | Le type de ressource. | Deployment |
namespace |
Non | Le namespace de la ressource. Lors de l'utilisation de PropagationPolicy, celui-ci doit correspondre au namespace où la politique est définie — les autres valeurs n'ont aucun effet. |
demo |
name |
Non | Le nom de la ressource. | web-demo |
labelSelector |
Non | Sélectionne les ressources par libellés. Prend en charge matchLabels (paires clé-valeur) et matchExpressions (expressions avec key, operator et values). Si omis, toutes les ressources du kind spécifié dans le namespace sont sélectionnées. |
— |
Paramètres clusterAffinity
Spécifiez les clusters cibles en utilisant n'importe quelle combinaison des champs suivants :
Par ID de cluster
clusterAffinity:
clusterNames:
- cxxxx
- cxxxx
Par sélecteur de libellés
clusterAffinity:
labelSelector:
matchLabels:
region: A
az: zone0
matchExpressions:
- key: app
operator: In
values:
- nginx
Par exclusion
clusterAffinity:
excludeClusters:
- cxxxx
- cxxxx
| Paramètre | Obligatoire | Description |
|---|---|---|
clusterNames |
Non | IDs de cluster à inclure. |
excludeClusters |
Non | IDs de cluster à exclure. |
labelSelector |
Non | Sélectionne les clusters par libellé. |
Paramètres replicaScheduling
| Paramètre | Obligatoire | Description | Exemple |
|---|---|---|---|
replicaSchedulingType |
Non | Mode de distribution des réplicas entre les clusters. Duplicated exécute le nombre total de réplicas sur chaque cluster. Divided répartit les réplicas entre les clusters de sorte que le total corresponde au nombre spécifié dans la spécification de la charge de travail. |
Divided |
customSchedulingType |
Non | Politique de planification personnalisée. Actuellement, seule la planification Gang est prise en charge, pour les charges de travail de type job. |
Gang |
replicaDivisionPreference |
Non | Utilisé lorsque replicaSchedulingType est Divided. Weighted répartit les réplicas par pondération. Aggregated concentre les réplicas sur les clusters ayant le score le plus élevé. |
Weighted |
weightPreference |
Non | Spécifie des pondérations statiques ou dynamiques pour la division Weighted. Voir les exemples ci-dessous. |
— |
Exemple de pondération statique — avec weight: 2 sur Cluster1 et weight: 1 sur Cluster2, trois réplicas au total sont planifiés comme suit : deux sur Cluster1 et un sur Cluster2 :
weightPreference:
staticWeightList:
- targetCluster:
clusterNames:
- cxxxxx # Cluster1 ID
weight: 2
- targetCluster:
clusterNames:
- cxxxxxx # Cluster2 ID
weight: 1
Exemple de pondération dynamique — distribue les réplicas proportionnellement en fonction de la capacité disponible de chaque cluster :
weightPreference:
dynamicWeight: AvailableReplicas
Configuration du basculement
Configurez le champ failover pour contrôler la réaction d'ACK One lorsqu'une application devient indisponible :
failover:
application:
decisionConditions:
tolerationSeconds: 30
purgeMode: Immediately
| Paramètre | Description | Par défaut |
|---|---|---|
decisionConditions.tolerationSeconds |
Durée d'attente avant de considérer une application indisponible comme défaillante. | 300s |
purgeMode |
Action à entreprendre pour l'application indisponible. Immediately l'évince et planifie un remplacement. Graciously attend que l'application récupère ; si elle récupère dans le délai gracePeriodSeconds, l'éviction est annulée. Never laisse l'application en place et nécessite une intervention manuelle. |
— |
gracePeriodSeconds |
Délai d'attente maximal pour une éviction gracieuse lorsque purgeMode est Graciously. |
600s |
Politiques de substitution
Une politique de substitution applique une configuration spécifique au cluster aux ressources qu'une politique de propagation a déjà sélectionnées pour la distribution. Définissez une ClusterOverridePolicy ou une OverridePolicy — toutes deux sont basées sur le projet open source Karmada et sont compatibles avec les interfaces ClusterOverridePolicy et OverridePolicy de Karmada.
OverridePolicy: Substitue les ressources au niveau du namespace au sein de son propre namespace.ClusterOverridePolicy: Substitue les ressources étendues au cluster (PersistentVolume,StorageClass,Namespace,CustomResourceDefinition) et les ressources dans n'importe quel namespace non système.
L'exemple suivant substitue le nombre de réplicas et le registre d'images pour un Deployment dans un cluster spécifique :
apiVersion: policy.one.alibabacloud.com/v1alpha1
kind: OverridePolicy
metadata:
name: demo
namespace: demo
spec:
resourceSelectors:
- apiVersion: apps/v1
kind: Deployment
name: example
overrideRules:
- targetCluster:
clusterNames:
- cxxxxx # Your cluster ID
overriders:
plaintext:
- operator: replace
path: /spec/replicas
value: 1
imageOverrider:
- component: Registry
operator: add
value: registry.cn-hangzhou.aliyuncs.com/xxxx
Paramètres principaux
| Paramètre | Obligatoire | Description | Exemple |
|---|---|---|---|
apiVersion |
Oui | La version de l'API. | policy.one.alibabacloud.com/v1alpha1 |
kind |
Oui | L'étendue de la politique. OverridePolicy s'applique au sein de son propre namespace. ClusterOverridePolicy s'applique aux ressources étendues au cluster et aux ressources dans n'importe quel namespace non système. |
OverridePolicy |
namespace |
Non | Obligatoire lorsque kind est OverridePolicy. Spécifiez un namespace existant. |
demo |
name |
Oui | Le nom de la politique de substitution. | demo |
resourceSelectors |
Oui | Sélectionne les ressources à substituer. Consultez paramètres resourceSelector. | — |
overrideRules |
Oui | Un tableau de règles de substitution, chacune ciblant des clusters spécifiques et spécifiant les substitutions à appliquer. Consultez paramètres overrideRules. | — |
Paramètres resourceSelector
| Paramètre | Obligatoire | Description | Exemple |
|---|---|---|---|
apiVersion |
Oui | La version de l'API de la ressource. | v1 |
kind |
Oui | Le type de ressource. | Deployment |
namespace |
Non | Le namespace de la ressource. Lors de l'utilisation de OverridePolicy, celui-ci doit correspondre au namespace de la politique. |
demo |
name |
Non | Le nom de la ressource. | example |
labelSelector |
Non | Sélectionne les ressources par libellé. Si omis, toutes les ressources du kind spécifié dans le namespace sont sélectionnées. |
— |
Paramètres overrideRules
Chaque entrée dans overrideRules contient un targetCluster et un bloc overriders :
| Paramètre | Obligatoire | Description |
|---|---|---|
targetCluster |
Oui | Spécifie les clusters auxquels la substitution s'applique, en utilisant la même structure clusterAffinity que les politiques de propagation. Consultez paramètres clusterAffinity. |
overriders |
Oui | Définit ce qui doit être substitué. Prend en charge imageOverrider et plaintext. Lorsque les deux sont spécifiés dans la même règle, imageOverrider est appliqué en premier, puis plaintext. |
Paramètres overriders
imageOverrider — modifie le registre d'images, le dépôt ou le tag :
| Paramètre | Obligatoire | Description |
|---|---|---|
predicate |
Non | Le chemin vers le champ d'image spécifique à modifier (par exemple, /spec/template/spec/containers/0/image). Si omis, toutes les images de la ressource sont modifiées. |
component |
Oui | Le composant d'image à modifier. Valeurs valides : Registry, Repository, Tag. Le format de l'image est [registry/]repository[:tag]. |
operator |
Oui | L'opération. Valeurs valides : add, replace, remove. |
value |
Conditionnel | La nouvelle valeur. Obligatoire lorsque operator est add ou replace. |
Exemple — ajouter un préfixe de registre à toutes les images de conteneur :
imageOverrider:
- component: Registry
operator: add
value: registry.cn-hangzhou.aliyuncs.com
Résultat : une image initialement spécifiée comme nginx:latest devient registry.cn-hangzhou.aliyuncs.com/nginx:latest.
plaintext — modifie n'importe quel champ de ressource en utilisant un JSON Patch (RFC 6902) :
| Paramètre | Obligatoire | Description |
|---|---|---|
path |
Oui | Le chemin JSON Patch vers le champ cible (par exemple, /spec/replicas). |
value |
Conditionnel | La nouvelle valeur. Obligatoire lorsque operator est add ou replace. À omettre lorsque operator est remove. |
operator |
Oui | L'opération. Valeurs valides : add, replace, remove. |
Exemple — définir le nombre de réplicas à 1 dans un cluster spécifique :
plaintext:
- operator: replace
path: /spec/replicas
value: 1
Résultat : le champ spec.replicas du Deployment passe de sa valeur d'origine à 1 dans le cluster cible.
Étapes suivantes
Pour une présentation complète de la création d'une application dans une instance de parc et de la configuration des politiques de propagation et de substitution pour la distribution multi-cluster, consultez guide de démarrage rapide de la distribution d'applications.