Prober 管理

Prober 是一个诊断项(Checker)集合,通常将一组或某一场景下的诊断项编排至一个 Prober 镜像中,随后根据用户定义的执行策略,单次或周期性执行诊断探测任务。

当前 Kubeprober 支持通过 Golang、Shell 编写 Prober,其位于目录 probers 下。

已有的 Prober

Kubeprober 已有的 Prober 列表如下:

  1. probers/
  2. # prober 示例
  3. demo-exampe
  4. # node 层探测集
  5. node
  6. # k8s 层探测集
  7. k8s
  8. # addon 层探测集
  9. addon

您可直接使用已有的探测集,或根据需要修改、编写 自定义Prober

单集群 Prober 管理

单集群情况下,仅需在 prober-agent 所在 Namespace 下创建 Prober,即可由 prober-agent 调协,生成具体的探测 Pod,执行探测任务并上报探测结果。

此处,最小化安装使用 prober-agent 即可,具体请参见 单集群使用 Kubeprober。Prober 的使用方法请参见 编写第一个 Prober

多集群 Prober 管理

多集群情况下,需在中心集群部署 prober-master,受纳管集群需安装 prober-agent 实现集群上报注册,由此实现 多集群使用 Kubeprober。Prober 的管理方式如下:

  1. [root@node-0001 ~]# kubectl get cluster
  2. NAME VERSION NODECOUNT PROBENAMESPACE PROBE TOTAL/ERROR HEARTBEATTIME AGE
  3. cluster1 v1.13.5 32 kubeprober [] 0/0 2021-09-01 17:59:23 17d
  4. cluster2 v1.16.4 6 kubeprober [] 0/0 2021-09-01 17:59:08 17d
  • PROBE 表示下发至该集群的诊断集。
  • TOTAL/ERROR 表示总诊断项/失败的诊断项数目。

Prober 模版

中心集群在 Default Namespace 中生成 Prober 模版,由于 prober-agent 仅监听其所在 Namespace(非 Default)的 Prober,因此生成的模版 Prober 将不受调协。

  1. # prober 模版
  2. [root@node-0001 ~]# kubectl get probe
  3. NAME RUNINTERVAL IMAGE AGE
  4. addon 33 kubeprober/probe-addon:v0.0.7 6d1h
  5. k8s 30 kubeprober/probe-k8s:v0.1.5 9d
  6. node 30 kubeprober/probe-node:v0.1.0 8d

Prober 下发

Kubeprober 通过标签实现 Prober 的下发,为纳管集群添加对应的 Prober 标签即可。

  1. # 给纳管的集群添加 prober 标签 probe/${PROBER_TEMPLATE_NAME}=true
  2. [root@node-0001 ~]# kubectl label cluster cluster1 probe/k8s=true
  3. [root@node-0001 ~]# kubectl label cluster cluster2 probe/k8s=true
  4. # 集群查看下发到k8s prober 已下发到纳管的集群
  5. [root@node-0001 ~]# kubectl get cluster
  6. NAME VERSION NODECOUNT PROBENAMESPACE PROBE TOTAL/ERROR HEARTBEATTIME AGE
  7. cluster1 v1.13.5 32 kubeprober [k8s] 57/3 2021-09-01 17:59:23 17d
  8. cluster2 v1.16.4 6 kubeprober [k8s] 56/2 2021-09-01 17:59:08 17d

诊断结果查看

通过 kubectl probe status -c ${CLUSTER_NAME} 可查看指定集群的详细诊断结果:

  1. [root@node-0001 ~]# kubectl probe status -c cluster1
  2. PROBER CHECKER STATUS MESSAGE LASTRUN
  3. k8s dns-resolution-check PASS 2021-09-02 11:00:30
  4. k8s deployment-service-check PASS 2021-09-02 11:01:03
  5. k8s k8s-componentsstatus PASS - 2021-09-02 11:01:07
  6. k8s calico-node ERROR desiredNumberScheduled != numberReady 2021-09-02 11:01:07
  7. k8s coredns PASS - 2021-09-02 11:01:07
  8. k8s kube-proxy ERROR desiredNumberScheduled != numberReady 2021-09-02 11:01:07
  9. k8s nginx-ingress-controller PASS - 2021-09-02 11:01:08
  10. k8s calico-kube-controllers PASS - 2021-09-02 11:01:08
  11. k8s kubelet_version PASS - 2021-09-02 11:01:09
  12. k8s kubelet_server_version INFO kubelet and server(apiserver, controller, 2021-09-02 11:01:09 scheduler) version is different
  13. k8s k8s-nodeready PASS - 2021-09-02 11:01:09
  14. k8s k8s_node_label PASS - 2021-09-02 11:01:09
  15. k8s check_node_cordon ERROR there exists node: node-010020010056 2021-09-02 11:01:09
  16. node-010020010057 node-010020010058
  17. SchedulingDisabled
  18. k8s pipeline_namespace_leak PASS - 2021-09-02 11:01:09
  19. ...