Les événements Kubernetes enregistrent les changements d'état de votre cluster, tels que la création, l'exécution et la suppression de pods, ou les erreurs de composants. Le centre d'événements K8s collecte tous les événements du cluster Kubernetes en temps réel et offre des fonctionnalités de stockage, de requête, d'analyse, de visualisation et d'alerte. Cette rubrique décrit la procédure de création et d'utilisation d'un centre d'événements K8s.
Informations générales
L'architecture Kubernetes repose sur une machine à états. Lorsque le système change d'état, il génère des événements. Les transitions entre états normaux produisent des événements Normal, tandis que les transitions entre états normaux et anormaux produisent des événements Warning.
ACK (Container Service for Kubernetes) propose une solution de surveillance des événements prête à l'emploi pour les environnements conteneurisés. Elle s'appuie sur le détecteur de problèmes de nœud (NPD), maintenu par ACK, ainsi que sur son composant intégré kube-eventer, pour assurer la surveillance des événements.
Le détecteur de problèmes de nœud (NPD) est un outil de diagnostic des nœuds Kubernetes. Il convertit les anomalies des nœuds, telles que les blocages du moteur Docker, les blocages du noyau Linux, les exceptions d'accès au réseau public et les problèmes de descripteurs de fichiers, en événements de nœud. Combiné à kube-eventer, il permet de mettre en place un système d'alerte en boucle fermée pour les événements de nœud.
kube-eventer est un outil open source maintenu par ACK pour l'archivage des événements Kubernetes. Il peut transmettre les événements du cluster vers des systèmes externes tels que DingTalk, Simple Log Service (SLS) et EventBridge. Il offre également des capacités de filtrage basées sur les niveaux d'événement. Cela permet la collecte en temps réel, l'envoi d'alertes ciblées et l'archivage asynchrone des événements.
Prérequis
Vous avez créé un cluster Kubernetes, tel qu'un cluster Alibaba Cloud ACK ou un cluster ACK Serverless.
Facturation
Le centre d'événements K8s est gratuit si les conditions suivantes sont réunies :
La période de conservation des données pour le Logstore associé au centre d'événements K8s est de 90 jours (valeur par défaut).
Le volume de données écrites dans le centre d'événements K8s est inférieur à 256 Mo par jour, soit environ 250 000 événements.
Exemples :
Si vous utilisez la période de conservation des données par défaut de 90 jours et que votre cluster Kubernetes génère 1 000 événements par jour, le centre d'événements K8s est gratuit.
Si vous définissez la période de conservation des données sur 105 jours et que votre cluster Kubernetes génère 1 000 événements par jour, des frais de stockage Logstore vous seront facturés après 90 jours. L'élément facturable est le stockage des journaux . Pour plus d'informations sur l'élément facturable relatif au stockage des journaux, consultez la page Éléments facturables en mode paiement à la fonctionnalité.
Étape 1 : Déployer kube-eventer et node-problem-detector
ACK
Si vous utilisez un cluster ACK, il vous suffit de déployer le composant ack-node-problem-detector, car il intègre les fonctionnalités de kube-eventer et de node-problem-detector. Si vous utilisez un cluster ACK Serverless, vous devez déployer le composant kube-eventer.
NPD utilise des configurations et des plug-ins tiers pour détecter les problèmes de nœud et générer les événements de cluster correspondants. Un cluster Kubernetes génère également ses propres événements lors des transitions d'état, comme les évictions de pods ou les échecs de téléchargement d'images. Le centre d'événements Kubernetes de Simple Log Service (SLS) centralise tous les événements Kubernetes en temps réel et fournit des fonctionnalités de stockage, de requête, d'analyse, de visualisation et d'alerte. Pour intégrer les événements de votre cluster au centre d'événements Kubernetes, suivez les étapes ci-dessous :
Si vous avez sélectionné Install node-problem-detector and Create Event Center lors de la création du cluster, vous pouvez passer directement à l'étape 2 pour afficher le centre d'événements Kubernetes. Pour savoir comment installer le composant NPD lors de la création du cluster, consultez la documentation sur la création d'un cluster ACK managé.
-
Si vous n'avez pas sélectionné Install node-problem-detector and Create Event Center lors de la création du cluster, suivez ces étapes pour l'installer manuellement.
Connectez-vous à la console ACK. Dans le volet de navigation de gauche, cliquez sur Clusters.
Sur la page Clusters, cliquez sur le nom du cluster cible. Dans le volet de navigation de gauche, choisissez .
Dans l'onglet Logs and Monitoring, recherchez et installez ack-node-problem-detector.
Self-managed Kubernetes
-
Déployez
kube-eventer.Installez kubectl. Pour plus d'informations, consultez la page Obtenir le fichier kubeconfig d'un cluster et utiliser kubectl pour se connecter au cluster.
-
Créez un fichier de configuration nommé eventer.yaml en vous basant sur le modèle suivant.
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-systemParameter
Type
Required
Description
endpoint
string
Yes
L'endpoint de Simple Log Service. Pour plus d'informations, consultez la page Endpoints.
project
string
Yes
Le projet Simple Log Service.
logStore
string
Yes
Le Logstore Simple Log Service.
internal
string
Required for self-managed Kubernetes clusters.
Pour un cluster Kubernetes auto-géré, vous devez définir ce paramètre sur false.
regionId
string
Required for self-managed Kubernetes clusters.
L'ID de la région où réside Simple Log Service. Pour plus d'informations, consultez la page Endpoints.
accessKeyId
string
Required for self-managed Kubernetes clusters.
L'AccessKey ID. Nous vous recommandons d'utiliser la paire AccessKey d'un utilisateur Resource Access Management (RAM). Pour plus d'informations, consultez la page AccessKey pair.
accessKeySecret
string
Required for self-managed Kubernetes clusters.
L'AccessKey secret. Nous vous recommandons d'utiliser la paire AccessKey d'un utilisateur Resource Access Management (RAM). Pour plus d'informations, consultez la page AccessKey pair.
-
Exécutez la commande suivante pour appliquer la configuration
eventer.yamlau cluster.kubectl apply -f eventer.yamlRésultat attendu :
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
Déployez
node-problem-detector.
Étape 2 : Créer une instance de centre d'événements K8s
Après avoir créé une instance de centre d'événements K8s, Simple Log Service crée automatiquement un Logstore nommé k8s-event et des tableaux de bord associés dans le projet de destination.
Connectez-vous à la console Simple Log Service.
Dans la section Log Application, cliquez sur l'onglet Intelligent O&M, puis cliquez sur K8s Event Center.
Sur la page Event Center Management, cliquez sur Add dans le coin supérieur droit.
-
Dans le panneau Create Event Center, configurez les paramètres et cliquez sur Next.
Si vous sélectionnez Select Existing Project, choisissez un projet existant dans la liste déroulante Project pour gérer les ressources de l'instance de centre d'événements K8s, telles que le Logstore et les tableaux de bord.
Si vous sélectionnez Select Kubernetes Cluster from Container Service for Kubernetes, choisissez un cluster K8s existant dans la liste déroulante K8s Cluster. Si vous utilisez cette méthode, Simple Log Service crée automatiquement un projet nommé
k8s-log-{cluster-id}pour gérer les ressources de l'instance de centre d'événements K8s, telles que le Logstore et les tableaux de bord.
Étape 3 : Utiliser l'instance de centre d'événements K8s
Une fois que vous avez créé une instance de centre d'événements K8s et déployé kube-eventer et node-problem-detector, vous pouvez commencer à utiliser le centre d'événements. Vous pouvez consulter la vue d'ensemble des événements, interroger les détails des événements, afficher le cycle de vie des pods, visualiser les événements de nœud, examiner les événements des composants principaux, configurer des alertes, exécuter des requêtes personnalisées et mettre à jour la version.
Sur la page K8s Event Center, localisez l'instance de centre d'événements K8s cible et cliquez sur l'icône
pour effectuer les opérations suivantes.
Actions | Description |
Afficher la vue d'ensemble des événements | La page Event Overview affiche les statistiques résumées des événements principaux. Ces statistiques incluent le nombre total d'événements, une comparaison des événements d'erreur entre aujourd'hui et hier, les statistiques d'alerte, les tendances des événements d'erreur et les détails OOM des pods. Remarque Les informations OOM des pods n'identifient pas le pod spécifique. Vous ne pouvez localiser que le nœud, le nom du processus et l'ID du processus où l'événement s'est produit. Vous pouvez exécuter une requête personnalisée pour trouver les événements de redémarrage de pod survenus autour du moment de l'OOM du pod afin d'aider à identifier le pod spécifique. |
Interroger les détails des événements | La page Event Detail Query affiche les détails des événements filtrés selon diverses dimensions, telles que le type d'événement, l'objet de l'événement, l'hôte, le namespace et le nom. |
Afficher le cycle de vie des pods | La page Pod Lifecycle affiche une chronologie graphique des événements dans le cycle de vie d'un pod. Vous pouvez également filtrer les événements de pod importants par niveau d'événement. |
Afficher les événements de nœud | La page Node Events affiche les détails des événements de nœud, tels que le cycle de vie du nœud et une liste d'événements. |
Afficher les événements des composants principaux | La page Core Component Events affiche les détails des événements des composants principaux, tels que les échecs de redémarrage ECS et les modes URL non implémentés. |
Configurer des alertes | Sur la page Alert Configuration, vous pouvez configurer des alertes pour le centre d'événements K8s. Pour plus d'informations, consultez la page Configurer des alertes. |
Exécuter des requêtes personnalisées | Sur la page Custom Query, vous pouvez personnaliser les instructions de requête et d'analyse. Tous les événements du centre d'événements K8s sont stockés dans un Logstore, vous pouvez donc utiliser toutes les fonctionnalités du Logstore, telles que les requêtes personnalisées, la consommation d'événements, les rapports personnalisés et les alertes personnalisées. Pour plus d'informations, consultez la page Démarrage rapide pour la requête et l'analyse. Pour accéder au projet associé à l'instance de centre d'événements K8s, vous pouvez trouver le nom du projet de l'une des manières suivantes :
|
Mettre à jour la version | Sur la page Version Update, vous pouvez mettre à niveau le centre d'événements K8s. |
Supprimer une instance de centre d'événements K8s
Sur la page , localisez l'instance et cliquez sur l'icône
dans la colonne Actions.
Exemple de journal
Le code suivant présente un exemple de journal.
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":""
}
|
log field |
Type |
Description |
|
hostname |
string |
Le nom d'hôte de l'hôte sur lequel l'événement s'est produit. |
|
level |
string |
Le niveau de journal. Valeurs possibles : Normal et Warning. |
|
pod_id |
string |
L'ID unique du pod. Ce champ est inclus uniquement si l'événement est lié à un pod. |
|
pod_name |
string |
Le nom du pod. Ce champ est inclus uniquement si l'événement est lié à un pod. |
|
event_id |
json |
Les détails de l'événement. La valeur de ce champ est une chaîne JSON. |
FAQ
Une instance de centre d'événements K8s ne contient aucune donnée
Après avoir déployé une instance de centre d'événements K8s, les nouveaux événements sont automatiquement collectés. Vous pouvez les rechercher sur la page Custom Query. Nous vous recommandons de définir la plage de temps dans le coin supérieur droit sur 1 jour. Si aucune donnée n'est trouvée, il y a généralement deux causes :
-
Aucun nouvel événement n'a été généré dans le cluster Kubernetes depuis le déploiement du centre d'événements K8s.
Vous pouvez exécuter la commande
kubectl get events --all-namespacespour vérifier si de nouveaux événements sont générés dans le cluster. -
Les paramètres sont incorrectement configurés dans votre déploiement de
kube-eventeret denode-problem-detector.-
Si vous utilisez un cluster Container Service for Kubernetes (ACK), effectuez les étapes suivantes :
Connectez-vous à la console ACK.
Sur la page Clusters, cliquez sur le nom du cluster cible.
Dans le volet de navigation de gauche, choisissez .
Sur la page Helm, recherchez ack-node-problem-detector et cliquez sur Update.
Vérifiez et modifiez les paramètres. Pour plus d'informations, consultez la section Étape 1 : Déployer kube-eventer et node-problem-detector.
Si vous utilisez un cluster Kubernetes auto-géré, consultez la page Collecter les événements Kubernetes pour connaître les paramètres.
-
Comment afficher les journaux de conteneur pour un événement ?
-
Si vous utilisez un cluster Container Service for Kubernetes (ACK), effectuez les étapes suivantes :
Connectez-vous à la console ACK.
Sur la page Clusters, cliquez sur le nom du cluster cible.
Dans le volet de navigation de gauche, choisissez .
Définissez Namespace sur kube-system.
Dans la liste Pods, localisez le pod cible et cliquez sur Log.
Si vous utilisez un cluster Kubernetes auto-géré, vérifiez les journaux des Pods dont le nom de fichier commence par
eventer-slsdans le namespace kube-system.