Monitorización de las métricas del componente del nodo principal
El complemento de kube-prometheus-stack de 3.5.0 o posterior puede monitorizar los componentes de kube-apiserver, kube-controller, kube-scheduler y etcd-server de los nodos principales. Después de instalar el complemento en un clúster, puede recopilar métricas de los componentes anteriores sin configuración manual.
Esta sección describe cómo compilar el colector Prometheus para recopilar las métricas de los componentes del nodo principal.
Requisitos previos
- La versión del clúster debe ser 1.19 o posterior.
- Prometheus autoconstruido debe estar instalado en el clúster. Para obtener más información, consulte los gráficos de Helm de la comunidad de Prometheus. El complemento de prometheus ya no está evolucionado y no es compatible con esta función. Por lo tanto, evite usar este complemento.
- El prometheus-operator debe estar instalado en el clúster. Para obtener más información, consulte Operador de Prometheus.
- Para acceder a Prometheus desde una red externa, cree previamente un LoadBalancer Service de la red pública para Prometheus.
Procedimiento
- Utilice kubectl para conectarse al clúster.
- Modifique el ClusterRole de Prometheus.
kubectl edit ClusterRole prometheus -n {namespace}
Agregue el siguiente contenido al campo de reglas:rules: ... - apiGroups: - proxy.exporter.k8s.io resources: - "*" verbs: ["get", "list", "watch"]
- Cree un archivo llamado kube-apiserver.yaml y edítelo.
vi kube-apiserver.yaml
Ejemplo de contenido del archivo:apiVersion: monitoring.coreos.com/v1 kind: ServiceMonitor metadata: labels: app.kubernetes.io/name: apiserver name: kube-apiserver namespace: monitoring # Change it to the namespace where Prometheus will be installed. spec: endpoints: - bearerTokenFile: /var/run/secrets/kubernetes.io/serviceaccount/token interval: 30s metricRelabelings: - action: keep regex: (aggregator_unavailable_apiservice|apiserver_admission_controller_admission_duration_seconds_bucket|apiserver_admission_webhook_admission_duration_seconds_bucket|apiserver_admission_webhook_admission_duration_seconds_count|apiserver_client_certificate_expiration_seconds_bucket|apiserver_client_certificate_expiration_seconds_count|apiserver_current_inflight_requests|apiserver_request_duration_seconds_bucket|apiserver_request_total|go_goroutines|kubernetes_build_info|process_cpu_seconds_total|process_resident_memory_bytes|rest_client_requests_total|workqueue_adds_total|workqueue_depth|workqueue_queue_duration_seconds_bucket|aggregator_unavailable_apiservice_total|rest_client_request_duration_seconds_bucket) sourceLabels: - __name__ - action: drop regex: apiserver_request_duration_seconds_bucket;(0.15|0.25|0.3|0.35|0.4|0.45|0.6|0.7|0.8|0.9|1.25|1.5|1.75|2.5|3|3.5|4.5|6|7|8|9|15|25|30|50) sourceLabels: - __name__ - le port: https scheme: https tlsConfig: caFile: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt serverName: kubernetes jobLabel: component namespaceSelector: matchNames: - default selector: matchLabels: component: apiserver provider: kubernetes
Create a ServiceMonitor:
kubectl apply -f kube-apiserver.yaml
- Cree un archivo llamado kube-controller.yaml y edítelo.
vi kube-controller.yaml
Ejemplo de contenido del archivo:apiVersion: monitoring.coreos.com/v1 kind: ServiceMonitor metadata: labels: app.kubernetes.io/name: kube-controller name: kube-controller-manager namespace: monitoring # Change it to the namespace where Prometheus will be installed. spec: endpoints: - bearerTokenFile: /var/run/secrets/kubernetes.io/serviceaccount/token interval: 15s honorLabels: true port: https relabelings: - regex: (.+) replacement: /apis/proxy.exporter.k8s.io/v1beta1/kube-controller-proxy/${1}/metrics sourceLabels: - __address__ targetLabel: __metrics_path__ - regex: (.+) replacement: ${1} sourceLabels: - __address__ targetLabel: instance - replacement: kubernetes.default.svc.cluster.local:443 targetLabel: __address__ scheme: https tlsConfig: caFile: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt jobLabel: app namespaceSelector: matchNames: - kube-system selector: matchLabels: app: kube-controller-proxy version: v1
Cree un ServiceMonitor:
kubectl apply -f kube-controller.yaml
- Cree un archivo llamado kube-scheduler.yaml y edítelo.
vi kube-scheduler.yaml
Ejemplo de contenido del archivo:apiVersion: monitoring.coreos.com/v1 kind: ServiceMonitor metadata: labels: app.kubernetes.io/name: kube-scheduler name: kube-scheduler namespace: monitoring # Change it to the namespace where Prometheus will be installed. spec: endpoints: - bearerTokenFile: /var/run/secrets/kubernetes.io/serviceaccount/token interval: 15s honorLabels: true port: https relabelings: - regex: (.+) replacement: /apis/proxy.exporter.k8s.io/v1beta1/kube-scheduler-proxy/${1}/metrics sourceLabels: - __address__ targetLabel: __metrics_path__ - regex: (.+) replacement: ${1} sourceLabels: - __address__ targetLabel: instance - replacement: kubernetes.default.svc.cluster.local:443 targetLabel: __address__ scheme: https tlsConfig: caFile: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt jobLabel: app namespaceSelector: matchNames: - kube-system selector: matchLabels: app: kube-scheduler-proxy version: v1
Cree un ServiceMonitor:
kubectl apply -f kube-scheduler.yaml
- Cree un archivo llamado etcd-server.yaml y edítelo.
vi etcd-server.yaml
Ejemplo de contenido del archivo:apiVersion: monitoring.coreos.com/v1 kind: ServiceMonitor metadata: labels: app.kubernetes.io/name: etcd-server name: etcd-server namespace: monitoring # Change it to the namespace where Prometheus will be installed. spec: endpoints: - bearerTokenFile: /var/run/secrets/kubernetes.io/serviceaccount/token interval: 15s honorLabels: true port: https relabelings: - regex: (.+) replacement: /apis/proxy.exporter.k8s.io/v1beta1/etcd-server-proxy/${1}/metrics sourceLabels: - __address__ targetLabel: __metrics_path__ - regex: (.+) replacement: ${1} sourceLabels: - __address__ targetLabel: instance - replacement: kubernetes.default.svc.cluster.local:443 targetLabel: __address__ scheme: https tlsConfig: caFile: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt jobLabel: app namespaceSelector: matchNames: - kube-system selector: matchLabels: app: etcd-server-proxy version: v1
Cree un ServiceMonitor:
etcd-server.yaml
- Después de la creación, si ha creado un LoadBalancer Service de la red pública para Prometheus, puede acceder a load balancer public IP: Service port para acceder a Prometheus.
- Elija Status > Targets. Se muestran los tres componentes del nodo principal anteriores.