6.3 k8s的事件event和kube-scheduler中的事件广播器

什么是k8s的events

  • k8s的events是向您展示集群内部发生的事情的对象
    • 例如调度程序做出了哪些决定
    • 或者为什么某些 Pod 从节点中被逐出

哪些组件可以产生events

  • 所有核心组件和扩展(操作符)都可以通过 API Server 创建事件
  • k8s 多个组件均会产生 event

如何获取event 数据

get events直接获取

[root@k8s-master01 k8s-leaderelection]# kubectl get events -A 
NAMESPACE         LAST SEEN   TYPE      REASON        OBJECT                      MESSAGE
injection         3m21s       Warning   FailedMount   pod/alpine01                MountVolume.SetUp failed for volume "nginx-conf" : configmap "nginx-configmap" not found
nginx-injection   32m         Normal    Pulled        pod/test-alpine-inject-01   Container image "alpine" already present on machine
nginx-injection   32m         Normal    Created       pod/test-alpine-inject-01   Created container alpine
nginx-injection   32m         Normal    Started       pod/test-alpine-inject-01   Started container alpine
nginx-injection   27m         Normal    Pulled        pod/test-alpine-inject-02   Container image "alpine" already present on machine
nginx-injection   27m         Normal    Created       pod/test-alpine-inject-02   Created container alpine
nginx-injection   27m         Normal    Started       pod/test-alpine-inject-02   Started container alpine

describe 资源获取

  • 比如创建pod时故意将容器的image 仓库名字写错
apiVersion: v1
kind: Pod
metadata:
  name: nginx-pod-test
spec:
    containers:
    - name: nginx
      image: nginxa:1.8
  • 创建之后就可以describe 这个pod获取events,可以看到拉取镜像失败的events
[root@k8s-master01 app]# kubectl describe pod nginx-pod-test 
Name:         nginx-pod-test
Namespace:    default
Priority:     0
Node:         k8s-node01/172.20.70.215
Start Time:   Wed, 15 Sep 2021 19:13:20 +0800
Labels:       <none>
Annotations:  cni.projectcalico.org/podIP: 10.100.85.220/32
              cni.projectcalico.org/podIPs: 10.100.85.220/32
Status:       Pending
IP:           10.100.85.220
IPs:
  IP:  10.100.85.220
Containers:
  nginx:
    Container ID:   
    Image:          nginxa:1.8
    Image ID:   
    Port:           <none>
    Host Port:      <none>
    State:          Waiting
      Reason:       ImagePullBackOff
    Ready:          False
    Restart Count:  0
    Environment:    <none>
    Mounts:
      /var/run/secrets/kubernetes.io/serviceaccount from default-token-k46nh (ro)
Conditions:
  Type              Status
  Initialized       True 
  Ready             False 
  ContainersReady   False 
  PodScheduled      True 
Volumes:
  default-token-k46nh:
    Type:        Secret (a volume populated by a Secret)
    SecretName:  default-token-k46nh
    Optional:    false
QoS Class:       BestEffort
Node-Selectors:  <none>
Tolerations:     node.kubernetes.io/not-ready:NoExecute op=Exists for 300s
                 node.kubernetes.io/unreachable:NoExecute op=Exists for 300s
Events:
  Type     Reason     Age                  From               Message
  ----     ------     ----                 ----               -------
  Normal   Scheduled  2m57s                default-scheduler  Successfully assigned default/nginx-pod-test to k8s-node01
  Normal   Pulling    67s (x4 over 2m57s)  kubelet            Pulling image "nginxa:1.8"
  Warning  Failed     63s (x4 over 2m49s)  kubelet            Failed to pull image "nginxa:1.8": rpc error: code = Unknown desc = failed to pull and unpack image "docker.io/library/nginxa:1.8": failed to resolve reference "docker.io/library/nginxa:1.8": pull access denied, repository does not exist or may require authorization: server message: insufficient_scope: authorization failed
  Warning  Failed     63s (x4 over 2m49s)  kubelet            Error: ErrImagePull
  Normal   BackOff    50s (x6 over 2m49s)  kubelet            Back-off pulling image "nginxa:1.8"
  Warning  Failed     39s (x7 over 2m49s)  kubelet            Error: ImagePullBackOff

Event事件管理机制要有三部分组成

event.png

  • EventRecorder:是事件生成者,k8s组件通过调用它的方法来生成事件;
  • EventBroadcaster:事件广播器,负责消费EventRecorder产生的事件,然后分发给broadcasterWatcher;
  • broadcasterWatcher:用于定义事件的处理方式,如上报apiserver;

events保存问题

  • Events 量非常大,只能存在一个很短的时间
  • Event 一般会通过apiserver暂存在etcd集群中 (最好是单独的etcd集群存储events,和集群业务数据的etcd分开)
  • 为避免磁盘空间被填满,故强制执行保留策略:在最后一次的事件发生后,删除1小时之前发生的事件。

event有什么作用

  • 可以基于event对k8s集群监控,下面图片来自网络
  • k8s_event_mon.png

kube-scheduler中的event解读

EventBroadcaster的初始化

  • 在初始化配置的Config中 ,位置 D:\go_path\src\github.com\kubernetes\kubernetes\cmd\kube-scheduler\app\options\options.go
	c.EventBroadcaster = events.NewEventBroadcasterAdapter(eventClient)

  • new
// NewEventBroadcasterAdapter creates a wrapper around new and legacy broadcasters to simplify
// migration of individual components to the new Event API.
func NewEventBroadcasterAdapter(client clientset.Interface) EventBroadcasterAdapter {
   
   
	eventClient := &eventBroadcasterAdapterImpl{
   
   }
	if _, err := client.Discovery().ServerResourcesForGroupVersion(eventsv1.SchemeGroupVersion.String()); err == nil {
   
   
		eventClient.eventsv1Client = client.EventsV1()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

福大大架构师每日一题

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值