• 使用阿里kube-eventer监控pod状态


    简介

    生产环境资源不足,对pod做了limits限制,导致了pod经常重启,所以需要加个监控看看。

    kube-events

    请教大佬给了这样的工具,https://github.com/AliyunContainerService/kube-eventer

    在Kubernetes中,事件分为两种,一种是Warning事件,表示产生这个事件的状态转换是在非预期的状态之间产生的;另外一种是Normal事件,表示期望到达的状态,和目前达到的状态是一致的。我们用一个Pod的生命周期进行举例,当创建一个Pod的时候,首先Pod会进入Pending的状态,等待镜像的拉取,当镜像录取完毕并通过健康检查的时候,Pod的状态就变为Running。此时会生成Normal的事件。而如果在运行中,由于OOM或者其他原因造成Pod宕掉,进入Failed的状态,而这种状态是非预期的,那么此时会在Kubernetes中产生Warning的事件。那么针对这种场景而言,如果我们能够通过监控事件的产生就可以非常及时的查看到一些容易被资源监控忽略的问题。

    下面引入阿里开源的 kube-eventer

    部署

    首先申请个钉钉机器人,获取到webhook。

    设置钉钉机器人的关键字时要注意,发送的消息里面必须包含你的关键字才能发送成功。

    我的关键字设置了好几个,下面部署的时候需要修改的。

    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.aliyuncs.com/acs/kube-eventer-amd64:v1.2.0-484d9cd-aliyun
              name: kube-eventer
              command:
                - "/kube-eventer"
                - "--source=kubernetes:https://kubernetes.default"
                ## 注意这里的label要和钉钉机器人的关键字对应上
                - --sink=dingtalk:https://oapi.dingtalk.com/robot/send?access_token=18c5fxxxx&label=alert&level=Warning&msg_type=markdown
              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: 100m
                  memory: 100Mi
                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:
          - configmaps
          - 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-system
    

    测试

    人为的创造个故障出来,比如image设置不存在的镜像,让容器的状态是BackOff之类的即可。告警如图:

    资源不足了,自己出告警,不用测试了。

  • 相关阅读:
    内网穿透事件参考
    mysql的优化总结
    linux切换普通用户遇bash-4.1解决
    python爬虫匹配实现步骤
    restful设计参考
    php扩展安装
    python算术
    python 文件操作
    python生成器
    Spring框架的事务管理之基于AspectJ的XML方式(重点掌握)
  • 原文地址:https://www.cnblogs.com/fsckzy/p/15066595.html
Copyright © 2020-2023  润新知