kubernetes版本:1.18.6
kubesphere版本:3.0.0
问题描述一:kube-scheduler调度信息无法获取,如下所示:

问题描述二:在二进制部署的kubernetes环境下安装的kubesphere,Components Status状态栏中的kube-scheduler
与kube-controller-manager监控如下所示:

问题分析一:ks-installer在部署prometheus operator的时候,会执行ks-monitor task,而关于kube-controller-manager与kube-scheduler的ServiceMonitor中并没有ep的处理工作,在我手动添加ep后,该问题得到暂时缓解,在8个小时后,kube-scheduler与kube-controller-manager ep、svc被重置,导致该问题重复,我只能手动修改serviceKubeScheduler.yaml文件,添加ep,但我觉得这种hard code不是解决方案。
问题分析二:在我查看了ks的源码后,发现以下问题:
pods, err := c.informers.Core().V1().Pods().Lister().Pods(ns).List(labels.SelectorFromValidatedSet(service.Spec.Selector))
if err != nil {
klog.Errorln(err)
continue
}
for _, pod := range pods {
component.TotalBackends++
if pod.Status.Phase == corev1.PodRunning && isAllContainersReady(pod) {
component.HealthyBackends++
}
}
components = append(components, component)
ks-console中的Components Status通过获取svc后面的pod来判断服务是否正常,对于容器化部署的k8s来说可以实现对kube-controller-manager与kube-scheduler的状态判断,但是对于二进制部署的kubesphere,该方式不适用,我通过保持对ep进行telnet的方式解决了这个问题,但我觉得应该有更好的解决方案