Los eventos de Kubernetes registran los cambios de estado en su clúster, como la creación, ejecución y eliminación de pods, o errores en componentes. El centro de eventos de K8s recopila todos los eventos del clúster de Kubernetes en tiempo real y ofrece capacidades de almacenamiento, consulta, análisis, visualización y alertas. Este tema describe el procedimiento para crear y utilizar un centro de eventos de K8s.
Contexto
La arquitectura de Kubernetes se basa en una máquina de estados. Cuando el sistema realiza transiciones entre estados, genera eventos. Las transiciones entre estados normales producen eventos Normal, mientras que las transiciones entre estados normales y anómalos generan eventos Warning.
Container Service for Kubernetes (ACK) proporciona una solución de monitoreo de eventos lista para usar en entornos contenedorizados. Utiliza node-problem-detector (NPD), mantenido por ACK, junto con su componente incluido kube-eventer, para ofrecer el monitoreo de eventos.
node-problem-detector (NPD) es una herramienta para diagnosticar nodos de Kubernetes. Convierte anomalías del nodo, como bloqueos de Docker Engine, bloqueos del kernel de Linux, excepciones de acceso a la red pública y problemas de descriptores de archivos, en eventos de nodo. Al combinarse con kube-eventer, habilita un sistema de alertas de ciclo cerrado para eventos de nodo.
kube-eventer es una herramienta de código abierto mantenida por ACK para archivar eventos de Kubernetes. Puede enviar eventos del clúster a sistemas externos como DingTalk, Simple Log Service (SLS) y EventBridge. También ofrece capacidades de filtrado basadas en niveles de evento. Esto permite la recopilación en tiempo real, alertas dirigidas y el archivado asíncrono de eventos.
Requisitos previos
Debe haber creado un clúster de Kubernetes, como un clúster ACK de Alibaba Cloud o un clúster ACK Serverless.
Facturación
El centro de eventos de K8s es gratuito si se cumplen las siguientes condiciones:
El periodo de retención de datos del logstore asociado al centro de eventos de K8s es de 90 días (valor predeterminado).
El volumen de datos escritos en el centro de eventos de K8s es inferior a 256 MB por día, lo que equivale aproximadamente a 250,000 eventos.
Ejemplos:
Si utiliza el periodo de retención de datos predeterminado de 90 días y su clúster de Kubernetes genera 1,000 eventos por día, el centro de eventos de K8s es gratuito.
Si establece el periodo de retención de datos en 105 días y su clúster de Kubernetes genera 1,000 eventos por día, se le cobrará por el almacenamiento del logstore después de 90 días. El concepto facturable es Log Storage . Para obtener más información sobre el concepto facturable Log Storage, consulte Billable items in pay-by-feature mode.
Paso 1: Desplegar kube-eventer y node-problem-detector
ACK
Si utiliza un clúster ACK, solo necesita desplegar el componente ack-node-problem-detector, ya que integra las funcionalidades tanto de kube-eventer como de node-problem-detector. Si utiliza un clúster ACK Serverless, debe desplegar el componente kube-eventer.
NPD utiliza configuraciones y complementos de terceros para detectar problemas en los nodos y generar los eventos de clúster correspondientes. Un clúster de Kubernetes también genera sus propios eventos durante las transiciones de estado, como desalojos de pods o fallos en la descarga de imágenes. El Centro de Eventos de Kubernetes de Simple Log Service (SLS) centraliza todos los eventos de Kubernetes en tiempo real y proporciona almacenamiento, consultas, análisis, visualización y alertas. Para integrar los eventos de su clúster con el Centro de Eventos de Kubernetes, siga estos pasos:
Si seleccionó Install node-problem-detector and Create Event Center durante la creación del clúster, puede saltar al Paso 2 para ver el Centro de Eventos de Kubernetes. Para obtener información sobre cómo instalar el componente NPD durante la creación del clúster, consulte Crear un clúster administrado ACK.
-
Si no seleccionó Install node-problem-detector and Create Event Center durante la creación del clúster, siga estos pasos para instalarlo manualmente.
Inicie sesión en la consola de ACK. En el panel de navegación izquierdo, haga clic en Clusters.
En la página Clusters, haga clic en el nombre del clúster objetivo. En el panel de navegación izquierdo, seleccione .
En la pestaña Logs and Monitoring, busque e instale ack-node-problem-detector.
Self-managed Kubernetes
-
Despliegue
kube-eventer.Instale kubectl. Para obtener más información, consulte Obtain the kubeconfig file of a cluster and use kubectl to connect to the cluster.
-
Cree un archivo de configuración llamado eventer.yaml basado en la siguiente plantilla.
apiVersion: apps/v1 kind: Deployment metadata: labels: name: kube-eventer name: kube-eventer namespace: kube-system spec: replicas: 1 selector: matchLabels: app: kube-eventer template: metadata: labels: app: kube-eventer annotations: scheduler.alpha.kubernetes.io/critical-pod: '' spec: dnsPolicy: ClusterFirstWithHostNet serviceAccount: kube-eventer containers: - image: registry.cn-hangzhou.aliyuncs.com/acs/kube-eventer:v1.2.5-cc7ec54-aliyun name: kube-eventer command: - "/kube-eventer" - "--source=kubernetes:https://kubernetes.default" ## .send to sls ## --sink=sls:https://{endpoint}?project={project}&logStore=k8s-event®ionId={region-id}&internal=false&accessKeyId={accessKeyId}&accessKeySecret={accessKeySecret} - --sink=sls:https://cn-beijing.log.aliyuncs.com?project=k8s-xxxx&logStore=k8s-event®ionId=cn-beijing&internal=false&accessKeyId=xxx&accessKeySecret=xxx env: # If TZ is assigned, set the TZ value as the time zone - name: TZ value: "Asia/Shanghai" volumeMounts: - name: localtime mountPath: /etc/localtime readOnly: true - name: zoneinfo mountPath: /usr/share/zoneinfo readOnly: true resources: requests: cpu: 10m memory: 50Mi limits: cpu: 500m memory: 250Mi volumes: - name: localtime hostPath: path: /etc/localtime - name: zoneinfo hostPath: path: /usr/share/zoneinfo --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: kube-eventer rules: - apiGroups: - "" resources: - events verbs: - get - list - watch --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: kube-eventer roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: kube-eventer subjects: - kind: ServiceAccount name: kube-eventer namespace: kube-system --- apiVersion: v1 kind: ServiceAccount metadata: name: kube-eventer namespace: kube-systemParámetro
Tipo
Obligatorio
Descripción
endpoint
string
Sí
El endpoint de Simple Log Service. Para obtener más información, consulte Endpoints.
project
string
Sí
El proyecto de Simple Log Service.
logStore
string
Sí
El logstore de Simple Log Service.
internal
string
Obligatorio para clústeres de Kubernetes autogestionados.
Para un clúster de Kubernetes autogestionado, debe establecer este parámetro en false.
regionId
string
Obligatorio para clústeres de Kubernetes autogestionados.
El ID de la región donde reside Simple Log Service. Para obtener más información, consulte Endpoints.
accessKeyId
string
Obligatorio para clústeres de Kubernetes autogestionados.
El AccessKey ID. Se recomienda utilizar el par de AccessKey de un usuario de Resource Access Management (RAM). Para obtener más información, consulte AccessKey pair.
accessKeySecret
string
Obligatorio para clústeres de Kubernetes autogestionados.
El AccessKey secret. Se recomienda utilizar el par de AccessKey de un usuario de Resource Access Management (RAM). Para obtener más información, consulte AccessKey pair.
-
Ejecute el siguiente comando para aplicar la configuración de
eventer.yamlal clúster.kubectl apply -f eventer.yamlSalida esperada:
deployment.apps/kube-eventer created clusterrole.rbac.authorization.k8s.io/kube-eventer created clusterrolebinding.rbac.authorization.k8s.io/kube-eventer created serviceaccount/kube-eventer created
Despliegue
node-problem-detector.
Paso 2: Crear una instancia del centro de eventos de K8s
Después de crear una instancia del centro de eventos de K8s, Simple Log Service crea automáticamente un logstore llamado k8s-event y paneles relacionados en el proyecto de destino.
Inicie sesión en la consola de Simple Log Service.
En la sección Log Application, haga clic en la pestaña Intelligent O&M y luego haga clic en K8s Event Center.
En la página Event Center Management, haga clic en Add en la esquina superior derecha.
-
En el panel Create Event Center, configure los parámetros y haga clic en Next.
Si selecciona Select Existing Project, elija un proyecto existente en la lista desplegable Project para gestionar los recursos de la instancia del centro de eventos de K8s, como el logstore y los paneles.
Si selecciona Select Kubernetes Cluster from Container Service for Kubernetes, elija un clúster K8s existente en la lista desplegable K8s Cluster. Si utiliza este método, Simple Log Service crea automáticamente un proyecto llamado
k8s-log-{cluster-id}para gestionar los recursos de la instancia del centro de eventos de K8s, como el logstore y los paneles.
Paso 3: Usar la instancia del centro de eventos de K8s
Una vez creada la instancia del centro de eventos de K8s y desplegados kube-eventer y node-problem-detector, puede comenzar a utilizar el centro de eventos. Puede consultar la descripción general de eventos, buscar detalles de eventos, ver el ciclo de vida de los pods, revisar eventos de nodos y de componentes principales, configurar alertas, ejecutar consultas personalizadas y actualizar la versión.
En la página K8s Event Center, localice la instancia del centro de eventos de K8s objetivo y haga clic en el icono
para realizar las siguientes operaciones.
Acciones | Descripción |
Consultar la descripción general de eventos | La página Event Overview muestra estadísticas resumidas de eventos principales. Estas incluyen el número total de eventos, una comparación de eventos de error entre hoy y ayer, estadísticas de alertas, tendencias de eventos de error y detalles de OOM en pods. Nota La información de OOM en pods no identifica el pod específico. Solo puede localizar el nodo, el nombre del proceso y el ID del proceso donde ocurrió el evento. Puede ejecutar una consulta personalizada para encontrar eventos de reinicio de pods ocurridos cerca del momento del OOM y así ayudar a identificar el pod específico. |
Consultar detalles de eventos | La página Event Detail Query muestra los detalles de eventos filtrados por diversas dimensiones, como tipo de evento, objeto del evento, host, namespace y nombre. |
Ver el ciclo de vida del pod | La página Pod Lifecycle muestra una línea temporal gráfica de eventos en el ciclo de vida de un pod. También puede filtrar eventos importantes del pod por nivel de evento. |
Ver eventos de nodo | La página Node Events muestra detalles de eventos de nodo, como el ciclo de vida del nodo y una lista de eventos. |
Ver eventos de componentes principales | La página Core Component Events muestra detalles de eventos de componentes principales, como fallos en el reinicio de ECS y modos de URL no implementados. |
Configurar alertas | En la página Alert Configuration, puede configurar alertas para el centro de eventos de K8s. Para obtener más información, consulte Set up alerts. |
Ejecutar consultas personalizadas | En la página Custom Query, puede personalizar sentencias de consulta y de análisis. Todos los eventos del centro de eventos de K8s se almacenan en un logstore, por lo que puede utilizar todas las funciones del logstore, como consultas personalizadas, consumo de eventos, informes personalizados y alertas personalizadas. Para obtener más información, consulte Quick start for query and analysis. Para acceder al proyecto asociado con la instancia del centro de eventos de K8s, puede encontrar el nombre del proyecto de una de las siguientes maneras:
|
Actualizar versión | En la página Version Update, puede actualizar el centro de eventos de K8s. |
Eliminar una instancia del centro de eventos de K8s
En la página , localice la instancia y haga clic en el icono
en la columna Actions.
Registro de ejemplo
El siguiente código muestra un registro de ejemplo.
hostname: cn-hangzhou.i-***********"
level: Normal
pod_id: 2a360760-****
pod_name: logtail-ds-blkkr
event_id: {
"metadata":{
"name":"logtail-ds-blkkr.157b7cc90de7e192",
"namespace":"kube-system",
"selfLink":"/api/v1/namespaces/kube-system/events/logtail-ds-blkkr.157b7cc90de7e192",
"uid":"2aaf75ab-****",
"resourceVersion":"6129169",
"creationTimestamp":"2019-01-20T07:08:19Z"
},
"involvedObject":{
"kind":"Pod",
"namespace":"kube-system",
"name":"logtail-ds-blkkr",
"uid":"2a360760-****",
"apiVersion":"v1",
"resourceVersion":"6129161",
"fieldPath":"spec.containers{logtail}"
},
"reason":"Started",
"message":"Started container",
"source":{
"component":"kubelet",
"host":"cn-hangzhou.i-***********"
},
"firstTimestamp":"2019-01-20T07:08:19Z",
"lastTimestamp":"2019-01-20T07:08:19Z",
"count":1,
"type":"Normal",
"eventTime":null,
"reportingComponent":"",
"reportingInstance":""
}
|
Campo del registro |
Tipo |
Descripción |
|
hostname |
string |
El nombre del host donde ocurrió el evento. |
|
level |
string |
El nivel del registro. Valores válidos: Normal y Warning. |
|
pod_id |
string |
El ID único del pod. Este campo solo se incluye si el evento está relacionado con un pod. |
|
pod_name |
string |
El nombre del pod. Este campo solo se incluye si el evento está relacionado con un pod. |
|
event_id |
json |
Los detalles del evento. El valor de este campo es una cadena JSON. |
Preguntas frecuentes
Una instancia del centro de eventos de K8s no tiene datos
Después de desplegar una instancia del centro de eventos de K8s, los nuevos eventos se recopilan automáticamente. Puede buscarlos en la página Custom Query. Se recomienda establecer el rango de tiempo en la esquina superior derecha en 1 Day. Si no se encuentran datos, generalmente hay dos causas:
-
No se han generado nuevos eventos en el clúster de Kubernetes desde que desplegó el centro de eventos de K8s.
Puede ejecutar el comando
kubectl get events --all-namespacespara comprobar si se generan nuevos eventos en el clúster. -
Los parámetros están configurados incorrectamente en su despliegue de
kube-eventerynode-problem-detector.-
Si utiliza un clúster de Container Service for Kubernetes (ACK), realice estos pasos:
Inicie sesión en la consola de ACK.
En la página Clusters, haga clic en el nombre del clúster objetivo.
En el panel de navegación izquierdo, seleccione .
En la página Helm, busque ack-node-problem-detector y haga clic en Update.
Revise y modifique la configuración de parámetros. Para obtener más información, consulte Step 1: Deploy kube-eventer and node-problem-detector.
Si utiliza un clúster de Kubernetes autogestionado, consulte Collect Kubernetes events para la configuración de parámetros.
-
¿Cómo veo los registros de contenedor de un evento?
-
Si utiliza un clúster de Container Service for Kubernetes (ACK), realice estos pasos:
Inicie sesión en la consola de ACK.
En la página Clusters, haga clic en el nombre del clúster objetivo.
En el panel de navegación izquierdo, seleccione .
Establezca Namespace en kube-system.
En la lista Pods, busque el pod objetivo y haga clic en Log.
Si utiliza un clúster de Kubernetes autogestionado, revise los registros de los Pods con el prefijo de nombre de archivo
eventer-slsen el namespace kube-system.