共用方式為

在 Azure Kubernetes 服务 (AKS) 中使用 Kubernetes 事件进行故障排除

本文介绍如何使用 Kubernetes 事件监视和排查 Azure Kubernetes 服务 (AKS) 群集中的问题。

什么是 Kubernetes 事件?

事件是 Kubernetes 中监视和故障排除问题的最突出来源之一。 它们捕获并记录各种 Kubernetes 对象的生命周期信息,例如 Pod、节点、服务和部署。 通过监视事件,可以了解群集的活动、识别问题并有效地排查问题。

Kubernetes 事件不会在整个群集生命周期内保留,因为不存在保留机制。 生成事件后,事件仅在一小时内可用。 要将事件存储更长时间,请启用容器见解

Kubernetes 事件对象

下表列出了一些关键的 Kubernetes 事件对象:

字段名称 DESCRIPTION
类型 类型基于事件的严重性:
“警告”事件表示存在潜在问题的情况,例如 Pod 反复失败或节点资源耗尽。 它们需要注意,但可能不会导致立即失败。
“常规”事件表示例程操作,例如正在调度的 Pod 或部署纵向扩展。 它们通常表示群集行为正常。
原因 生成事件的原因。 例如,FailedScheduling 或 CrashLoopBackoff。
消息 描述事件的用户可读消息。
命名空间 与事件关联的 Kubernetes 对象的命名空间。
firstSeen 首次观察到事件的时间戳。
lastSeen 最后一次观察到事件的时间戳。
报告控制器 报告事件的控制器的名称。 例如,kubernetes.io/kubelet
对象 与事件关联的 Kubernetes 对象的名称。

有关详细信息,请参阅官方 Kubernetes 文档

查看 Kubernetes 事件

使用 kubectl get events 命令列出群集中的所有事件。

假设群集已创建并可用(根据文档先决条件),请获取凭据(请注意标志 --overwrite-existing 设置为避免 kubeconfig 错误):

az aks get-credentials --resource-group $RESOURCE_GROUP --name $AKS_CLUSTER --overwrite-existing

现在列出群集中的所有事件:

kubectl get events

结果:

LAST SEEN   TYPE      REASON              OBJECT                      MESSAGE
xxm         Normal    Scheduled           pod/my-pod-xxxxx            Successfully assigned default/my-pod-xxxxx to aks-nodepoolxx-xxxxxxx-vmss000000
xxm         Normal    Pulled              pod/my-pod-xxxxx            Container image "nginx" already present on machine
xxm         Normal    Created             pod/my-pod-xxxxx            Created container nginx
xxm         Normal    Started             pod/my-pod-xxxxx            Started container nginx
...

首先查找 Pod 的名称,然后使用 kubectl describe pod 命令查看特定 Pod 的事件。

列出当前命名空间中的 Pod:

kubectl get pods

结果:

NAME                             READY   STATUS    RESTARTS   AGE
my-pod-xxxxx                     1/1     Running   0          xxm
nginx-deployment-xxxxx           1/1     Running   0          xxm
...

<pod-name> 替换为下面实际的 Pod 名称。 对于自动化,下面是列表中第一个 Pod 的示例:

POD_NAME=$(kubectl get pods -o jsonpath="{.items[0].metadata.name}")
kubectl describe pod $POD_NAME

使用事件进行故障排除的最佳做法

筛选事件以获取相关性

在 AKS 群集中,可能具有正在运行的各种命名空间和服务。 根据对象类型、命名空间或原因筛选事件有助于将结果范围缩小到最相关的信息。

例如,可以使用以下命令筛选默认命名空间中的事件:

kubectl get events --namespace default

自动化处理事件通知

为了确保及时响应 AKS 群集中的关键事件,请设置自动通知。 Azure 提供与 Azure Monitor 等监视和警报服务的集成。 可以将警报配置为基于特定事件模式触发。 这样,就可以立即了解需要关注的关键问题。

定期查看事件

养成定期查看 AKS 群集中的事件的习惯。 这种主动方法可以帮助你识别趋势、尽早发现潜在问题并防止升级。 通过随时了解事件,可以保持应用程序的稳定性和性能。

后续步骤

现在,你已了解 Kubernetes 事件,可以通过启用容器见解继续监视和可观测性之旅。