Prober 管理

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

kubeprober 当前主要支持 golang、shell 编写的 prober,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 创建到 prober-agent 所在 namespace,即可被 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 模版

首先在中心集群中,会在 defalut namespace 生成 prober 模版,这和我们前面讲述的 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 通过 label 方式实现 prober 的下发,给纳管的集群添加对应的 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. ...