🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
[TOC] ## **背景** 在前面的文章中,prometheus的监控目标(Target)都是静态配置的,如下: ``` scrape_configs: - job_name: 'node_exporter' static_configs: - targets: ['192.168.2.101:9100'] ``` 但是在kubernetes中,假如我们用DaemonSet来运行node-exporter,我们想监控所有的node-exporter,但是node-exporter的Pod数目随着节点的扩缩容而变化的,所以通过上面的静态配置的方法来配置Target肯定是行不通的。于是,就有了我们接下来要介绍的kubernetes下的服务发现。 Prometheus在Kubernetes支持五种类型的服务发现: * Node * Pod * Service * Endpoints * Ingress 在后面的章节,我们将给出详细的示例,来详细介绍Kubernetes的每一种服务发现。 ## **RBAC授权** 在示例之前,我们先给Prometheus容器授权,使它有权限访问Kubernetes的API。新建文件prometheus-rbac.yaml,内容如下: ``` apiVersion: v1 kind: ServiceAccount metadata: name: prometheus namespace: kube-system --- apiVersion: rbac.authorization.k8s.io/v1beta1 kind: ClusterRole metadata: name: prometheus rules: - apiGroups: [""] resources: - nodes - nodes/proxy - services - endpoints - pods verbs: ["get", "list", "watch"] - apiGroups: - extensions resources: - ingresses verbs: ["get", "list", "watch"] - nonResourceURLs: ["/metrics"] verbs: ["get"] --- apiVersion: rbac.authorization.k8s.io/v1beta1 kind: ClusterRoleBinding metadata: name: prometheus roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: prometheus subjects: - kind: ServiceAccount name: prometheus namespace: kube-system ``` 注意,ClusterRole与ClusterRoleBinding是没有命名空间的, 它们属于集群级别的资源对象。 执行以下命令创建: ``` $ kubectl create -f prometheus-rbac.yaml serviceaccount/prometheus created clusterrole.rbac.authorization.k8s.io/prometheus created clusterrolebinding.rbac.authorization.k8s.io/prometheus created ``` 在完成角色权限以及用户的绑定之后,就可以指定Prometheus使用特定的ServiceAccount创建Pod实例。修改prometheus-deployment.yml文件,并添加serviceAccountName定义: ``` apiVersion: apps/v1 kind: Deployment metadata: ... spec: ... template: ... spec: serviceAccountName: prometheus containers: ... ``` 然后,通过kubectl apply对Deployment进行变更升级 ``` $ kubectl apply -f prometheus-deployment.yaml ```