k8s_event

源码 主页

由 CoreDNS 维护

启用
k8s_event:github.com/coredns/k8s_event

k8s_event - 将 CoreDNS 状态报告到 Kubernetes 事件。

说明

k8s_event 监听日志打印,并将它们作为事件报告给 Kubernetes APIServer。

此插件需要 …

  • kubeapi 插件,创建与 Kubernetes API 的连接。
  • 创建/修补/更新 Events API 权限。

启用此插件是全局的:至少在一个服务器块中启用 k8s_event,可以全局启用它。

语法

k8s_event {
    level LEVELS...
    rate [QPS] [Burst] [CacheSize]
}
  • levels 选择应报告为 Kubernetes 事件的日志级别。LEVELS 是一个空格分隔的日志级别列表,支持的级别是 debugerrorfatalinfowarning。日志级别会反映在事件的 Reason 字段上,例如它会使用 CoreDNSWarning 作为警告日志的 Reason 字段。如果没有指定级别,则默认为 errorwarning
  • rate 用于控制事件限流。
    • QPS 是令牌桶的填充速率,以每秒查询数表示,默认为 1/300。
    • Burst 是令牌桶速率过滤使用的突发大小,默认为 25。
    • CacheSize 是用于在本地缓存事件的 lru 缓存大小,默认为 4096。

部署

默认情况下,此插件会代表其自己的 CoreDNS Pod 报告事件,PodName 和 Namespace 是通过 Downward API 收集的。

在 kubernetes 中部署 CoreDNS 时,应包括以下环境变量。

env:
  - name: COREDNS_POD_NAME
    valueFrom:
      fieldRef:
        fieldPath: metadata.name
  - name: COREDNS_NAMESPACE
    valueFrom:
      fieldRef:
        fieldPath: metadata.namespace

当缺少这些环境变量时,此插件将代表 default 命名空间报告事件。

此外,还应附加以下内容到 system:coredns ClusterRole。

- apiGroups:
  - ""
  - events.k8s.io
  resources:
  - events
  verbs:
  - create
  - patch
  - update

示例

监听 infoerrorwarning 级别的日志打印,并通过群集内 Kubernetes API 进行报告。事件发送速率由 QPS 0.15 token/sBurst 10 tokenLRUCacheSize 1024 token 控制。

.:53 {
    kubeapi
    k8s_event {
      level info error warning
      rate 0.15 10 1024
    }
}

输出

$ kubectl get ev -A -w
NAMESPACE   LAST SEEN   TYPE      REASON           OBJECT              MESSAGE
default     1s          Normal    CoreDNSInfo      namespace/default   plugin/reload: Running configuration SHA512 = <omitted>
default     1s          Warning   CoreDNSError     namespace/default   plugin/errors: 2 <omitted>. A: read udp <omitted>: i/o timeout
default     1s          Warning   CoreDNSError     namespace/default   plugin/reload: Corefile changed but reload failed: <omitted>