添加集群内target

添加权限

RBAC 从 Kubernetes v1.6 处于beta版本,从 v1.8 开始,RBAC已作为 稳定的功能。现在部署的 K8s 集群,一般都有 RBAC 权限控制,需要跨 namespace 添加 metric,先给 prometheus 添加权限。

创建服务账户,编写 sa-prometheus.yaml

apiVersion: v1
kind: ServiceAccount
metadata:
  namespace: monitoring
  name: prometheus

创建集群角色以及分配相应的权限,编写 clusterrole-prometheus.yaml

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: prometheus
rules:
- apiGroups: [""]
  resources:
  - nodes
  - nodes/metrics
  - services
  - endpoints
  - pods
  verbs: ["get", "list", "watch"]
- apiGroups: [""]
  resources:
  - configmaps
  verbs: ["get"]
- apiGroups:
  - networking.k8s.io
  resources:
  - ingresses
  verbs: ["get", "list", "watch"]
- nonResourceURLs: ["/metrics"]
  verbs: ["get"]

把 clusterrole 与 serviceAccount 绑定,编写 clusterrolebinding-prometheus.yaml

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: prometheus
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: prometheus
subjects:
- kind: ServiceAccount
  name: prometheus
  namespace: monitoring

把这三个文件依次创建,然后修改 prometheus(CRD) 的 K8s 的 serviceAccount,把之前的 prometheus-k8s 修改为刚刚创建的服务账户 prometheus。

kubectl edit -n monitoring prometheus k8s

现在就可以跨 namespce 添加指标了。

添加 target

添加集群内 target,需要用到 CRD  (Custom Resource Define) 自定义资源定义 ServiceMonitor。该 CRD 定义了如何监控一组动态的服务,使用标签选择来定义哪些 Service 被选择进行监控。需要注意的是,被监控的服务有暴露 metrics 端点,可以先用 curl 测试

curl 'svc_ip:port'/metrics

查看 peometheus 的配置。

kubectl -n monitoring describe prometheus k8s

可以看到 Namespace Selector 和 Service Monitor Selector 选择器都为空,表示它可以读取集群内所有的 ServiceMonitor。编写 servicemonitor.yaml 文件:

apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
  name: dingtalk-servicemonitor
  namespace: monitoring   #如果 prometheus 配置有指定 namespace,需要在该namespace下创建
  labels:                 #如果 prometheus 配置有指定 labelSelector,需要添加对应的标签
    team: frontend
spec:
  namespaceSelector:      #指定目标 svc 的 namespace,如果是 monitoring 可以省略
    matchNames:
    - default
  selector:               #添加标签选择器,筛选具有该标签的 svc
    matchLabels:       
      app: example-app
  endpoints:
  - port: web             #这里的 port 只能填 string 类型

过一会去 prometheus web 可以查看到 configuration 有更新,

 

查看 web 页面的 target,

我这里做的测试,被监控的服务没有暴露 metrics 端点,所以拿不到指标。

添加集群外target

添加 prometheus-additional.yaml

prometheus的配置默认是不能修改的,目前可以通过新增prometheus-additional.yaml来添加新增配置。

- job_name: kafka  #有多个 job 可在下面以列表的形式添加
  honor_timestamps: true
  metrics_path: /metrics
  scheme: http
  static_configs:
  - targets:
    - 10.1.11.184:9308      # 指定 ip+端口
    - 10.1.11.184:7072
- job_name: zk  
  honor_timestamps: true
  metrics_path: /metrics
  scheme: http
  static_configs:
  - targets:
    - 10.1.11.184:7000      # 指定 ip+端口
    - 10.1.11.185:7000

创建promethues的secret对象

kubectl create secret generic additional-configs --from-file=prometheus-additional.yaml -n monitoring

#更新的话删除,再创建
kubectl delete secret additional-configs -n monitoring

资源对象Promtheus中添加additionalScrapeConfigs 字段

先使用 kubectl –n monitoring get prometheus 查看资源名字

然后使用命令 kubectl -n monitoring edit prometheus k8s ,其中命令中的k8s是Prometheus(CRD)这个资源的名字,不同环境中的名字可能不同

...
spec:  
  additionalScrapeConfigs:
    name: additional-configs   #刚刚创建的 secret 的名字
    key: prometheus-additional.yaml
...

正常情况下,此时就可以在prometheus监控页面看到kafka-exporter这个监控项了

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐