2.5. Mise à l'échelle automatique des pods en fonction de mesures personnalisées
En tant que développeur, vous pouvez utiliser le custom metrics autoscaler pour spécifier comment OpenShift Container Platform doit automatiquement augmenter ou diminuer le nombre de pods pour un déploiement, un stateful set, une ressource personnalisée ou un job basé sur des métriques personnalisées qui ne sont pas basées uniquement sur le CPU ou la mémoire.
L'opérateur Custom Metrics Autoscaler pour Red Hat OpenShift est un opérateur optionnel, basé sur Kubernetes Event Driven Autoscaler (KEDA), qui permet aux charges de travail d'être mises à l'échelle en utilisant des sources de métriques supplémentaires autres que les métriques de pod.
L'autoscaler de métriques personnalisées ne prend actuellement en charge que les métriques Prometheus, CPU, mémoire et Apache Kafka.
L'autoscaler de métriques personnalisé est une fonctionnalité d'aperçu technologique uniquement. Les fonctionnalités de l'aperçu technologique ne sont pas prises en charge par les accords de niveau de service (SLA) de production de Red Hat et peuvent ne pas être complètes sur le plan fonctionnel. Red Hat ne recommande pas leur utilisation en production. Ces fonctionnalités offrent un accès anticipé aux fonctionnalités des produits à venir, ce qui permet aux clients de tester les fonctionnalités et de fournir un retour d'information pendant le processus de développement.
Pour plus d'informations sur la portée de l'assistance des fonctionnalités de l'aperçu technologique de Red Hat, voir Portée de l'assistance des fonctionnalités de l'aperçu technologique.
2.5.1. Notes de mise à jour de Custom Metrics Autoscaler Operator
Les notes de mise à jour de Custom Metrics Autoscaler Operator pour Red Hat Openshift décrivent les nouvelles fonctionnalités et améliorations, les fonctionnalités obsolètes et les problèmes connus.
Le Custom Metrics Autoscaler Operator utilise l'Event Driven Autoscaler (KEDA) basé sur Kubernetes et est construit sur le pod autoscaler horizontal (HPA) d'OpenShift Container Platform.
Custom Metrics Autoscaler Operator pour Red Hat OpenShift est fourni en tant que composant installable, avec un cycle de publication distinct de celui de la plate-forme OpenShift Container Platform. La politique de cycle de vie de Red Hat OpenShift Container Platform décrit la compatibilité des versions.
2.5.1.1. Versions prises en charge
Le tableau suivant définit les versions de Custom Metrics Autoscaler Operator pour chaque version d'OpenShift Container Platform.
Version | Version d'OpenShift Container Platform | Disponibilité générale |
---|---|---|
2.8.2-174 | 4.12 | Avant-première technologique |
2.8.2-174 | 4.11 | Avant-première technologique |
2.8.2-174 | 4.10 | Avant-première technologique |
2.5.1.2. Notes de publication de Custom Metrics Autoscaler Operator 2.8.2-174
Cette version de Custom Metrics Autoscaler Operator 2.8.2-174 fournit de nouvelles fonctionnalités et des corrections de bugs pour l'exécution de l'Operator dans un cluster OpenShift Container Platform. Les composants de Custom Metrics Autoscaler Operator 2.8.2-174 ont été publiés dans RHEA-2023:1683.
Le Custom Metrics Autoscaler Operator est actuellement une fonctionnalité en avant-première technologique.
2.5.1.2.1. Nouvelles fonctionnalités et améliorations
2.5.1.2.1.1. Aide à la mise à niveau de l'opérateur
Vous pouvez désormais mettre à niveau une version antérieure de l'opérateur Custom Metrics Autoscaler. Voir "Changer le canal de mise à jour d'un opérateur" dans "Ressources supplémentaires" pour plus d'informations sur la mise à niveau d'un opérateur.
2.5.1.2.1.2. soutien indispensable
Vous pouvez désormais collecter des données sur l'opérateur Custom Metrics Autoscaler et ses composants en utilisant l'outil OpenShift Container Platform must-gather
. Actuellement, le processus d'utilisation de l'outil must-gather
avec Custom Metrics Autoscaler est différent de celui des autres opérateurs. Voir "Gathering debugging data in the \N- Additional resources\N" (Collecte de données de débogage dans les ressources supplémentaires) pour plus d'informations.
2.5.1.3. Notes de publication de Custom Metrics Autoscaler Operator 2.8.2
Cette version de Custom Metrics Autoscaler Operator 2.8.2 apporte de nouvelles fonctionnalités et des corrections de bugs pour l'exécution de l'Operator dans un cluster OpenShift Container Platform. Les composants de Custom Metrics Autoscaler Operator 2.8.2 ont été publiés dans la RHSA-2023:1042.
Le Custom Metrics Autoscaler Operator est actuellement une fonctionnalité en avant-première technologique.
2.5.1.3.1. Nouvelles fonctionnalités et améliorations
2.5.1.3.1.1. Enregistrement des audits
Vous pouvez désormais rassembler et afficher les journaux d'audit de Custom Metrics Autoscaler Operator et de ses composants associés. Les journaux d'audit sont des ensembles chronologiques d'enregistrements relatifs à la sécurité qui documentent la séquence des activités qui ont affecté le système par des utilisateurs individuels, des administrateurs ou d'autres composants du système.
2.5.1.3.1.2. Faire évoluer les applications en fonction des mesures d'Apache Kafka
Vous pouvez maintenant utiliser le KEDA Apache kafka trigger/scaler pour mettre à l'échelle des déploiements basés sur un sujet Apache Kafka.
L'autoscaling basé sur les métriques Apache Kafka est une fonctionnalité Technology Preview (TP) dans toutes les versions TP de Custom Metrics Autoscaler et dans la version Custom Metrics Autoscaler General Availability.
Les fonctionnalités de l'aperçu technologique ne sont pas prises en charge par les accords de niveau de service (SLA) de production de Red Hat et peuvent ne pas être complètes sur le plan fonctionnel. Red Hat ne recommande pas leur utilisation en production.
2.5.1.3.1.3. Mise à l'échelle des applications en fonction des paramètres de l'unité centrale
Vous pouvez désormais utiliser le déclencheur/échelle de CPU de KEDA pour échelonner les déploiements en fonction des métriques de CPU.
2.5.1.3.1.4. Mise à l'échelle des applications en fonction des mesures de la mémoire
Vous pouvez désormais utiliser le déclencheur/échelle de mémoire KEDA pour échelonner les déploiements en fonction des mesures de mémoire.
2.5.2. Comprendre l'autoscaler de métriques personnalisées
L'opérateur Autoscaler Custom Metrics fait évoluer vos pods vers le haut ou vers le bas en fonction de mesures externes personnalisées provenant d'applications spécifiques. Vos autres applications continuent d'utiliser d'autres méthodes de mise à l'échelle. Vous configurez triggers, également appelé scalers, qui est la source d'événements et de métriques que l'autoscaler de métriques personnalisées utilise pour déterminer comment procéder à la mise à l'échelle. L'autoscaler de métriques personnalisées utilise une API de métriques pour convertir les métriques externes en une forme utilisable par OpenShift Container Platform. Le custom metrics autoscaler crée un pod autoscaler horizontal (HPA) qui effectue la mise à l'échelle réelle.
Pour utiliser l'autoscaler de métriques personnalisées, vous devez créer un objet ScaledObject
ou ScaledJob
, qui est une ressource personnalisée (CR) définissant les métadonnées de mise à l'échelle. Vous spécifiez le déploiement ou le travail à mettre à l'échelle, la source des métriques à mettre à l'échelle (déclencheur) et d'autres paramètres tels que les nombres minimum et maximum de réplicas autorisés.
Vous ne pouvez créer qu'un seul objet ou travail mis à l'échelle pour chaque charge de travail que vous souhaitez mettre à l'échelle. Vous ne pouvez pas non plus utiliser un objet ou un travail mis à l'échelle et le pod autoscaler horizontal (HPA) sur la même charge de travail.
Contrairement au HPA, l'autoscaler de métriques personnalisé peut s'adapter à zéro. Si vous définissez la valeur minReplicaCount
dans le Custom Metrics Autoscaler CR sur 0
, le Custom Metrics Autoscaler met à l'échelle la charge de travail de 1 à 0 réplica ou de 0 à 1 réplica. C'est ce qu'on appelle activation phase. Après avoir mis à l'échelle jusqu'à 1 réplica, le HPA prend le contrôle de la mise à l'échelle. C'est ce qu'on appelle scaling phase.
Certains déclencheurs permettent de modifier le nombre de répliques mises à l'échelle par l'autoscaler de métriques de cluster. Dans tous les cas, le paramètre permettant de configurer la phase d'activation utilise toujours la même phrase, préfixée par activation. Par exemple, si le paramètre threshold
configure la mise à l'échelle, activationThreshold
configure l'activation. La configuration des phases d'activation et de mise à l'échelle vous offre une plus grande flexibilité dans vos politiques de mise à l'échelle. Par exemple, vous pouvez configurer une phase d'activation plus élevée pour empêcher la mise à l'échelle vers le haut ou vers le bas si la métrique est particulièrement basse.
La valeur d'activation est plus prioritaire que la valeur de mise à l'échelle en cas de décisions différentes pour chacune d'entre elles. Par exemple, si threshold
est défini sur 10
et activationThreshold
sur 50
, si la métrique indique 40
, le scaler n'est pas actif et les pods sont mis à l'échelle à zéro, même si l'APH nécessite 4 instances.
Vous pouvez vérifier que la mise à l'échelle automatique a eu lieu en examinant le nombre de pods dans votre ressource personnalisée ou en examinant les journaux de l'opérateur Autoscaler de Custom Metrics à la recherche de messages similaires à ceux qui suivent :
Successfully set ScaleTarget replica count
Successfully updated ScaleTarget
Vous pouvez interrompre temporairement la mise à l'échelle automatique d'un objet de charge de travail, si nécessaire. Par exemple, vous pouvez interrompre la mise à l'échelle automatique avant d'effectuer la maintenance du cluster.
2.5.3. Installation de l'autoscaler de métriques personnalisé
Vous pouvez utiliser la console web d'OpenShift Container Platform pour installer l'opérateur Custom Metrics Autoscaler.
L'installation crée cinq CRD :
-
ClusterTriggerAuthentication
-
KedaController
-
ScaledJob
-
ScaledObject
-
TriggerAuthentication
Conditions préalables
Si vous utilisez la communauté KEDA :
- Désinstallez la communauté KEDA. Vous ne pouvez pas exécuter à la fois KEDA et l'autoscaler de métriques personnalisé sur le même cluster OpenShift Container Platform.
Supprimez les définitions de ressources personnalisées de KEDA 1.x en exécutant les commandes suivantes :
$ oc delete crd scaledobjects.keda.k8s.io
$ oc delete crd triggerauthentications.keda.k8s.io
Procédure
-
Dans la console Web OpenShift Container Platform, cliquez sur Operators
OperatorHub. - Choisissez Custom Metrics Autoscaler dans la liste des opérateurs disponibles et cliquez sur Install.
- Sur la page Install Operator, assurez-vous que l'option All namespaces on the cluster (default) est sélectionnée pour Installation Mode. Cela permet d'installer l'opérateur dans tous les espaces de noms.
- Assurez-vous que l'espace de noms openshift-keda est sélectionné pour Installed Namespace. OpenShift Container Platform crée l'espace de noms, s'il n'est pas présent dans votre cluster.
- Cliquez sur Install.
Vérifiez l'installation en listant les composants de Custom Metrics Autoscaler Operator :
-
Navigate to Workloads
Pods. -
Sélectionnez le projet
openshift-keda
dans le menu déroulant et vérifiez que le modulecustom-metrics-autoscaler-operator-*
est en cours d'exécution. -
Naviguez jusqu'à Workloads
Deployments pour vérifier que le déploiement custom-metrics-autoscaler-operator
est en cours.
-
Navigate to Workloads
Facultatif : Vérifiez l'installation dans le CLI OpenShift à l'aide des commandes suivantes :
$ oc get all -n openshift-keda
Le résultat ressemble à ce qui suit :
Exemple de sortie
NAME READY STATUS RESTARTS AGE pod/custom-metrics-autoscaler-operator-5fd8d9ffd8-xt4xp 1/1 Running 0 18m NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/custom-metrics-autoscaler-operator 1/1 1 1 18m NAME DESIRED CURRENT READY AGE replicaset.apps/custom-metrics-autoscaler-operator-5fd8d9ffd8 1 1 1 18m
Installez la ressource personnalisée
KedaController
, qui crée les CRD nécessaires :-
Dans la console web d'OpenShift Container Platform, cliquez sur Operators
Installed Operators. - Cliquez sur Custom Metrics Autoscaler.
- Sur la page Operator Details, cliquez sur l'onglet KedaController.
Dans l'onglet KedaController, cliquez sur Create KedaController et modifiez le fichier.
kind: KedaController apiVersion: keda.sh/v1alpha1 metadata: name: keda namespace: openshift-keda spec: watchNamespace: '' 1 operator: logLevel: info 2 logEncoder: console 3 metricsServer: logLevel: '0' 4 auditConfig: 5 logFormat: "json" logOutputVolumeClaim: "persistentVolumeClaimName" policy: rules: - level: Metadata omitStages: "RequestReceived" omitManagedFields: false lifetime: maxAge: "2" maxBackup: "1" maxSize: "50" serviceAccount: {}
- 1 1
- Spécifie les espaces de noms que l'autoscaler personnalisé doit surveiller. Saisissez les noms dans une liste séparée par des virgules. Omettre ou définir empty pour surveiller tous les espaces de noms. La valeur par défaut est empty.
- 2
- Spécifie le niveau de verbosité des messages du journal de l'opérateur Autoscaler de Custom Metrics. Les valeurs autorisées sont
debug
,info
,error
. La valeur par défaut estinfo
. - 3
- Spécifie le format de consignation des messages de consignation de l'opérateur Autoscaler de Custom Metrics. Les valeurs autorisées sont
console
oujson
. La valeur par défaut estconsole
. - 4
- Spécifie le niveau de journalisation pour le serveur Autoscaler Metrics de Custom Metrics. Les valeurs autorisées sont
0
pourinfo
et4
oudebug
. La valeur par défaut est0
. - 5
- Active la journalisation des audits pour l'opérateur Custom Metrics Autoscaler et spécifie la politique d'audit à utiliser, comme décrit dans la section "Configuration de la journalisation des audits".
- Cliquez sur Create pour créer le contrôleur KEDAC.
-
Dans la console web d'OpenShift Container Platform, cliquez sur Operators
2.5.4. Comprendre les déclencheurs d'autoscaler de métriques personnalisées
Les déclencheurs, également appelés scalers, fournissent les métriques que l'opérateur Custom Metrics Autoscaler utilise pour mettre à l'échelle vos pods.
L'autoscaler de métriques personnalisé ne prend actuellement en charge que les déclencheurs Prometheus, CPU, memory et Apache Kafka.
Vous utilisez une ressource personnalisée ScaledObject
ou ScaledJob
pour configurer des déclencheurs pour des objets spécifiques, comme décrit dans les sections suivantes.
2.5.4.1. Comprendre le déclencheur Prometheus
Vous pouvez mettre à l'échelle les pods en fonction des métriques Prometheus, qui peuvent utiliser la surveillance OpenShift Container Platform installée ou un serveur Prometheus externe comme source de métriques. Voir Additional resources pour plus d'informations sur les configurations requises pour utiliser la surveillance OpenShift Container Platform comme source de métriques.
Si Prometheus prend des mesures de l'application que l'autoscaler de mesures personnalisé met à l'échelle, ne définissez pas les répliques minimales à 0
dans la ressource personnalisée. S'il n'y a pas de pods d'application, l'autoscaler de métriques personnalisé n'a pas de métriques à mettre à l'échelle.
Exemple d'objet mis à l'échelle avec une cible Prometheus
apiVersion: keda.sh/v1alpha1 kind: ScaledObject metadata: name: prom-scaledobject namespace: my-namespace spec: ... triggers: - type: prometheus 1 metadata: serverAddress: https://thanos-querier.openshift-monitoring.svc.cluster.local:9092 2 namespace: kedatest 3 metricName: http_requests_total 4 threshold: '5' 5 query: sum(rate(http_requests_total{job="test-app"}[1m])) 6 authModes: "basic" 7 cortexOrgID: my-org 8 ignoreNullValues: false 9 unsafeSsl: "false" 10
- 1
- Spécifie Prometheus comme type de mesureur/déclencheur.
- 2
- Spécifie l'adresse du serveur Prometheus. Cet exemple utilise la surveillance de OpenShift Container Platform.
- 3
- Facultatif : Spécifie l'espace de noms de l'objet que vous souhaitez mettre à l'échelle. Ce paramètre est obligatoire si la surveillance de OpenShift Container Platform sert de source pour les métriques.
- 4
- Spécifie le nom permettant d'identifier la métrique dans l'API
external.metrics.k8s.io
. Si vous utilisez plusieurs déclencheurs, tous les noms de métriques doivent être uniques. - 5
- Spécifie la valeur pour laquelle la mise à l'échelle doit commencer.
- 6
- Spécifie la requête Prometheus à utiliser.
- 7
- Spécifie la méthode d'authentification à utiliser. Les scalers Prometheus prennent en charge l'authentification par support (
bearer
), l'authentification de base (basic
) ou l'authentification TLS (tls
). Vous configurez les paramètres d'authentification spécifiques dans un déclencheur d'authentification, comme indiqué dans la section suivante. Si nécessaire, vous pouvez également utiliser un secret. - 8
- 9
- Facultatif : Spécifie comment le déclencheur doit procéder si la cible Prometheus est perdue.
-
Si
true
, le déclencheur continue à fonctionner si la cible Prometheus est perdue. Il s'agit de la valeur par défaut. -
Si
false
, le déclencheur renvoie une erreur si la cible Prometheus est perdue.
-
Si
- 10
- Facultatif : Indique si la vérification du certificat doit être ignorée. Par exemple, vous pouvez ignorer la vérification si vous utilisez des certificats auto-signés au niveau du point final Prometheus.
-
Si
true
, la vérification du certificat est effectuée. -
Si
false
, la vérification du certificat n'est pas effectuée. Il s'agit de la valeur par défaut.
-
Si
2.5.4.2. Comprendre le déclenchement de l'unité centrale
Vous pouvez dimensionner les pods en fonction des métriques de CPU. Ce déclencheur utilise les métriques de cluster comme source de métriques.
L'autoscaler de métriques personnalisées met à l'échelle les pods associés à un objet afin de maintenir l'utilisation du CPU que vous avez spécifiée. L'autoscaler augmente ou diminue le nombre de répliques entre les nombres minimum et maximum pour maintenir l'utilisation de l'UC spécifiée dans tous les pods. Le déclencheur de mémoire prend en compte l'utilisation de la mémoire de l'ensemble du module. Si le pod a plusieurs conteneurs, l'utilisation de la mémoire est la somme de tous les conteneurs.
-
Ce déclencheur ne peut pas être utilisé avec la ressource personnalisée
ScaledJob
. -
Lorsque vous utilisez un déclencheur de mémoire pour mettre un objet à l'échelle, l'objet n'est pas mis à l'échelle sur
0
, même si vous utilisez plusieurs déclencheurs.
Exemple d'objet mis à l'échelle avec une cible CPU
apiVersion: keda.sh/v1alpha1 kind: ScaledObject metadata: name: cpu-scaledobject namespace: my-namespace spec: ... triggers: - type: cpu 1 metricType: Utilization 2 metadata: value: "60" 3 containerName: "api" 4
- 1
- Spécifie l'unité centrale comme type d'échelle/déclencheur.
- 2
- Spécifie le type de métrique à utiliser, soit
Utilization
ouAverageValue
. - 3
- Spécifie la valeur à partir de laquelle les actions de mise à l'échelle doivent être déclenchées :
-
Lorsque l'on utilise
Utilization
, la valeur cible est la moyenne des mesures de la ressource pour tous les pods concernés, représentée en pourcentage de la valeur demandée de la ressource pour les pods. -
Lorsque l'on utilise
AverageValue
, la valeur cible est la moyenne des mesures de tous les pods concernés.
-
Lorsque l'on utilise
- 4
- Facultatif. Spécifie un conteneur individuel à mettre à l'échelle, en fonction de l'utilisation de la mémoire de ce conteneur uniquement, plutôt que de l'ensemble du pod. Ici, seul le conteneur nommé
api
doit être mis à l'échelle.
2.5.4.3. Comprendre le déclenchement de la mémoire
Vous pouvez mettre à l'échelle les pods en fonction des métriques de mémoire. Ce déclencheur utilise les métriques de cluster comme source de métriques.
L'autoscaler de métriques personnalisées met à l'échelle les pods associés à un objet afin de maintenir l'utilisation moyenne de la mémoire que vous avez spécifiée. L'autoscaler augmente et diminue le nombre de réplicas entre les nombres minimum et maximum pour maintenir l'utilisation de la mémoire spécifiée dans tous les pods. Le déclencheur de mémoire prend en compte l'utilisation de la mémoire de l'ensemble du module. Si le pod possède plusieurs conteneurs, l'utilisation de la mémoire est la somme de tous les conteneurs.
-
Ce déclencheur ne peut pas être utilisé avec la ressource personnalisée
ScaledJob
. -
Lorsque vous utilisez un déclencheur de mémoire pour mettre un objet à l'échelle, l'objet n'est pas mis à l'échelle sur
0
, même si vous utilisez plusieurs déclencheurs.
Exemple d'objet mis à l'échelle avec une cible de mémoire
apiVersion: keda.sh/v1alpha1 kind: ScaledObject metadata: name: memory-scaledobject namespace: my-namespace spec: ... triggers: - type: memory 1 metricType: Utilization 2 metadata: value: "60" 3 containerName: "api" 4
- 1
- Spécifie la mémoire comme type d'échelle/déclencheur.
- 2
- Spécifie le type de métrique à utiliser, soit
Utilization
ouAverageValue
. - 3
- Spécifie la valeur pour laquelle des actions de mise à l'échelle doivent être déclenchées :
-
Lorsque l'on utilise
Utilization
, la valeur cible est la moyenne des mesures de la ressource pour tous les pods concernés, représentée en pourcentage de la valeur demandée de la ressource pour les pods. -
Lorsque l'on utilise
AverageValue
, la valeur cible est la moyenne des mesures de tous les pods concernés.
-
Lorsque l'on utilise
- 4
- Facultatif. Spécifie un conteneur individuel à mettre à l'échelle, en fonction de l'utilisation de la mémoire de ce conteneur uniquement, plutôt que de l'ensemble du pod. Ici, seul le conteneur nommé
api
doit être mis à l'échelle.
2.5.4.4. Comprendre le déclencheur Kafka
Vous pouvez mettre à l'échelle les pods en fonction d'un sujet Apache Kafka ou d'autres services qui prennent en charge le protocole Kafka. L'autoscaler de métriques personnalisées n'augmente pas le nombre de partitions Kafka, sauf si vous définissez le paramètre allowIdleConsumers
sur true
dans l'objet ou le travail mis à l'échelle.
Si le nombre de groupes de consommateurs dépasse le nombre de partitions d'un thème, les groupes de consommateurs supplémentaires restent inactifs.
Pour éviter cela, le nombre de répliques est limité par défaut :
- Le nombre de partitions sur un sujet, si un sujet est spécifié.
- Le nombre de partitions de tous les thèmes du groupe de consommateurs, si aucun thème n'est spécifié.
-
Le site
maxReplicaCount
spécifié dans l'objet mis à l'échelle ou le travail mis à l'échelle CR.
Vous pouvez utiliser le paramètre allowIdleConsumers
pour désactiver ces comportements par défaut.
Exemple d'objet mis à l'échelle avec une cible Kafka
apiVersion: keda.sh/v1alpha1 kind: ScaledObject metadata: name: kafka-scaledobject namespace: my-namespace spec: ... triggers: - type: kafka 1 metadata: topic: my-topic 2 bootstrapServers: my-cluster-kafka-bootstrap.openshift-operators.svc:9092 3 consumerGroup: my-group 4 lagThreshold: '10' 5 activationLagThreshold 6 offsetResetPolicy: 'latest' 7 allowIdleConsumers: true 8 scaleToZeroOnInvalidOffset: false 9 excludePersistentLag: false 10 version: 1.0.0 11 partitionLimitation: '1,2,10-20,31' 12
- 1
- Spécifie Kafka comme type de scaler/déclencheur.
- 2
- Spécifie le nom du sujet Kafka sur lequel Kafka traite le décalage.
- 3
- Spécifie une liste de brokers Kafka séparés par des virgules à laquelle se connecter.
- 4
- Spécifie le nom du groupe de consommateurs Kafka utilisé pour vérifier le décalage sur le sujet et traiter le lag correspondant.
- 5
- Facultatif : Spécifie la valeur cible moyenne pour déclencher les actions de mise à l'échelle. La valeur par défaut est
5
. - 6
- Facultatif : Spécifie la valeur cible pour la phase d'activation.
- 7
- Facultatif : Spécifie la politique de réinitialisation du décalage Kafka pour le consommateur Kafka. Les valeurs disponibles sont :
latest
etearliest
. La valeur par défaut estlatest
. - 8
- Facultatif : Indique si le nombre de répliques Kafka peut dépasser le nombre de partitions sur un sujet.
-
Si
true
, le nombre de répliques Kafka peut dépasser le nombre de partitions sur un sujet. Cela permet d'avoir des consommateurs Kafka inactifs. -
Si
false
, le nombre de répliques Kafka ne peut pas dépasser le nombre de partitions sur un sujet. Il s'agit de la valeur par défaut.
-
Si
- 9
- Spécifie le comportement du déclencheur lorsqu'une partition Kafka n'a pas de décalage valide.
-
Si
true
, les consommateurs sont ramenés à zéro pour cette partition. -
Si
false
, le scaler conserve un seul consommateur pour cette partition. Il s'agit de la valeur par défaut.
-
Si
- 10
- Facultatif : Spécifie si le déclencheur inclut ou exclut le décalage de partition pour les partitions dont le décalage actuel est le même que le décalage actuel du cycle d'interrogation précédent.
-
Si
true
, le mesureur exclut le décalage de partition dans ces partitions. -
Si
false
, le déclencheur inclut tous les décalages de consommation dans toutes les partitions. Il s'agit de la valeur par défaut.
-
Si
- 11
- Facultatif : Spécifie la version de vos brokers Kafka. La valeur par défaut est
1.0.0
. - 12
- Facultatif : Spécifie une liste d'ID de partitions séparées par des virgules pour étendre la mise à l'échelle. Si cette option est activée, seuls les ID répertoriés sont pris en compte lors du calcul du décalage. Par défaut, toutes les partitions sont prises en compte.
2.5.5. Comprendre les métriques personnalisées Autoscaler trigger authentications
Une authentification de déclenchement vous permet d'inclure des informations d'authentification dans un objet ou un travail de mise à l'échelle qui peut être utilisé par les conteneurs associés. Vous pouvez utiliser des authentifications de déclenchement pour transmettre des secrets OpenShift Container Platform, des mécanismes d'authentification de pods natifs de la plateforme, des variables d'environnement, etc.
Vous définissez un objet TriggerAuthentication
dans le même espace de noms que l'objet que vous souhaitez mettre à l'échelle. Cette authentification de déclenchement ne peut être utilisée que par les objets de cet espace de noms.
Pour partager des informations d'identification entre des objets de plusieurs espaces de noms, vous pouvez également créer un objet ClusterTriggerAuthentication
qui peut être utilisé dans tous les espaces de noms.
Les authentifications par déclenchement et les authentifications par déclenchement en grappe utilisent la même configuration. Toutefois, l'authentification par déclenchement de grappe nécessite un paramètre supplémentaire kind
dans la référence d'authentification de l'objet mis à l'échelle.
Exemple : déclencher l'authentification avec un secret
kind: TriggerAuthentication apiVersion: keda.sh/v1alpha1 metadata: name: secret-triggerauthentication namespace: my-namespace 1 spec: secretTargetRef: 2 - parameter: user-name 3 name: my-secret 4 key: USER_NAME 5 - parameter: password name: my-secret key: USER_PASSWORD
- 1
- Spécifie l'espace de noms de l'objet que vous souhaitez mettre à l'échelle.
- 2
- Spécifie que l'authentification de ce déclencheur utilise un secret pour l'autorisation.
- 3
- Spécifie le paramètre d'authentification à fournir en utilisant le secret.
- 4
- Spécifie le nom du secret à utiliser.
- 5
- Spécifie la clé du secret à utiliser avec le paramètre spécifié.
Exemple d'authentification par déclenchement de cluster avec un secret
kind: ClusterTriggerAuthentication apiVersion: keda.sh/v1alpha1 metadata: 1 name: secret-cluster-triggerauthentication spec: secretTargetRef: 2 - parameter: user-name 3 name: secret-name 4 key: USER_NAME 5 - parameter: user-password name: secret-name key: USER_PASSWORD
- 1
- Notez qu'aucun espace de noms n'est utilisé avec un déclencheur d'authentification en grappe.
- 2
- Spécifie que l'authentification de ce déclencheur utilise un secret pour l'autorisation.
- 3
- Spécifie le paramètre d'authentification à fournir en utilisant le secret.
- 4
- Spécifie le nom du secret à utiliser.
- 5
- Spécifie la clé du secret à utiliser avec le paramètre spécifié.
Exemple de déclenchement de l'authentification avec un jeton
kind: TriggerAuthentication apiVersion: keda.sh/v1alpha1 metadata: name: token-triggerauthentication namespace: my-namespace 1 spec: secretTargetRef: 2 - parameter: bearerToken 3 name: my-token-2vzfq 4 key: token 5 - parameter: ca name: my-token-2vzfq key: ca.crt
- 1
- Spécifie l'espace de noms de l'objet que vous souhaitez mettre à l'échelle.
- 2
- Spécifie que l'authentification de ce déclencheur utilise un secret pour l'autorisation.
- 3
- Spécifie le paramètre d'authentification à fournir en utilisant le jeton.
- 4
- Spécifie le nom du jeton à utiliser.
- 5
- Spécifie la clé du jeton à utiliser avec le paramètre spécifié.
Exemple de déclenchement de l'authentification à l'aide d'une variable d'environnement
kind: TriggerAuthentication apiVersion: keda.sh/v1alpha1 metadata: name: env-var-triggerauthentication namespace: my-namespace 1 spec: env: 2 - parameter: access_key 3 name: ACCESS_KEY 4 containerName: my-container 5
- 1
- Spécifie l'espace de noms de l'objet que vous souhaitez mettre à l'échelle.
- 2
- Spécifie que ce déclencheur d'authentification utilise des variables d'environnement pour l'autorisation.
- 3
- Spécifiez le paramètre à définir avec cette variable.
- 4
- Indiquez le nom de la variable d'environnement.
- 5
- Facultatif : Indiquez un conteneur qui nécessite une authentification. Le conteneur doit se trouver dans la même ressource que celle référencée par
scaleTargetRef
dans l'objet mis à l'échelle.
Exemple d'authentification par déclenchement avec des fournisseurs d'authentification de pods
kind: TriggerAuthentication apiVersion: keda.sh/v1alpha1 metadata: name: pod-id-triggerauthentication namespace: my-namespace 1 spec: podIdentity: 2 provider: aws-eks 3
- 1
- Spécifie l'espace de noms de l'objet que vous souhaitez mettre à l'échelle.
- 2
- Spécifie que ce déclencheur d'authentification utilise une méthode d'authentification podale native pour l'autorisation.
- 3
- Spécifie l'identité d'un pod. Les valeurs prises en charge sont
none
,azure
,aws-eks
ouaws-kiam
. La valeur par défaut estnone
.
Ressources supplémentaires
- Pour plus d'informations sur les secrets de OpenShift Container Platform, voir Fournir des données sensibles aux pods.
2.5.5.1. Utilisation des authentifications par déclenchement
Vous utilisez les authentifications de déclenchement et les authentifications de déclenchement de cluster en utilisant une ressource personnalisée pour créer l'authentification, puis en ajoutant une référence à un objet ou à un travail mis à l'échelle.
Conditions préalables
- L'opérateur Custom Metrics Autoscaler doit être installé.
Si vous utilisez un secret, l'objet
Secret
doit exister, par exemple :Exemple de secret
apiVersion: v1 kind: Secret metadata: name: my-secret data: user-name: <base64_USER_NAME> password: <base64_USER_PASSWORD>
Procédure
Créer l'objet
TriggerAuthentication
ouClusterTriggerAuthentication
.Créer un fichier YAML qui définit l'objet :
Exemple : déclencher l'authentification avec un secret
kind: TriggerAuthentication apiVersion: keda.sh/v1alpha1 metadata: name: prom-triggerauthentication namespace: my-namespace spec: secretTargetRef: - parameter: user-name name: my-secret key: USER_NAME - parameter: password name: my-secret key: USER_PASSWORD
Créer l'objet
TriggerAuthentication
:oc create -f <nom-de-fichier>.yaml
Créer ou modifier un fichier YAML
ScaledObject
:Exemple d'objet mis à l'échelle
apiVersion: keda.sh/v1alpha1 kind: ScaledObject metadata: name: scaledobject namespace: my-namespace spec: scaleTargetRef: name: example-deployment maxReplicaCount: 100 minReplicaCount: 0 pollingInterval: 30 triggers: - authenticationRef: type: prometheus metadata: serverAddress: https://thanos-querier.openshift-monitoring.svc.cluster.local:9092 namespace: kedatest # replace <NAMESPACE> metricName: http_requests_total threshold: '5' query: sum(rate(http_requests_total{job="test-app"}[1m])) authModes: "basic" - authenticationRef: 1 name: prom-triggerauthentication metadata: name: prom-triggerauthentication type: object - authenticationRef: 2 name: prom-cluster-triggerauthentication kind: ClusterTriggerAuthentication metadata: name: prom-cluster-triggerauthentication type: object
NoteIl n'est pas nécessaire de spécifier à la fois une authentification de déclenchement de l'espace de noms et une authentification de déclenchement du cluster.
Créer l'objet. Par exemple :
$ oc apply -f <nom-de-fichier>
2.5.6. Configurer l'autoscaler de métriques personnalisé pour utiliser la surveillance de OpenShift Container Platform
Vous pouvez utiliser la surveillance Prometheus de OpenShift Container Platform installée comme source pour les métriques utilisées par l'autoscaler de métriques personnalisé. Cependant, vous devez effectuer quelques configurations supplémentaires.
Ces étapes ne sont pas nécessaires pour une source Prometheus externe.
Vous devez effectuer les tâches suivantes, décrites dans cette section :
- Créer un compte de service pour obtenir un jeton.
- Créer un rôle.
- Ajoutez ce rôle au compte de service.
- Référencer le jeton dans l'objet d'authentification du déclencheur utilisé par Prometheus.
Conditions préalables
- La surveillance de OpenShift Container Platform doit être installée.
- La surveillance des charges de travail définies par l'utilisateur doit être activée dans la surveillance de OpenShift Container Platform, comme décrit dans la section Creating a user-defined workload monitoring config map.
- L'opérateur Custom Metrics Autoscaler doit être installé.
Procédure
Passez au projet contenant l'objet que vous souhaitez mettre à l'échelle :
$ oc project my-project
Utilisez la commande suivante pour créer un compte de service, si votre cluster n'en possède pas :
oc create serviceaccount <service_account> $ oc create serviceaccount <service_account>
où :
- -YRFFGUNA_compte_de_service>
- Spécifie le nom du compte de service.
Utilisez la commande suivante pour localiser le jeton attribué au compte de service :
oc describe serviceaccount <service_account> $ oc describe serviceaccount <service_account>
où :
- -YRFFGUNA_compte_de_service>
- Spécifie le nom du compte de service.
Exemple de sortie
Name: thanos Namespace: my-project Labels: <none> Annotations: <none> Image pull secrets: thanos-dockercfg-nnwgj Mountable secrets: thanos-dockercfg-nnwgj Tokens: thanos-token-9g4n5 1 Events: <none>
- 1
- Utilisez ce jeton dans l'authentification du déclencheur.
Créer un déclencheur d'authentification avec le jeton de compte de service :
Créez un fichier YAML similaire au suivant :
apiVersion: keda.sh/v1alpha1 kind: TriggerAuthentication metadata: name: keda-trigger-auth-prometheus spec: secretTargetRef: 1 - parameter: bearerToken 2 name: thanos-token-9g4n5 3 key: token 4 - parameter: ca name: thanos-token-9g4n5 key: ca.crt
Créer l'objet CR :
oc create -f <nom-de-fichier>.yaml
Créer un rôle pour lire les métriques de Thanos :
Créez un fichier YAML avec les paramètres suivants :
apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: name: thanos-metrics-reader rules: - apiGroups: - "" resources: - pods verbs: - get - apiGroups: - metrics.k8s.io resources: - pods - nodes verbs: - get - list - watch
Créer l'objet CR :
oc create -f <nom-de-fichier>.yaml
Créer un lien de rôle pour la lecture des métriques de Thanos :
Créez un fichier YAML similaire au suivant :
apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: thanos-metrics-reader 1 namespace: my-project 2 roleRef: apiGroup: rbac.authorization.k8s.io kind: Role name: thanos-metrics-reader subjects: - kind: ServiceAccount name: thanos 3 namespace: my-project 4
Créer l'objet CR :
oc create -f <nom-de-fichier>.yaml
Vous pouvez maintenant déployer un objet ou un travail mis à l'échelle pour activer la mise à l'échelle automatique de votre application, comme décrit dans les sections suivantes. Pour utiliser la surveillance d'OpenShift Container Platform comme source, dans le déclencheur ou le scaler, spécifiez le type prometheus
et utilisez https://thanos-querier.openshift-monitoring.svc.cluster.local:9092
comme serverAddress
.
Ressources supplémentaires
- Pour plus d'informations sur l'activation de la surveillance des charges de travail définies par l'utilisateur, voir Création d'une carte de configuration pour la surveillance des charges de travail définies par l'utilisateur.
2.5.7. Mise en pause de l'autoscaler de métriques personnalisées pour une charge de travail
Vous pouvez interrompre la mise à l'échelle automatique d'une charge de travail, si nécessaire, en ajoutant l'annotation autoscaling.keda.sh/paused-replicas
à l'autoscaler de métriques personnalisé pour cette charge de travail. L'autoscaler de métriques personnalisées met à l'échelle les réplicas pour cette charge de travail jusqu'à la valeur spécifiée et interrompt l'autoscaling jusqu'à ce que l'annotation soit supprimée.
apiVersion: keda.sh/v1alpha1 kind: ScaledObject metadata: annotations: autoscaling.keda.sh/paused-replicas: "4" ...
Pour redémarrer l'autoscaling, modifiez le CR ScaledObject
pour supprimer l'annotation.
Par exemple, vous pouvez vouloir mettre en pause l'autoscaling avant d'effectuer la maintenance du cluster ou pour éviter la pénurie de ressources en supprimant les charges de travail non critiques.
Procédure
Utilisez la commande suivante pour éditer le
ScaledObject
CR pour votre charge de travail :$ oc edit ScaledObject scaledobject
Ajouter l'annotation
autoscaling.keda.sh/paused-replicas
avec n'importe quelle valeur :apiVersion: keda.sh/v1alpha1 kind: ScaledObject metadata: annotations: autoscaling.keda.sh/paused-replicas: "4" 1 creationTimestamp: "2023-02-08T14:41:01Z" generation: 1 name: scaledobject namespace: my-project resourceVersion: "65729" uid: f5aec682-acdf-4232-a783-58b5b82f5dd0
- 1
- Spécifie que l'opérateur de mise à l'échelle automatique des métriques personnalisées doit mettre à l'échelle les répliques jusqu'à la valeur spécifiée et arrêter la mise à l'échelle automatique.
2.5.8. Configuration de la journalisation des audits
Vous pouvez rassembler des journaux d'audit, qui sont un ensemble chronologique d'enregistrements relatifs à la sécurité documentant la séquence des activités qui ont affecté le système par des utilisateurs individuels, des administrateurs ou d'autres composants du système.
Par exemple, les journaux d'audit peuvent vous aider à comprendre d'où provient une demande d'autoscaling. Il s'agit d'une information clé lorsque les backends sont surchargés par des requêtes d'autoscaling effectuées par des applications utilisateur et que vous devez déterminer quelle est l'application qui pose problème. Vous pouvez configurer l'audit pour le Custom Metrics Autoscaler Operator en modifiant la ressource personnalisée KedaController
. Les journaux sont envoyés à un fichier journal d'audit sur un volume sécurisé à l'aide d'une revendication de volume persistant dans le CR KedaController
.
Conditions préalables
- L'opérateur Custom Metrics Autoscaler doit être installé.
Procédure
Modifiez la ressource personnalisée
KedaController
pour ajouter la stropheauditConfig
:kind: KedaController apiVersion: keda.sh/v1alpha1 metadata: name: keda namespace: openshift-keda spec: ... metricsServer: ... auditConfig: logFormat: "json" 1 logOutputVolumeClaim: "pvc-audit-log" 2 policy: rules: 3 - level: Metadata omitStages: "RequestReceived" 4 omitManagedFields: false 5 lifetime: 6 maxAge: "2" maxBackup: "1" maxSize: "50"
- 1
- Spécifie le format de sortie du journal d'audit, soit
legacy
oujson
. - 2
- Spécifie une revendication de volume persistant existante pour le stockage des données de journalisation. Toutes les demandes adressées au serveur API sont consignées dans cette revendication de volume persistant. Si vous laissez ce champ vide, les données du journal sont envoyées à stdout.
- 3
- Spécifie quels événements doivent être enregistrés et quelles données doivent être incluses :
-
None
: Ne pas enregistrer les événements. -
Metadata
: N'enregistrez que les métadonnées de la demande, telles que l'utilisateur, l'horodatage, etc. Ne pas enregistrer le texte de la demande et le texte de la réponse. Il s'agit de la valeur par défaut. -
Request
: Enregistrer uniquement les métadonnées et le texte de la demande, mais pas le texte de la réponse. Cette option ne s'applique pas aux demandes ne portant pas sur des ressources. -
RequestResponse
: Métadonnées de l'événement, texte de la demande et texte de la réponse. Cette option ne s'applique pas aux demandes ne portant pas sur des ressources.
-
- 4
- Spécifie les étapes pour lesquelles aucun événement n'est créé.
- 5
- Indique s'il faut omettre les champs gérés des corps de demande et de réponse dans le journal d'audit de l'API, soit
true
pour omettre les champs, soitfalse
pour les inclure. - 6
- Spécifie la taille et la durée de vie des journaux d'audit.
-
maxAge
: Nombre maximal de jours pendant lesquels les fichiers journaux d'audit doivent être conservés, sur la base de l'horodatage encodé dans leur nom de fichier. -
maxBackup
: Nombre maximal de fichiers journaux d'audit à conserver. La valeur0
permet de conserver tous les fichiers journaux d'audit. -
maxSize
: Taille maximale en mégaoctets d'un fichier journal d'audit avant qu'il ne fasse l'objet d'une rotation.
-
Vérification
Consulter directement le fichier journal de l'audit :
Obtenir le nom du pod
keda-metrics-apiserver-*
:oc get pod -n openshift-keda
Exemple de sortie
NAME READY STATUS RESTARTS AGE custom-metrics-autoscaler-operator-5cb44cd75d-9v4lv 1/1 Running 0 8m20s keda-metrics-apiserver-65c7cc44fd-rrl4r 1/1 Running 0 2m55s keda-operator-776cbb6768-zpj5b 1/1 Running 0 2m55s
Affichez les données du journal à l'aide d'une commande similaire à la suivante :
oc logs keda-metrics-apiserver-<hash>|grep -i metadata 1
- 1
- Facultatif : vous pouvez utiliser la commande
grep
pour spécifier le niveau de journal à afficher :Metadata
,Request
,RequestResponse
.
Par exemple :
$ oc logs keda-metrics-apiserver-65c7cc44fd-rrl4r|grep -i metadata
Exemple de sortie
... {"kind":"Event","apiVersion":"audit.k8s.io/v1","level":"Metadata","auditID":"4c81d41b-3dab-4675-90ce-20b87ce24013","stage":"ResponseComplete","requestURI":"/healthz","verb":"get","user":{"username":"system:anonymous","groups":["system:unauthenticated"]},"sourceIPs":["10.131.0.1"],"userAgent":"kube-probe/1.26","responseStatus":{"metadata":{},"code":200},"requestReceivedTimestamp":"2023-02-16T13:00:03.554567Z","stageTimestamp":"2023-02-16T13:00:03.555032Z","annotations":{"authorization.k8s.io/decision":"allow","authorization.k8s.io/reason":""}} ...
Vous pouvez également consulter un journal spécifique :
Utilisez une commande similaire à la suivante pour vous connecter au pod
keda-metrics-apiserver-*
:oc rsh pod/keda-metrics-apiserver-<hash> -n openshift-keda
Par exemple :
$ oc rsh pod/keda-metrics-apiserver-65c7cc44fd-rrl4r -n openshift-keda
Allez dans le répertoire
/var/audit-policy/
:sh-4.4$ cd /var/audit-policy/
Liste des journaux disponibles :
sh-4.4$ ls
Exemple de sortie
log-2023.02.17-14:50 policy.yaml
Consulter le journal, si nécessaire :
sh-4.4$ cat <log_name>/<pvc_name>|grep -i <log_level> 1
- 1
- Facultatif : vous pouvez utiliser la commande
grep
pour spécifier le niveau de journal à afficher :Metadata
,Request
,RequestResponse
.
Par exemple :
sh-4.4$ cat log-2023.02.17-14:50/pvc-audit-log|grep -i Request
Exemple de sortie
... {"kind":"Event","apiVersion":"audit.k8s.io/v1","level":"Request","auditID":"63e7f68c-04ec-4f4d-8749-bf1656572a41","stage":"ResponseComplete","requestURI":"/openapi/v2","verb":"get","user":{"username":"system:aggregator","groups":["system:authenticated"]},"sourceIPs":["10.128.0.1"],"responseStatus":{"metadata":{},"code":304},"requestReceivedTimestamp":"2023-02-17T13:12:55.035478Z","stageTimestamp":"2023-02-17T13:12:55.038346Z","annotations":{"authorization.k8s.io/decision":"allow","authorization.k8s.io/reason":"RBAC: allowed by ClusterRoleBinding \"system:discovery\" of ClusterRole \"system:discovery\" to Group \"system:authenticated\""}} ...
Ressources supplémentaires
2.5.9. Collecte de données de débogage
Lorsque vous ouvrez un dossier d'assistance, il est utile de fournir des informations de débogage sur votre cluster à l'équipe d'assistance de Red Hat.
Il est recommandé de fournir les informations suivantes :
-
Données recueillies à l'aide de l'outil
must-gather
. - L'identifiant unique du cluster.
Vous pouvez utiliser l'outil must-gather
pour collecter des données sur l'opérateur Custom Metrics Autoscaler et ses composants, notamment
-
L'espace de noms
openshift-keda
et ses objets enfants. - Les objets d'installation Custom Metric Autoscaler Operator.
- Les objets Custom Metric Autoscaler Operator CRD.
La commande suivante exécute l'outil must-gather
pour l'opérateur Custom Metrics Autoscaler :
$ oc adm must-gather --image="$(oc get packagemanifests openshift-custom-metrics-autoscaler-operator \ -n openshift-marketplace \ -o jsonpath='{.status.channels[?(@.name=="stable")].currentCSVDesc.annotations.containerImage}')"
La commande standard d'OpenShift Container Platform must-gather
, oc adm must-gather
, ne collecte pas les données Custom Metrics Autoscaler Operator.
Conditions préalables
-
Accès au cluster en tant qu'utilisateur ayant le rôle
cluster-admin
. -
L'OpenShift Container Platform CLI (
oc
) est installé.
Procédure
Accédez au répertoire dans lequel vous souhaitez stocker les données
must-gather
.NoteSi votre cluster utilise un réseau restreint, vous devez prendre des mesures supplémentaires. Si votre registre miroir dispose d'une autorité de certification approuvée, vous devez d'abord ajouter cette dernière au cluster. Pour tous les clusters sur des réseaux restreints, vous devez importer l'image par défaut
must-gather
en tant que flux d'images en exécutant la commande suivante.$ oc import-image is/must-gather -n openshift
Effectuez l'une des opérations suivantes :
Pour obtenir uniquement les données Custom Metrics Autoscaler Operator
must-gather
, utilisez la commande suivante :$ oc adm must-gather --image="$(oc get packagemanifests openshift-custom-metrics-autoscaler-operator \ -n openshift-marketplace \ -o jsonpath='{.status.channels[?(@.name=="stable")].currentCSVDesc.annotations.containerImage}')"
L'image personnalisée de la commande
must-gather
est tirée directement des manifestes du paquet Operator, de sorte qu'elle fonctionne sur n'importe quel cluster où l'opérateur Custom Metric Autoscaler est disponible.Pour collecter les données par défaut
must-gather
en plus des informations de l'opérateur Autoscaler de métriques personnalisées :Utilisez la commande suivante pour obtenir l'image Custom Metrics Autoscaler Operator et la définir comme variable d'environnement :
$ IMAGE="$(oc get packagemanifests openshift-custom-metrics-autoscaler-operator \ -n openshift-marketplace \ -o jsonpath='{.status.channels[?(@.name=="stable")].currentCSVDesc.annotations.containerImage}')"
Utilisez le site
oc adm must-gather
avec l'image Custom Metrics Autoscaler Operator :$ oc adm must-gather --image-stream=openshift/must-gather --image=${IMAGE}
Exemple 2.1. Exemple de sortie de collecte obligatoire pour le Custom Metric Autoscaler :
└── openshift-keda ├── apps │ ├── daemonsets.yaml │ ├── deployments.yaml │ ├── replicasets.yaml │ └── statefulsets.yaml ├── apps.openshift.io │ └── deploymentconfigs.yaml ├── autoscaling │ └── horizontalpodautoscalers.yaml ├── batch │ ├── cronjobs.yaml │ └── jobs.yaml ├── build.openshift.io │ ├── buildconfigs.yaml │ └── builds.yaml ├── core │ ├── configmaps.yaml │ ├── endpoints.yaml │ ├── events.yaml │ ├── persistentvolumeclaims.yaml │ ├── pods.yaml │ ├── replicationcontrollers.yaml │ ├── secrets.yaml │ └── services.yaml ├── discovery.k8s.io │ └── endpointslices.yaml ├── image.openshift.io │ └── imagestreams.yaml ├── k8s.ovn.org │ ├── egressfirewalls.yaml │ └── egressqoses.yaml ├── keda.sh │ ├── kedacontrollers │ │ └── keda.yaml │ ├── scaledobjects │ │ └── example-scaledobject.yaml │ └── triggerauthentications │ └── example-triggerauthentication.yaml ├── monitoring.coreos.com │ └── servicemonitors.yaml ├── networking.k8s.io │ └── networkpolicies.yaml ├── openshift-keda.yaml ├── pods │ ├── custom-metrics-autoscaler-operator-58bd9f458-ptgwx │ │ ├── custom-metrics-autoscaler-operator │ │ │ └── custom-metrics-autoscaler-operator │ │ │ └── logs │ │ │ ├── current.log │ │ │ ├── previous.insecure.log │ │ │ └── previous.log │ │ └── custom-metrics-autoscaler-operator-58bd9f458-ptgwx.yaml │ ├── custom-metrics-autoscaler-operator-58bd9f458-thbsh │ │ └── custom-metrics-autoscaler-operator │ │ └── custom-metrics-autoscaler-operator │ │ └── logs │ ├── keda-metrics-apiserver-65c7cc44fd-6wq4g │ │ ├── keda-metrics-apiserver │ │ │ └── keda-metrics-apiserver │ │ │ └── logs │ │ │ ├── current.log │ │ │ ├── previous.insecure.log │ │ │ └── previous.log │ │ └── keda-metrics-apiserver-65c7cc44fd-6wq4g.yaml │ └── keda-operator-776cbb6768-fb6m5 │ ├── keda-operator │ │ └── keda-operator │ │ └── logs │ │ ├── current.log │ │ ├── previous.insecure.log │ │ └── previous.log │ └── keda-operator-776cbb6768-fb6m5.yaml ├── policy │ └── poddisruptionbudgets.yaml └── route.openshift.io └── routes.yaml
Créez un fichier compressé à partir du répertoire
must-gather
qui a été créé dans votre répertoire de travail. Par exemple, sur un ordinateur utilisant un système d'exploitation Linux, exécutez la commande suivante :$ tar cvaf must-gather.tar.gz must-gather.local.5421342344627712289/ 1
- 1
- Remplacez
must-gather-local.5421342344627712289/
par le nom du répertoire.
- Joignez le fichier compressé à votre demande d'assistance sur le portail client de Red Hat.
Ressources supplémentaires
2.5.10. Accès aux métriques de performance
L'opérateur Autoscaler Custom Metrics expose des mesures prêtes à l'emploi qu'il extrait du composant de surveillance du cluster. Vous pouvez interroger les mesures à l'aide du Prometheus Query Language (PromQL) pour analyser et diagnostiquer les problèmes. Toutes les mesures sont réinitialisées lorsque le pod contrôleur redémarre.
Vous pouvez accéder aux métriques et exécuter des requêtes en utilisant la console web d'OpenShift Container Platform.
Procédure
- Sélectionnez la perspective Administrator dans la console web de OpenShift Container Platform.
-
Sélectionnez Observe
Metrics. - Pour créer une requête personnalisée, ajoutez votre requête PromQL au champ Expression.
- Pour ajouter plusieurs requêtes, sélectionnez Add Query.
2.5.10.1. Métriques fournies
Le Custom Metrics Autoscaler Operator expose les métriques suivantes, que vous pouvez visualiser en utilisant la console web d'OpenShift Container Platform.
Nom de la métrique | Description |
---|---|
|
Indique si l'analyseur est actif ou inactif. Une valeur de |
| Valeur actuelle de la métrique de chaque scaler, utilisée par l'Horizontal Pod Autoscaler (HPA) dans le calcul de la moyenne cible. |
| Le temps de latence pour récupérer la métrique actuelle de chaque mesureur. |
| Le nombre d'erreurs qui se sont produites pour chaque mesureur. |
| Le nombre total d'erreurs rencontrées pour tous les scalers. |
| Le nombre d'erreurs qui se sont produites pour chaque objet mis à l'échelle. |
| Nombre total de ressources personnalisées Custom Metrics Autoscaler dans chaque espace de noms pour chaque type de ressource personnalisée. |
| Le nombre total de déclencheurs par type de déclencheur. |
Métriques personnalisées Métriques Autoscaler Admission webhook
Le webhook Custom Metrics Autoscaler Admission expose également les métriques Prometheus suivantes.
Nom de la métrique | Description |
---|---|
| Le nombre de validations d'objets mis à l'échelle. |
| Le nombre d'erreurs de validation. |
2.5.11. Comprendre comment ajouter des autoscalers de métriques personnalisés
Pour ajouter un autoscaler de métriques personnalisé, créez une ressource personnalisée ScaledObject
pour un déploiement, un ensemble avec état ou une ressource personnalisée. Créez une ressource personnalisée ScaledJob
pour un travail.
Vous ne pouvez créer qu'un seul objet ou travail mis à l'échelle pour chaque charge de travail que vous souhaitez mettre à l'échelle. Vous ne pouvez pas non plus utiliser un objet ou un travail mis à l'échelle et le pod autoscaler horizontal (HPA) sur la même charge de travail.
2.5.11.1. Ajout d'un autoscaler de métriques personnalisé à une charge de travail
Vous pouvez créer un autoscaler de métriques personnalisé pour une charge de travail créée par un objet Deployment
, StatefulSet
ou custom resource
.
Conditions préalables
- L'opérateur Custom Metrics Autoscaler doit être installé.
Si vous utilisez un autoscaler de métriques personnalisé pour une mise à l'échelle basée sur le CPU ou la mémoire :
L'administrateur de votre cluster doit avoir correctement configuré les métriques du cluster. Vous pouvez utiliser la commande
oc describe PodMetrics <pod-name>
pour déterminer si les métriques sont configurées. Si les métriques sont configurées, la sortie est similaire à ce qui suit, avec le CPU et la mémoire affichés sous Usage.$ oc describe PodMetrics openshift-kube-scheduler-ip-10-0-135-131.ec2.internal
Exemple de sortie
Name: openshift-kube-scheduler-ip-10-0-135-131.ec2.internal Namespace: openshift-kube-scheduler Labels: <none> Annotations: <none> API Version: metrics.k8s.io/v1beta1 Containers: Name: wait-for-host-port Usage: Memory: 0 Name: scheduler Usage: Cpu: 8m Memory: 45440Ki Kind: PodMetrics Metadata: Creation Timestamp: 2019-05-23T18:47:56Z Self Link: /apis/metrics.k8s.io/v1beta1/namespaces/openshift-kube-scheduler/pods/openshift-kube-scheduler-ip-10-0-135-131.ec2.internal Timestamp: 2019-05-23T18:47:56Z Window: 1m0s Events: <none>
Les pods associés à l'objet que vous souhaitez mettre à l'échelle doivent inclure les limites de mémoire et de CPU spécifiées. Par exemple :
Exemple de spécification de pod
apiVersion: v1 kind: Pod ... spec: containers: - name: app image: images.my-company.example/app:v4 resources: limits: memory: "128Mi" cpu: "500m"
Procédure
Créez un fichier YAML similaire au suivant. Seuls le nom
<2>
, le nom de l'objet<4>
et le type d'objet<5>
sont nécessaires :Exemple d'objet mis à l'échelle
apiVersion: keda.sh/v1alpha1 kind: ScaledObject metadata: annotations: autoscaling.keda.sh/paused-replicas: "0" 1 name: scaledobject 2 namespace: my-namespace spec: scaleTargetRef: apiVersion: apps/v1 3 name: example-deployment 4 kind: Deployment 5 envSourceContainerName: .spec.template.spec.containers[0] 6 cooldownPeriod: 200 7 maxReplicaCount: 100 8 minReplicaCount: 0 9 metricsServer: 10 auditConfig: logFormat: "json" logOutputVolumeClaim: "persistentVolumeClaimName" policy: rules: - level: Metadata omitStages: "RequestReceived" omitManagedFields: false lifetime: maxAge: "2" maxBackup: "1" maxSize: "50" fallback: 11 failureThreshold: 3 replicas: 6 pollingInterval: 30 12 advanced: restoreToOriginalReplicaCount: false 13 horizontalPodAutoscalerConfig: name: keda-hpa-scale-down 14 behavior: 15 scaleDown: stabilizationWindowSeconds: 300 policies: - type: Percent value: 100 periodSeconds: 15 triggers: - type: prometheus 16 metadata: serverAddress: https://thanos-querier.openshift-monitoring.svc.cluster.local:9092 namespace: kedatest metricName: http_requests_total threshold: '5' query: sum(rate(http_requests_total{job="test-app"}[1m])) authModes: "basic" - authenticationRef: 17 name: prom-triggerauthentication metadata: name: prom-triggerauthentication type: object - authenticationRef: 18 name: prom-cluster-triggerauthentication metadata: name: prom-cluster-triggerauthentication type: object
- 1
- Facultatif : Spécifie que l'opérateur Custom Metrics Autoscaler doit mettre à l'échelle les répliques jusqu'à la valeur spécifiée et arrêter la mise à l'échelle automatique, comme décrit dans la section "Mise en pause du Custom Metrics Autoscaler pour une charge de travail".
- 2
- Spécifie un nom pour cet autoscaler de métriques personnalisé.
- 3
- Facultatif : Spécifie la version API de la ressource cible. La valeur par défaut est
apps/v1
. - 4
- Spécifie le nom de l'objet que vous souhaitez mettre à l'échelle.
- 5
- Spécifie que le site
kind
estDeployment
,StatefulSet
ouCustomResource
. - 6
- Facultatif : Spécifie le nom du conteneur dans la ressource cible, à partir duquel l'autoscaler de métriques personnalisées obtient les variables d'environnement contenant les secrets, etc. La valeur par défaut est
.spec.template.spec.containers[0]
. - 7
- Facultatif. Spécifie la période en secondes à attendre après le signalement du dernier déclencheur avant de ramener le déploiement à
0
siminReplicaCount
est défini sur0
. La valeur par défaut est300
. - 8
- Facultatif : Spécifie le nombre maximum de répliques lors de la mise à l'échelle. La valeur par défaut est
100
. - 9
- Facultatif : Spécifie le nombre minimum de répliques lors de la réduction d'échelle.
- 10
- Facultatif : Spécifie les paramètres des journaux d'audit, comme décrit dans la section "Configuration de la journalisation des audits".
- 11
- Facultatif : Spécifie le nombre de répliques à utiliser si un scaler ne parvient pas à obtenir les métriques de la source pendant le nombre de fois défini par le paramètre
failureThreshold
. Pour plus d'informations sur le comportement de repli, voir la documentation KEDA. - 12
- Facultatif : Spécifie l'intervalle en secondes pour vérifier chaque déclencheur. La valeur par défaut est
30
. - 13
- Facultatif : Indique s'il faut ramener la ressource cible au nombre de répliques d'origine après la suppression de l'objet mis à l'échelle. La valeur par défaut est
false
, qui conserve le nombre de répliques tel qu'il est lorsque l'objet mis à l'échelle est supprimé. - 14
- Facultatif : Spécifie un nom pour le pod horizontal autoscaler. La valeur par défaut est
keda-hpa-{scaled-object-name}
. - 15
- Facultatif : Spécifie une politique de mise à l'échelle à utiliser pour contrôler le taux de mise à l'échelle des pods à la hausse ou à la baisse, comme décrit dans la section "Politiques de mise à l'échelle".
- 16
- Spécifie le déclencheur à utiliser comme base pour la mise à l'échelle, comme décrit dans la section "Understanding the custom metrics autoscaler triggers" (Comprendre les déclencheurs d'autoscaler de métriques personnalisées). Cet exemple utilise la surveillance de OpenShift Container Platform.
- 17
- Facultatif : Spécifie une authentification de déclenchement, comme décrit dans la section "Création d'une authentification de déclenchement autoscaler de métriques personnalisée".
- 18
- Facultatif : Spécifie une authentification de déclenchement de cluster, comme décrit dans la section "Création d'une authentification de déclenchement autoscaler de métriques personnalisée".
NoteIl n'est pas nécessaire de spécifier à la fois une authentification de déclenchement de l'espace de noms et une authentification de déclenchement du cluster.
Créez l'autoscaler de métriques personnalisé :
oc create -f <nom-de-fichier>.yaml
Vérification
Affichez la sortie de la commande pour vérifier que l'autoscaler de métriques personnalisé a été créé :
oc get scaledobject <scaled_object_name>
Exemple de sortie
NAME SCALETARGETKIND SCALETARGETNAME MIN MAX TRIGGERS AUTHENTICATION READY ACTIVE FALLBACK AGE scaledobject apps/v1.Deployment example-deployment 0 50 prometheus prom-triggerauthentication True True True 17s
Notez les champs suivants dans le résultat :
-
TRIGGERS
: Indique le déclencheur, ou l'échelle, utilisé. -
AUTHENTICATION
: Indique le nom de l'authentification de déclenchement utilisée. READY
: Indique si l'objet mis à l'échelle est prêt à commencer la mise à l'échelle :-
Si
True
, l'objet mis à l'échelle est prêt. -
Si
False
, l'objet mis à l'échelle n'est pas prêt en raison d'un problème dans un ou plusieurs des objets que vous avez créés.
-
Si
ACTIVE
: Indique si la mise à l'échelle est en cours :-
Si
True
, il y a mise à l'échelle. -
Si
False
, la mise à l'échelle n'a pas lieu parce qu'il n'y a pas de métriques ou qu'il y a un problème dans un ou plusieurs des objets que vous avez créés.
-
Si
FALLBACK
: Indique si l'autoscaler de métriques personnalisé est capable d'obtenir des métriques de la source-
Si
False
, l'autoscaler de métriques personnalisées reçoit des métriques. -
Si
True
, l'autoscaler de métriques personnalisées reçoit des métriques parce qu'il n'y en a pas ou qu'il y a un problème dans un ou plusieurs des objets que vous avez créés.
-
Si
2.5.11.2. Ajout d'un autoscaler de métriques personnalisé à une tâche
Vous pouvez créer un autoscaler de métriques personnalisé pour n'importe quel objet Job
.
Conditions préalables
- L'opérateur Custom Metrics Autoscaler doit être installé.
Procédure
Créez un fichier YAML similaire au suivant :
kind: ScaledJob apiVersion: keda.sh/v1alpha1 metadata: name: scaledjob namespace: my-namespace spec: failedJobsHistoryLimit: 5 jobTargetRef: activeDeadlineSeconds: 600 1 backoffLimit: 6 2 parallelism: 1 3 completions: 1 4 template: 5 metadata: name: pi spec: containers: - name: pi image: perl command: ["perl", "-Mbignum=bpi", "-wle", "print bpi(2000)"] maxReplicaCount: 100 6 pollingInterval: 30 7 successfulJobsHistoryLimit: 5 8 failedJobsHistoryLimit: 5 9 envSourceContainerName: 10 rolloutStrategy: gradual 11 scalingStrategy: 12 strategy: "custom" customScalingQueueLengthDeduction: 1 customScalingRunningJobPercentage: "0.5" pendingPodConditions: - "Ready" - "PodScheduled" - "AnyOtherCustomPodCondition" multipleScalersCalculation : "max" triggers: - type: prometheus 13 metadata: serverAddress: https://thanos-querier.openshift-monitoring.svc.cluster.local:9092 namespace: kedatest metricName: http_requests_total threshold: '5' query: sum(rate(http_requests_total{job="test-app"}[1m])) authModes: "bearer" - authenticationRef: 14 name: prom-triggerauthentication metadata: name: prom-triggerauthentication type: object - authenticationRef: 15 name: prom-cluster-triggerauthentication metadata: name: prom-cluster-triggerauthentication type: object
- 1
- Spécifie la durée maximale d'exécution du travail.
- 2
- Spécifie le nombre de tentatives pour un travail. La valeur par défaut est
6
. - 3
- Facultatif : Spécifie le nombre de répliques de pods qu'un travail doit exécuter en parallèle ; la valeur par défaut est
1
.-
Pour les travaux non parallèles, laissez le paramètre non défini. Si elle n'est pas définie, la valeur par défaut est
1
.
-
Pour les travaux non parallèles, laissez le paramètre non défini. Si elle n'est pas définie, la valeur par défaut est
- 4
- Facultatif : Indique le nombre de pods terminés avec succès pour qu'un travail soit considéré comme terminé.
-
Pour les travaux non parallèles, laissez le paramètre non défini. Si elle n'est pas définie, la valeur par défaut est
1
. - Pour les travaux parallèles avec un nombre d'achèvements fixe, indiquez le nombre d'achèvements.
-
Pour les travaux parallèles avec une file d'attente, laissez le paramètre non défini. Lorsqu'il n'est pas défini, la valeur par défaut est celle du paramètre
parallelism
.
-
Pour les travaux non parallèles, laissez le paramètre non défini. Si elle n'est pas définie, la valeur par défaut est
- 5
- Spécifie le modèle du module créé par le contrôleur.
- 6
- Facultatif : Spécifie le nombre maximum de répliques lors de la mise à l'échelle. La valeur par défaut est
100
. - 7
- Facultatif : Spécifie l'intervalle en secondes pour vérifier chaque déclencheur. La valeur par défaut est
30
. - 8
- Facultatif : Spécifie le nombre de travaux terminés avec succès qui doivent être conservés. La valeur par défaut est
100
. - 9
- Facultatif : Spécifie le nombre de travaux ayant échoué qui doivent être conservés. La valeur par défaut est
100
. - 10
- Facultatif : Spécifie le nom du conteneur dans la ressource cible, à partir duquel l'autoscaler personnalisé obtient les variables d'environnement contenant les secrets, etc. La valeur par défaut est
.spec.template.spec.containers[0]
. - 11
- Facultatif : Indique si les travaux existants sont interrompus lorsqu'un travail mis à l'échelle est mis à jour :
-
default
: L'autoscaler met fin à un travail existant si le travail de mise à l'échelle qui lui est associé est mis à jour. L'autoscaler recrée le travail avec les dernières spécifications. -
gradual
: L'autoscaler ne met pas fin à un travail existant si le travail de mise à l'échelle qui lui est associé est mis à jour. L'autoscaler crée de nouveaux travaux avec les dernières spécifications.
-
- 12
- Facultatif : Spécifie une stratégie de mise à l'échelle :
default
custom
ouaccurate
. La valeur par défaut estdefault
. Pour plus d'informations, voir le lien dans la section "Ressources supplémentaires" qui suit. - 13
- Spécifie le déclencheur à utiliser comme base pour la mise à l'échelle, comme décrit dans la section "Understanding the custom metrics autoscaler triggers" (Comprendre les déclencheurs d'autoscaler de mesures personnalisées).
- 14
- Facultatif : Spécifie une authentification de déclenchement, comme décrit dans la section "Création d'une authentification de déclenchement autoscaler de métriques personnalisée".
- 15
- Facultatif : Spécifie une authentification de déclenchement de cluster, comme décrit dans la section "Création d'une authentification de déclenchement autoscaler de métriques personnalisée".Note
Il n'est pas nécessaire de spécifier à la fois une authentification de déclenchement de l'espace de noms et une authentification de déclenchement du cluster.
Créez l'autoscaler de métriques personnalisé :
oc create -f <nom-de-fichier>.yaml
Vérification
Affichez la sortie de la commande pour vérifier que l'autoscaler de métriques personnalisé a été créé :
oc get scaledjob <scaled_job_name>
Exemple de sortie
NAME MAX TRIGGERS AUTHENTICATION READY ACTIVE AGE scaledjob 100 prometheus prom-triggerauthentication True True 8s
Notez les champs suivants dans le résultat :
-
TRIGGERS
: Indique le déclencheur, ou l'échelle, utilisé. -
AUTHENTICATION
: Indique le nom de l'authentification de déclenchement utilisée. READY
: Indique si l'objet mis à l'échelle est prêt à commencer la mise à l'échelle :-
Si
True
, l'objet mis à l'échelle est prêt. -
Si
False
, l'objet mis à l'échelle n'est pas prêt en raison d'un problème dans un ou plusieurs des objets que vous avez créés.
-
Si
ACTIVE
: Indique si la mise à l'échelle est en cours :-
Si
True
, il y a mise à l'échelle. -
Si
False
, la mise à l'échelle n'a pas lieu parce qu'il n'y a pas de métriques ou qu'il y a un problème dans un ou plusieurs des objets que vous avez créés.
-
Si
2.5.12. Désinstallation de l'opérateur Autoscaler de mesures personnalisées
Vous pouvez supprimer le Custom Metrics Autoscaler de votre cluster OpenShift Container Platform. Après avoir supprimé l'opérateur Custom Metrics Autoscaler, supprimez les autres composants associés à l'opérateur afin d'éviter tout problème potentiel.
Vous devez d'abord supprimer la ressource personnalisée (CR) KedaController
. Si vous ne supprimez pas spécifiquement la CR, OpenShift Container Platform peut se bloquer lorsque vous supprimez le projet openshift-keda
. Si vous supprimez le Custom Metrics Autoscaler Operator avant de supprimer la CR, vous ne pourrez pas supprimer la CR.
Conditions préalables
- L'opérateur Custom Metrics Autoscaler doit être installé.
Procédure
-
Dans la console web d'OpenShift Container Platform, cliquez sur Operators
Installed Operators. - Passez au projet openshift-keda.
Supprimer la ressource personnalisée
KedaController
.- Trouvez l'opérateur CustomMetricsAutoscaler et cliquez sur l'onglet KedaController.
- Recherchez la ressource personnalisée, puis cliquez sur Delete KedaController.
- Cliquez sur Uninstall.
Supprimez l'opérateur Autoscaler de métriques personnalisées :
-
Cliquez sur Operators
Installed Operators. - Trouvez l'opérateur CustomMetricsAutoscaler et cliquez sur le menu Options et sélectionnez Uninstall Operator.
- Cliquez sur Uninstall.
-
Cliquez sur Operators
Optionnel : Utilisez le CLI OpenShift pour supprimer les composants autoscaler des métriques personnalisées :
Supprimez les CRD de métriques personnalisées autoscaler :
-
clustertriggerauthentications.keda.sh
-
kedacontrollers.keda.sh
-
scaledjobs.keda.sh
-
scaledobjects.keda.sh
-
triggerauthentications.keda.sh
$ oc delete crd clustertriggerauthentications.keda.sh kedacontrollers.keda.sh scaledjobs.keda.sh scaledobjects.keda.sh triggerauthentications.keda.sh
La suppression des CRD supprime les rôles associés, les rôles de cluster et les liaisons de rôles. Toutefois, il se peut que quelques rôles de cluster doivent être supprimés manuellement.
-
Liste des rôles de cluster autoscaler de métriques personnalisées :
$ oc get clusterrole | grep keda.sh
Supprimez les rôles de cluster autoscaler de métriques personnalisées répertoriés. Par exemple :
$ oc delete clusterrole.keda.sh-v1alpha1-admin
Liste de toutes les liaisons de rôles de cluster autoscaler de métriques personnalisées :
$ oc get clusterrolebinding | grep keda.sh
Supprimez les liaisons de rôles de cluster autoscaler de métriques personnalisées répertoriées. Par exemple :
$ oc delete clusterrolebinding.keda.sh-v1alpha1-admin
Supprimez le projet custom metrics autoscaler :
$ oc delete project openshift-keda
Supprimez l'opérateur Autoscaler de métrique de cluster :
$ oc delete operator/openshift-custom-metrics-autoscaler-operator.openshift-keda