Os eventos do Kubernetes registram alterações de estado no cluster, como criação, execução e exclusão de pods ou erros de componentes. O K8s event center coleta todos os eventos do cluster Kubernetes em tempo real e oferece recursos de armazenamento, consulta, análise, visualização e alertas. Este tópico descreve o procedimento para criar e usar um K8s event center.
Informações básicas
A arquitetura do Kubernetes baseia-se em uma máquina de estados. Quando o sistema transita entre estados, gera eventos. Transições entre estados normais produzem eventos Normal, enquanto transições entre estados normais e anormais geram eventos Warning.
O ACK (Container Service for Kubernetes) fornece uma solução pronta para uso de monitoramento de eventos em ambientes conteinerizados. Essa solução utiliza o node-problem-detector (NPD), mantido pelo ACK, e seu componente incluído, kube-eventer, para oferecer o monitoramento de eventos.
O node-problem-detector (NPD) é uma ferramenta de diagnóstico de nós do Kubernetes. Ele converte anomalias nos nós, como travamentos do docker Engine, travamentos do kernel Linux, exceções de acesso à rede pública e problemas de descritores de arquivos, em eventos de nó. Em conjunto com o kube-eventer, possibilita um sistema de alertas de ciclo fechado para eventos de nó.
O kube-eventer é uma ferramenta open source mantida pelo ACK para arquivamento de eventos do Kubernetes. Ele envia eventos do cluster para sistemas externos, como DingTalk, Simple Log service (SLS) e EventBridge, além de oferecer filtragem por nível de evento. Isso permite a coleta em tempo real, alertas direcionados e o arquivamento assíncrono de eventos.
Pré-requisitos
Crie um cluster Kubernetes, como um cluster ACK da Alibaba Cloud ou um cluster ACK Serverless.
Faturamento
O K8s event center é gratuito se as seguintes condições forem atendidas:
O período de retenção de dados do Logstore associado ao K8s event center é de 90 dias (valor padrão).
O volume de dados gravados no K8s event center é inferior a 256 MB por dia, o que corresponde a aproximadamente 250.000 eventos.
Exemplos:
Se você usar o período de retenção de dados padrão de 90 dias e seu cluster Kubernetes gerar 1.000 eventos por dia, o K8s event center será gratuito.
Caso defina o período de retenção de dados para 105 dias e seu cluster Kubernetes gere 1.000 eventos por dia, haverá cobrança pelo armazenamento do Logstore após 90 dias. O item faturável é Log Storage . Para mais informações sobre o item faturável Log Storage, consulte Billable items in pay-by-feature mode.
Etapa 1: Implantar kube-eventer e node-problem-detector
ACK
Para clusters ACK, basta implantar o componente ack-node-problem-detector, pois ele integra as funcionalidades de kube-eventer e node-problem-detector. Se você usar um cluster ACK Serverless, implante o componente kube-eventer.
O NPD usa configurações e plug-ins de terceiros para detectar problemas nos nós e gerar eventos correspondentes no cluster. Um cluster Kubernetes também gera seus próprios eventos durante transições de estado, como despejos de pods ou falhas ao baixar imagens. O Kubernetes Event Center do Simple Log service (SLS) centraliza todos os eventos do Kubernetes em tempo real e fornece armazenamento, consulta, análise, visualização e alertas. Para integrar os eventos do seu cluster ao Kubernetes Event Center, siga estas etapas:
Caso tenha selecionado Install node-problem-detector and Create Event Center durante a criação do cluster, pule para a Etapa 2 para visualizar o Kubernetes Event Center. Para obter informações sobre como instalar o componente NPD durante a criação do cluster, consulte Criar um cluster gerenciado ACK.
-
Se não tiver selecionado Install node-problem-detector and Create Event Center durante a criação do cluster, siga as etapas abaixo para instalá-lo manualmente.
Faça login no console ACK. No painel de navegação à esquerda, clique em Clusters.
Na página Clusters, clique no nome do cluster desejado. No painel de navegação à esquerda, escolha .
Na aba Logs and Monitoring, localize e instale o ack-node-problem-detector.
Self-managed Kubernetes
-
Implante o
kube-eventer.Instale o kubectl. Para mais informações, consulte Obtain the kubeconfig file of a cluster and use kubectl to connect to the cluster.
-
Crie um arquivo de configuração chamado eventer.yaml com base no modelo a seguir.
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
Obrigatório
Descrição
endpoint
string
Sim
O endpoint do Simple Log service. Para mais informações, consulte Endpoints.
project
string
Sim
O projeto do Simple Log service.
logStore
string
Sim
O Logstore do Simple Log service.
internal
string
Obrigatório para clusters Kubernetes autogerenciados.
Para um cluster Kubernetes autogerenciado, defina este parâmetro como false.
regionId
string
Obrigatório para clusters Kubernetes autogerenciados.
O id da região onde o Simple Log service está localizado. Para mais informações, consulte Endpoints.
accessKeyId
string
Obrigatório para clusters Kubernetes autogerenciados.
O AccessKey id. Recomendamos usar o par de AccessKeys de um usuário do Resource Access Management (ram). Para mais informações, consulte AccessKey pair.
accessKeySecret
string
Obrigatório para clusters Kubernetes autogerenciados.
O AccessKey secret. Recomendamos usar o par de AccessKeys de um usuário do Resource Access Management (ram). Para mais informações, consulte AccessKey pair.
-
Execute o comando a seguir para aplicar a configuração
eventer.yamlao cluster.kubectl apply -f eventer.yamlSaída 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
Implante o
node-problem-detector.
Etapa 2: Criar uma instância do K8s event center
Após criar uma instância do K8s event center, o Simple Log service cria automaticamente um Logstore chamado k8s-event e painéis relacionados no projeto de destino.
Faça login no console do Simple Log service.
Na seção Log Application, clique na aba Intelligent O&M e, em seguida, clique em K8s Event Center.
Na página Event Center Management, clique em Add no canto superior direito.
-
No painel Create Event Center, configure os parâmetros e clique em Next.
Ao selecionar Select Existing Project, escolha um projeto existente na lista suspensa Project para gerenciar os recursos da instância do K8s event center, como o Logstore e os painéis.
Se optar por Select Kubernetes Cluster from Container Service for Kubernetes, selecione um cluster K8s existente na lista suspensa K8s Cluster. Com esse método, o Simple Log service cria automaticamente um projeto chamado
k8s-log-{cluster-id}para gerenciar os recursos da instância do K8s event center, incluindo Logstore e painéis.
Etapa 3: Usar a instância do K8s event center
Depois de criar uma instância do K8s event center e implantar o kube-eventer e o node-problem-detector, inicie o uso do event center. É possível visualizar o resumo de eventos, consultar detalhes, acompanhar o ciclo de vida dos pods, verificar eventos de nós e de componentes principais, configurar alertas, executar consultas personalizadas e atualizar a versão.
Na página K8s Event Center, localize a instância desejada do K8s event center e clique no ícone
para realizar as operações a seguir.
Ações | Descrição |
Visualizar resumo de eventos | A página Event Overview exibe estatísticas resumidas dos eventos principais. As estatísticas incluem o número total de eventos, comparação de eventos de erro entre hoje e ontem, estatísticas de alertas, tendências de eventos de erro e detalhes de OOM de pods. Nota As informações de OOM de pod não identificam o pod específico. É possível localizar apenas o nó, o nome do processo e o id do processo onde o evento ocorreu. Execute uma consulta personalizada para encontrar eventos de reinicialização de pods ocorridos próximos ao horário do OOM e ajudar a identificar o pod específico. |
Consultar detalhes do evento | A página Event Detail Query mostra os detalhes dos eventos filtrados por diversas dimensões, como tipo de evento, objeto do evento, host, namespace e nome. |
Visualizar ciclo de vida do pod | A página Pod Lifecycle apresenta uma linha do tempo gráfica dos eventos no ciclo de vida de um pod. Também é possível filtrar eventos importantes do pod por nível de evento. |
Verificar eventos de nó | A página Node Events exibe detalhes dos eventos de nó, como o ciclo de vida do nó e uma lista de eventos. |
Analisar eventos de componentes principais | A página Core Component Events mostra detalhes de eventos de componentes principais, como falhas na reinicialização de ECS e modos de URL não implementados. |
Configurar alertas | Na página Alert Configuration, configure alertas para o K8s event center. Para mais informações, consulte Set up alerts. |
Executar consultas personalizadas | Na página Custom Query, personalize instruções de consulta e análise. Todos os eventos no K8s event center são armazenados em um Logstore, permitindo o uso de todos os recursos do Logstore, como consultas personalizadas, consumo de eventos, relatórios personalizados e alertas personalizados. Para mais informações, consulte Quick start for query and analysis. Para acessar o projeto associado à instância do K8s event center, encontre o nome do projeto de uma das seguintes formas:
|
Atualizar versão | Use a página Version Update para fazer upgrade do K8s event center. |
Excluir uma instância do K8s event center
Na página , localize a instância e clique no ícone
na coluna Actions.
Log de exemplo
O código a seguir mostra um log de exemplo.
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 do log |
Tipo |
Descrição |
|
hostname |
string |
O nome do host onde o evento ocorreu. |
|
level |
string |
O nível do log. Valores válidos: Normal e Warning. |
|
pod_id |
string |
O id exclusivo do pod. Este campo só aparece se o evento estiver relacionado a um pod. |
|
pod_name |
string |
O nome do pod. Este campo só aparece se o evento estiver relacionado a um pod. |
|
event_id |
json |
Os detalhes do evento. O valor deste campo é uma string JSON. |
Perguntas frequentes
Uma instância do K8s event center não tem dados
Após implantar uma instância do K8s event center, novos eventos são coletados automaticamente. Pesquise-os na página Custom Query. Recomendamos definir o intervalo de tempo no canto superior direito para 1 Day. Se nenhum dado for encontrado, geralmente há duas causas:
-
Nenhum novo evento foi gerado no cluster Kubernetes desde a implantação do K8s event center.
Execute o comando
kubectl get events --all-namespacespara verificar se há novos eventos no cluster. -
Os parâmetros estão configurados incorretamente na implantação do
kube-eventere donode-problem-detector.-
Para clusters Container Service for Kubernetes (ACK), execute estas etapas:
Faça login no console ACK.
Na página Clusters, clique no nome do cluster desejado.
No painel de navegação à esquerda, escolha .
Na página Helm, localize ack-node-problem-detector e clique em Update.
Verifique e modifique as configurações dos parâmetros. Para mais informações, consulte Step 1: Deploy kube-eventer and node-problem-detector.
Em clusters Kubernetes autogerenciados, consulte Collect Kubernetes events para ver as configurações de parâmetros.
-
Como visualizar os logs de contêiner de um evento?
-
Para clusters Container Service for Kubernetes (ACK), siga estas etapas:
Faça login no console ACK.
Na página Clusters, clique no nome do cluster desejado.
No painel de navegação à esquerda, escolha .
Defina Namespace como kube-system.
Na lista Pods, localize o pod desejado e clique em Log.
Em clusters Kubernetes autogerenciados, verifique os logs dos Pods com o prefixo de nome de arquivo
eventer-slsno namespace kube-system.