prometheus如何实现对kube-scheduler/kube-controller-manager的监控(两种方式)

方法一:通过prometheus监控

对kube-scheduler的监控

yaml文件

apiVersion: v1
kind: Service
metadata:
  namespace: kube-system
  name: kube-scheduler-prometheus-discovery
  labels:
    k8s-app: kube-scheduler
  annotations:
    prometheus.io/scrape: 'true'
spec:
  selector:
    component: kube-scheduler
  type: ClusterIP
  clusterIP: None
  ports:
  - name: http-metrics
    port: 10251
    targetPort: 10251
    protocol: TCP

执行命令

kubectl create -f prometheus-KubeSchedulerService.yaml

创建成功后,在endpoint中已经可以找到这个target了,但是抓取数据出错了(down状态)。
这是因为kube-scheduler组件默认绑定在127.0.0.1上,这里想通过节点ip去访问,所以访问被拒绝了,只要把kube-scheduler绑定地址修改为0.0.0.0即可满足要求。
由于kube-scheduler是以静态Pod运行在集群中的,所以只要修改静态Pod目录下对应的yaml文件即可。

cd /etc/kubernetes/manifests/
vi kube-scheduler.yaml
containers:
- command:
- kube-scheduler
- --address=0.0.0.0
- --kubeconfig=/etc/kubernetes/scheduler.conf
- --leader-elect=true

对kube-controller-manager的监控

yaml

apiVersion: v1
kind: Service
metadata:
  namespace: kube-system
  name: kube-controller-manager-prometheus-discovery
  labels:
    k8s-app: kube-controller-manager
  annotations:
    prometheus.io/scrape: 'true'
spec:
  selector:
    component: kube-controller-manager
  type: ClusterIP
  clusterIP: None
  ports:
  - name: http-metrics
    port: 10252
    targetPort: 10252
    protocol: TCP

后续步骤类似kube-scheduler

参考:https://blog.csdn.net/liukuan73/article/details/78881008

方法二:通过Java代码直接获取

KubernetesClient client=null;

//获得ip,port,用户名,密码等信息
client = getK8sClient(client,masterHostIp,masterHostPort, username,password);

//获得各组件的状态对象
List<ComponentStatus> componentList = client.componentstatuses().list().getItems();

for(ComponentStatus cs : componentList){
    String ComponentName = cs.getMetadata().getName();
	String status = cs.getConditions().get(0).getType();
	if(ComponentName.equals("scheduler")){
		if("Healthy".equals(status)){
			//scheduler组件状态为健康
		}
	}
	else if(ComponentName.equals("controller-manager")){
	}
	else if(ComponentName.contains("etcd")){
	}
}


/*
 * 根据ip地址得到k8s对象
 */
private KubernetesClient getK8sClient(KubernetesClient client,String masterHostIp,long port,String username,String password){
	
	String url = "https://" + masterHostIp + ":" + port;
	Config config = new ConfigBuilder()
		.withMasterUrl(url)
		.withTrustCerts(true)	
		.withUsername(username)
		.withPassword(password)
		.withRequestTimeout(3 * 1000)
		.withConnectionTimeout(3 * 1000)
		.build();
	client = new DefaultKubernetesClient(config);
	return client;
}

你可能感兴趣的:(Promethues应用)