Joe Blog

Kubernetes InitContainers是在容器启动之前运行任意代码的一种简便方法。它可以确保在启动和运行应用程序之前满足某些前提条件。

但是InitContainers 也有其局限性,如果Crashloop永远不会重新运行InitContainers,InitContainers仅在pod创建时运行,如果pod中的常规容器死亡并重新启动,则只需重新启动它们即可。不需要运行init容器,因为emptydir卷与pod共享相同的生命周期,只要pod继续存在。

这个时候对InitContainer的监控报警非常有必要,可以在排查Pod异常的时候提供前期的信息,而不是像之前一样是一个黑盒,Kube-state-metrics为Prometheus公开了大量Kubernetes集群指标。结合两者,我们可以在发现容器问题时进行监视和警报。社区合并了一个提供InitContainer数据的Metrics指标PR

Kube-state-metrics 在1.7版本提供了metricskube_pod_init_container_status_last_terminated_reason

https://github.com/kubernetes/kube-state-metrics/releases/tag/v1.7.0

[FEATURE] Add Pod init container metrics. #762

添加相关指标到Prometheus的scrape_configs

- job_name: 'kube-state-metrics'
  static_configs:
    - targets: ['kube-state-metrics:8080']

kube_pod_init_container_status_last_terminated_reason包含reason可以处于五个不同状态的度量标准标签:

如果需要将这些监控指标不是”Completed”被AlertManager的报出来,需要添加 如下Alert告警规则

groups:
  - name: Init container failure
    rules:
      - alert: InitContainersFailed
        expr: kube_pod_init_container_status_last_terminated_reason{reason!="Completed"} == 1
        annotations:
          summary: ' init failed'
          description: ' has not completed init containers with the reason '