自定义 Prober

前文已为您介绍如何 编写第一个 Prober 以及 Prober CRD 的基本概念,Kubeprober 也提供了现成的 Prober 供开发者直接使用(位于目录 probers 下)。除此之外,开发者还可以根据自身需要,开发自定义 Prober。

Kubeprober 结合实际开发过程,对于 Prober 的编写、打包总结了如下经验:

  • 一个 Prober 支持将多个执行探测的二进制文件打包至一个容器镜像中,从而通过一个 Pod 运行原本需要多个 Pod 运行的探测任务,节省大量资源和容器调度时间。
  • Kubeprober 当前支持通过 Golang 和 Shell 编写 Prober 探测集。
  • 同一个 Prober 镜像中的每个二进制探测任务可能需要各自的自定义配置。为避免所有配置放置一处造成混乱,Kubeprober 支持为每个二进制探测任务分别指定自定义配置。

下文将以 probers/demo-example 为例,介绍如何编写自定义 Prober。

目录结构

  1. probers/
  2. # 探测集 demo-example
  3. # 探测集下的探测任务会分别编译打包到同一个容器镜像中
  4. demo-example/
  5. # 探测任务子目录,gonlang 执行入口为 main.go 文件
  6. demo-checker1/
  7. ...
  8. main.go
  9. # 探测任务子目录,shell 执行入口为 main.sh 文件
  10. demo-checker2/
  11. ...
  12. main.sh

镜像打包

  1. # 进入到 probers 目录
  2. cd probers
  3. # 镜像打包
  4. # 此处指定探测集 PROBER=demo-example, 版本号: V=0.0.1
  5. # 打包后的镜像为: kubeprober/demo-example:0.0.1
  6. PROBER=demo-example V=0.0.1 make docker-build
  7. # 查看镜像内容
  8. # docker run -it --rm kubeprober/demo-example:0.0.1 /bin/sh
  9. /checkers # ls -lh *
  10. # run.sh 是 prober 内置的启动执行脚本,会依次执行打包到该镜像的可执行文件(探测任务)
  11. run.sh
  12. # 各探测任务在镜像中会被编译为 main 可执行文件,由 run.sh 依次调用执行
  13. demo-checker1:
  14. main
  15. demo-checker2:
  16. main

由此即可将多个可执行探测任务(demo-checker1 和 demo-checker2)打包至一个镜像中。

自定义编写

完成上述 Prober(demo-example)镜像打包后,即可编写对应的 prober.yaml,示例如下:

  1. apiVersion: kubeprober.erda.cloud/v1
  2. kind: Probe
  3. metadata:
  4. name: prober-demo-example
  5. namespace: kubeprober
  6. spec:
  7. template:
  8. containers:
  9. - name: prober-demo-example
  10. image: kubeprober/demo-example:v0.0.1
  11. resources:
  12. requests:
  13. cpu: 10m
  14. memory: 50Mi
  15. restartPolicy: Never
  16. # 如果可执行探测任务有自定义变量配置需求,即可配置如下自定义配置,名字不能重复
  17. configs:
  18. - name: demo-checker1
  19. env:
  20. - name: CHECKER1_ENV1
  21. value: "CHECKER1_VAL1"
  22. - name: CHECKER1_ENV2
  23. value: "CHECKER1_VAL2"
  24. - name: demo-checker2
  25. env:
  26. - name: CHECKER2_ENV1
  27. value: "CHECKER2_VAL1"
  28. - name: CHECKER2_ENV2
  29. value: "CHECKER2_VAL2"