# Cluster CRD

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

    # 主要结构

    type ClusterSpec struct {
    	K8sVersion    string        `json:"k8sVersion,omitempty"`
    	ClusterConfig ClusterConfig `json:"clusterConfig,omitempty"`
    	ExtraInfo     []ExtraVar    `json:"extraInfo,omitempty"`
    }
    
    type ExtraVar struct {
    	Name  string `json:"name" protobuf:"bytes,1,opt,name=name"`
    	Value string `json:"value,omitempty" protobuf:"bytes,2,opt,name=value"`
    }
    
    type ClusterConfig struct {
    	Address         string `json:"address"`
    	Token           string `json:"token"`
    	CACert          string `json:"caCert"`
    	CertData        string `json:"certData"`
    	KeyData         string `json:"keyData"`
    	ProbeNamespaces string `json:"probeNamespaces"`
    }
    
    // ClusterStatus defines the observed state of Cluster
    type ClusterStatus struct {
    	HeartBeatTimeStamp string          `json:"heartBeatTimeStamp,omitempty"`
    	NodeCount          int             `json:"nodeCount,omitempty"`
    	AttachedProbes     []string        `json:"attachedProbes,omitempty"`
    	Checkers           string          `json:"checkers,omitempty"`
    	OnceProbeList      []OnceProbeItem `json:"onceProbeList,omitempty"`
    }
    
    type OnceProbeItem struct {
    	ID         string   `json:"id,omitempty"`
    	CreateTime string   `json:"createTime,omitempty"`
    	FinishTime string   `json:"finishTime,omitempty"`
    	Probes     []string `json:"probes,omitempty"`
    }
    
    // Cluster is the Schema for the clusters API
    type Cluster struct {
    	metav1.TypeMeta   `json:",inline"`
    	metav1.ObjectMeta `json:"metadata,omitempty"`
    
    	Spec   ClusterSpec   `json:"spec,omitempty"`
    	Status ClusterStatus `json:"status,omitempty"`
    }
    
    

    # 配置信息

    配置信息包含 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 诊断程序中使用变量,示例如下:

      extraInfo:
      - name: LOGIN_USER
        value: "xxxxxxx"
      - name: LOGIN_PASSWORD
        value: "xxxxxxxxxxx"
    

    # 状态信息

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