Aidez à améliorer cette page
Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Pour contribuer à ce guide de l'utilisateur, cliquez sur le GitHub lien Modifier cette page sur qui se trouve dans le volet droit de chaque page.
Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Le plan de contrôle Kubernetes expose un certain nombre de métriques représentées au format Prometheus.
Pour afficher la sortie des métriques brutes, remplacez endpoint
et exécutez la commande suivante.
kubectl get --raw endpoint
Cette commande vous permet de transmettre n'importe quel chemin de point de terminaison et renvoie la réponse brute. La sortie répertorie différentes métriques line-by-line, chaque ligne incluant un nom de métrique, des balises et une valeur.
metric_name{tag="value"[,...]} value
Récupérez les métriques depuis le serveur d'API
Le point de terminaison général du serveur d'API est exposé sur le plan de contrôle Amazon EKS. Ce point de terminaison est principalement utile lorsque vous examinez une métrique spécifique.
kubectl get --raw /metrics
L'exemple qui suit illustre un résultat.
[...]
# HELP rest_client_requests_total Number of HTTP requests, partitioned by status code, method, and host.
# TYPE rest_client_requests_total counter
rest_client_requests_total{code="200",host="127.0.0.1:21362",method="POST"} 4994
rest_client_requests_total{code="200",host="127.0.0.1:443",method="DELETE"} 1
rest_client_requests_total{code="200",host="127.0.0.1:443",method="GET"} 1.326086e+06
rest_client_requests_total{code="200",host="127.0.0.1:443",method="PUT"} 862173
rest_client_requests_total{code="404",host="127.0.0.1:443",method="GET"} 2
rest_client_requests_total{code="409",host="127.0.0.1:443",method="POST"} 3
rest_client_requests_total{code="409",host="127.0.0.1:443",method="PUT"} 8
# HELP ssh_tunnel_open_count Counter of ssh tunnel total open attempts
# TYPE ssh_tunnel_open_count counter
ssh_tunnel_open_count 0
# HELP ssh_tunnel_open_fail_count Counter of ssh tunnel failed open attempts
# TYPE ssh_tunnel_open_fail_count counter
ssh_tunnel_open_fail_count 0
Cette sortie brute renvoie tel quel ce que le serveur d'API expose.
Récupérez les métriques du plan de contrôle avec metrics.eks.amazonaws.com
Pour les clusters de versions Kubernetes ou supérieures1.28
, Amazon EKS expose également les métriques du groupe d'API. metrics.eks.amazonaws.com
Ces mesures incluent les composants du plan de contrôle tels que kube-scheduler
etkube-controller-manager
.
Note
Si vous avez une configuration de webhook susceptible de bloquer la création de la nouvelle APIService
ressource v1.metrics.eks.amazonaws.com
sur votre cluster, il est possible que la fonctionnalité de point de terminaison des métriques ne soit pas disponible. Vous pouvez le vérifier dans le journal kube-apiserver
d'audit en recherchant le v1.metrics.eks.amazonaws.com
mot clé.
Récupérez kube-scheduler
les métriques
Pour récupérer kube-scheduler
des métriques, utilisez la commande suivante.
kubectl get --raw "/apis/metrics.eks.amazonaws.com/v1/ksh/container/metrics"
L'exemple qui suit illustre un résultat.
# TYPE scheduler_pending_pods gauge
scheduler_pending_pods{queue="active"} 0
scheduler_pending_pods{queue="backoff"} 0
scheduler_pending_pods{queue="gated"} 0
scheduler_pending_pods{queue="unschedulable"} 18
# HELP scheduler_pod_scheduling_attempts [STABLE] Number of attempts to successfully schedule a pod.
# TYPE scheduler_pod_scheduling_attempts histogram
scheduler_pod_scheduling_attempts_bucket{le="1"} 79
scheduler_pod_scheduling_attempts_bucket{le="2"} 79
scheduler_pod_scheduling_attempts_bucket{le="4"} 79
scheduler_pod_scheduling_attempts_bucket{le="8"} 79
scheduler_pod_scheduling_attempts_bucket{le="16"} 79
scheduler_pod_scheduling_attempts_bucket{le="+Inf"} 81
[...]
Récupérez kube-controller-manager
les métriques
Pour récupérer kube-controller-manager
des métriques, utilisez la commande suivante.
kubectl get --raw "/apis/metrics.eks.amazonaws.com/v1/kcm/container/metrics"
L'exemple qui suit illustre un résultat.
[...]
workqueue_work_duration_seconds_sum{name="pvprotection"} 0
workqueue_work_duration_seconds_count{name="pvprotection"} 0
workqueue_work_duration_seconds_bucket{name="replicaset",le="1e-08"} 0
workqueue_work_duration_seconds_bucket{name="replicaset",le="1e-07"} 0
workqueue_work_duration_seconds_bucket{name="replicaset",le="1e-06"} 0
workqueue_work_duration_seconds_bucket{name="replicaset",le="9.999999999999999e-06"} 0
workqueue_work_duration_seconds_bucket{name="replicaset",le="9.999999999999999e-05"} 19
workqueue_work_duration_seconds_bucket{name="replicaset",le="0.001"} 109
workqueue_work_duration_seconds_bucket{name="replicaset",le="0.01"} 139
workqueue_work_duration_seconds_bucket{name="replicaset",le="0.1"} 181
workqueue_work_duration_seconds_bucket{name="replicaset",le="1"} 191
workqueue_work_duration_seconds_bucket{name="replicaset",le="10"} 191
workqueue_work_duration_seconds_bucket{name="replicaset",le="+Inf"} 191
workqueue_work_duration_seconds_sum{name="replicaset"} 4.265655885000002
[...]
Comprendre les métriques du planificateur et du responsable du contrôleur
Le tableau suivant décrit les métriques du planificateur et du gestionnaire de contrôleurs mises à disposition pour le scraping de style Prometheus. Pour plus d'informations sur ces métriques, consultez la référence des métriques Kubernetes dans la documentation
Métrique | Composant du plan de contrôle | Description |
---|---|---|
scheduler_pending_pods |
planificateur |
Le nombre de pods qui attendent d'être planifiés sur un nœud pour être exécutés. |
scheduler_schedule_attempts total |
planificateur |
Le nombre de tentatives effectuées pour planifier des pods. |
planificateur_preemption_tentats_total |
planificateur |
Le nombre de tentatives effectuées par le planificateur pour planifier des pods prioritaires en expulsant les pods moins prioritaires. |
Scheduler_Preemption_Victims |
planificateur |
Le nombre de pods sélectionnés pour être expulsés afin de faire de la place à des pods prioritaires. |
scheduler_pod_scheduling_attempts |
planificateur |
Le nombre de tentatives de planification réussie d'un Pod. |
scheduler_scheduling_attempt duration_seconds |
planificateur |
Indique la rapidité ou la lenteur avec laquelle le planificateur est capable de trouver un emplacement approprié pour exécuter un Pod en fonction de divers facteurs tels que la disponibilité des ressources et les règles de planification. |
scheduler_pod_scheduling_sli_duration_seconds |
planificateur |
La end-to-end latence d'un pod en cours de planification, à partir du moment où le pod entre dans la file d'attente de planification. Cela peut impliquer plusieurs tentatives de planification. |
demande_ressource kube_pod_ |
planificateur |
Les ressources demandées par les charges de travail du cluster, ventilées par pod. Cela montre l'utilisation des ressources que le planificateur et le kubelet attendent par pod pour les ressources, ainsi que l'unité de la ressource, le cas échéant. |
kube_pod_resource_limit |
planificateur |
Limite de ressources pour les charges de travail sur le cluster, ventilée par module. Cela montre l'utilisation des ressources que le planificateur et le kubelet attendent par pod pour les ressources, ainsi que l'unité de la ressource, le cas échéant. |
cronjob_controller_job_creation_skew_duration_seconds |
responsable du contrôleur |
Le délai entre le moment où l'exécution d'un cronjob est planifiée et le moment où le travail correspondant est créé. |
profondeur de la file d'attente |
responsable du contrôleur |
Profondeur actuelle de la file d'attente. |
workqueue_adds_total |
responsable du contrôleur |
Nombre total d'ajouts gérés par la file d'attente. |
file d'attente de travail durée_secondes |
responsable du contrôleur |
Durée en secondes pendant laquelle un élément reste dans la file d'attente avant d'être demandé. |
workqueue_work_duration_seconds |
responsable du contrôleur |
Durée en secondes nécessaire au traitement d'un élément de la file d'attente. |
Déployez un scraper Prometheus pour analyser régulièrement les indicateurs
Pour déployer un scraper Prometheus afin de récupérer régulièrement les métriques, utilisez la configuration suivante :
---
apiVersion: v1
kind: ConfigMap
metadata:
name: prometheus-conf
data:
prometheus.yml: |-
global:
scrape_interval: 30s
scrape_configs:
# apiserver metrics
- job_name: apiserver-metrics
kubernetes_sd_configs:
- role: endpoints
scheme: https
tls_config:
ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
insecure_skip_verify: true
bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
relabel_configs:
- source_labels:
[
__meta_kubernetes_namespace,
__meta_kubernetes_service_name,
__meta_kubernetes_endpoint_port_name,
]
action: keep
regex: default;kubernetes;https
# Scheduler metrics
- job_name: 'ksh-metrics'
kubernetes_sd_configs:
- role: endpoints
metrics_path: /apis/metrics.eks.amazonaws.com/v1/ksh/container/metrics
scheme: https
tls_config:
ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
insecure_skip_verify: true
bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
relabel_configs:
- source_labels:
[
__meta_kubernetes_namespace,
__meta_kubernetes_service_name,
__meta_kubernetes_endpoint_port_name,
]
action: keep
regex: default;kubernetes;https
# Controller Manager metrics
- job_name: 'kcm-metrics'
kubernetes_sd_configs:
- role: endpoints
metrics_path: /apis/metrics.eks.amazonaws.com/v1/kcm/container/metrics
scheme: https
tls_config:
ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
insecure_skip_verify: true
bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
relabel_configs:
- source_labels:
[
__meta_kubernetes_namespace,
__meta_kubernetes_service_name,
__meta_kubernetes_endpoint_port_name,
]
action: keep
regex: default;kubernetes;https
---
apiVersion: v1
kind: Pod
metadata:
name: prom-pod
spec:
containers:
- name: prom-container
image: prom/prometheus
ports:
- containerPort: 9090
volumeMounts:
- name: config-volume
mountPath: /etc/prometheus/
volumes:
- name: config-volume
configMap:
name: prometheus-conf
L'autorisation qui suit est requise pour que le Pod puisse accéder au nouveau point de terminaison des métriques.
{
"effect": "allow",
"apiGroups": [
"metrics.eks.amazonaws.com"
],
"resources": [
"kcm/metrics",
"ksh/metrics"
],
"verbs": [
"get"
] },
Pour corriger le rôle utilisé, vous pouvez utiliser la commande suivante.
kubectl patch clusterrole <role-name> --type=json -p='[
{
"op": "add",
"path": "/rules/-",
"value": {
"verbs": ["get"],
"apiGroups": ["metrics.eks.amazonaws.com"],
"resources": ["kcm/metrics", "ksh/metrics"]
}
}
]'
Vous pouvez ensuite consulter le tableau de bord Prometheus en connectant le port du Prometheus scraper à votre port local.
kubectl port-forward pods/prom-pod 9090:9090
Pour votre cluster Amazon EKS, les principales métriques du plan de contrôle Kubernetes sont également ingérées dans CloudWatch Amazon Metrics sous l'espace de noms. AWS/EKS
Pour les consulter, ouvrez la CloudWatch consoleAWS/EKS
noms et une dimension de métriques pour votre cluster.