Ayude a mejorar esta página
¿Quiere contribuir a esta guía del usuario? Elija el enlace Editar esta página en GitHub que se encuentra en el panel derecho de cada página. Sus contribuciones ayudarán a que nuestra guía del usuario sea mejor para todos.
El plano de control de Kubernetes expone una serie de métricas que se representan en un formato Prometheus
Para ver la salida de métricas sin procesar, ejecute el siguiente comando.
kubectl get --raw
endpoint
Este comando permite pasar cualquier ruta de punto de conexión y devuelve la respuesta sin procesar. La salida enumera las diferentes métricas línea por línea, y cada línea incluye un nombre de métrica, etiquetas y un valor.
metric_name{tag="value"[,...]} value
Cómo obtener métricas del servidor de API
El punto de conexión general del servidor de API se expone en el plano de control de Amazon EKS. Este punto de conexión resulta útil sobre todo cuando se examina una métrica específica.
kubectl get --raw /metrics
Un ejemplo de salida sería el siguiente.
[...]
# 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
Este resultado sin procesar devuelve literalmente lo que el servidor de API expone.
Métricas del plano de control con metrics.eks.amazonaws.com
En el caso de los clústeres que son Kubernetes versión 1.28
y posteriores, Amazon EKS también expone métricas bajo el grupo de la API metrics.eks.amazonaws.com
. Estas métricas incluyen componentes del plano de control, como kube-scheduler
y kube-controller-manager
.
nota
Si tiene una configuración de webhook que podría bloquear la creación de la nueva v1.metrics.eks.amazonaws.com
del recurso APIService
en el clúster, es posible que la característica de punto de conexión de métricas no se encuentre disponible. Para verificarlo en el registro de auditoría de kube-apiserver
, busque la palabra clave v1.metrics.eks.amazonaws.com
.
Cómo obtener métricas de kube-scheduler
Utilice el siguiente comando para obtener métricas de kube-scheduler
kubectl get --raw "/apis/metrics.eks.amazonaws.com/v1/ksh/container/metrics"
Un ejemplo de salida sería el siguiente.
# 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
[...]
Cómo obtener métricas de kube-controller-manager
Utilice el siguiente comando para obtener métricas de kube-controller-manager
kubectl get --raw "/apis/metrics.eks.amazonaws.com/v1/kcm/container/metrics"
Un ejemplo de salida sería el siguiente.
[...]
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
[...]
Comprender las métricas del programador y del administrador de controladores
En la siguiente tabla se describen las métricas del programador y del administrador de controladores que están disponibles para la extracción de estilos de Prometheus. Para obtener más información acerca de estas métricas, consulte Kubernetes Metrics Reference
Métrica | Componente del plano de control | Descripción |
---|---|---|
scheduler_pending_pods |
programador |
La cantidad de pods que están a la espera de programarse en un nodo para su ejecución. |
scheduler_schedule_attempts_total |
programador |
La cantidad de intentos realizados para programar pods. |
scheduler_preemption_attempts_total |
programador |
La cantidad de intentos realizados por el programador para programar pods de mayor prioridad expulsando los de menor prioridad. |
scheduler_preemption_victims |
programador |
La cantidad de pods que se han seleccionado para expulsarse con el fin de liberar espacio para pods de mayor prioridad. |
scheduler_pod_scheduling_attempts |
programador |
La cantidad de intentos de programar un pod correctamente. |
scheduler_scheduling_attempt_duration_seconds |
programador |
Indica la velocidad con la que el programador es capaz de encontrar un espacio adecuado para la ejecución de un pod en función de varios factores, como la disponibilidad de recursos y las reglas de programación. |
scheduler_pod_scheduling_sli_duration_seconds |
programador |
La latencia de extremo a extremo de un pod que se está programando, desde el momento en que entra en la cola de programación. Es posible que sean necesarios varios intentos de programación. |
kube_pod_resource_request |
programador |
Los recursos solicitados por las cargas de trabajo en el clúster, desglosados por pod. Indica el uso de recursos que el programador y kubelet prevén por pod, con la unidad correspondiente a cada recurso en su caso. |
kube_pod_resource_limit |
programador |
El límite de recursos para cargas de trabajo en el clúster, desglosado por pod. Indica el uso de recursos que el programador y kubelet prevén por pod, con la unidad correspondiente a cada recurso en su caso. |
cronjob_controller_job_creation_skew_duration_seconds |
administrador de controladores |
El tiempo transcurrido entre el momento en que se programa la ejecución de un cronjob y el momento en que se crea el trabajo correspondiente. |
workqueue_depth |
administrador de controladores |
La profundidad actual de la cola. |
workqueue_adds_total |
administrador de controladores |
Cantidad total de adiciones administradas por la cola de trabajo. |
workqueue_queue_duration_seconds |
administrador de controladores |
El tiempo en segundos que un elemento permanece en la cola de trabajo antes de ser solicitado. |
workqueue_work_duration_seconds |
administrador de controladores |
El tiempo en segundos que tarda en procesarse un elemento de la cola de trabajo. |
Implementación de un sistema de extracción de Prometheus para extraer métricas de forma sistemática
Para implementar un sistema de extracción de Prometheus que extraiga sistemáticamente las métricas, utilice la siguiente configuración:
---
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
El permiso que sigue es necesario para que el pod acceda al nuevo punto de conexión de métricas.
{
"effect": "allow",
"apiGroups": [
"metrics.eks.amazonaws.com"
],
"resources": [
"kcm/metrics",
"ksh/metrics"
],
"verbs": [
"get"
] },
Para aplicar un parche al rol que se utiliza, puede utilizar el siguiente comando.
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"]
}
}
]'
A continuación, para ver el panel de Prometheus, puede redirigir mediante proxy el puerto del sistema de extracción de Prometheus al puerto local.
kubectl port-forward pods/prom-pod 9090:9090
Para el clúster de Amazon EKS, las métricas del plano de control principal de Kubernetes también se ingieren en las métricas de Amazon CloudWatch bajo el espacio de nombres de AWS/EKS
. Para verlas, abra la consola de CloudWatchAWS/EKS
y una dimensión de métricas para el clúster.