Cluster CRD

Cluster CRD 在 kubeprober 中描述集群对象,用于管理海量集群信息以及查看集群的诊断信息。

主要结构

  1. type ClusterSpec struct {
  2. K8sVersion string `json:"k8sVersion,omitempty"`
  3. ClusterConfig ClusterConfig `json:"clusterConfig,omitempty"`
  4. ExtraInfo []ExtraVar `json:"extraInfo,omitempty"`
  5. }
  6. type ExtraVar struct {
  7. Name string `json:"name" protobuf:"bytes,1,opt,name=name"`
  8. Value string `json:"value,omitempty" protobuf:"bytes,2,opt,name=value"`
  9. }
  10. type ClusterConfig struct {
  11. Address string `json:"address"`
  12. Token string `json:"token"`
  13. CACert string `json:"caCert"`
  14. CertData string `json:"certData"`
  15. KeyData string `json:"keyData"`
  16. ProbeNamespaces string `json:"probeNamespaces"`
  17. }
  18. // ClusterStatus defines the observed state of Cluster
  19. type ClusterStatus struct {
  20. HeartBeatTimeStamp string `json:"heartBeatTimeStamp,omitempty"`
  21. NodeCount int `json:"nodeCount,omitempty"`
  22. AttachedProbes []string `json:"attachedProbes,omitempty"`
  23. Checkers string `json:"checkers,omitempty"`
  24. OnceProbeList []OnceProbeItem `json:"onceProbeList,omitempty"`
  25. }
  26. type OnceProbeItem struct {
  27. ID string `json:"id,omitempty"`
  28. CreateTime string `json:"createTime,omitempty"`
  29. FinishTime string `json:"finishTime,omitempty"`
  30. Probes []string `json:"probes,omitempty"`
  31. }
  32. // Cluster is the Schema for the clusters API
  33. type Cluster struct {
  34. metav1.TypeMeta `json:",inline"`
  35. metav1.ObjectMeta `json:"metadata,omitempty"`
  36. Spec ClusterSpec `json:"spec,omitempty"`
  37. Status ClusterStatus `json:"status,omitempty"`
  38. }

配置信息

配置信息包含 K8sVersion, ClusterConfig, ExtraInfo, 其中 K8sVersion,ClusterConfig 信息是由 probe-agent 上报上来的,将 k8s 的版本信息,连接 ApiServer需要的token 或者 秘钥对信息写在 Cluster 资源的 Spec 中。

ClusterConfig

ClusterConfig 用来存储 probe-agent 从被纳管集群中采集上来的 k8s 信息 ,包含 api-server 的内网地址,认证所需要的 Token,CA,Cert,Key 以及 probe-agent 所在的 namespace。上报上来的 ApiServer 认证信息所具有的 RBAC 权限由部署在被纳管集群的 kuberprober ns 下的 kubeprober ServiceAcount 权限来决定,如果需要更多权限,可以修改对应的 ClusterRole。

ExtraInfo

ExtraInfo 被设计用来存储每个集群的特性化配置,可以理解成环境变量,通过增加修改或者删除 Cluster 资源中的 ExtraInfo 环境变量,probe-master 会将最新的变量同步到对应集群的名为 extra-config 的 ConfigMap 中,然后就可以在对应的 Probe 诊断程序中使用这些变量了,达到实现不同集群相同诊断项但是某些参数不通的场景,一个具体的例子,如下:

  1. extraInfo:
  2. - name: LOGIN_USER
  3. value: "xxxxxxx"
  4. - name: LOGIN_PASSWORD
  5. value: "xxxxxxxxxxx"

状态信息

Cluster 的 Status 主要用来存储集群的诊断状态数据,包含节点数量, 该集群关联的 Probe 列表,所有 Checker 的诊断结果数据(以 总数/Error数量 来显示),以及 OnceProbeList 一次性诊断历史记录。