Amazing Arch

Helm Prometheus Operator 15分钟搞定K

2019-05-14  本文已影响54人  科学Jia

翻了无数的帖子,最后发现了Prometheus Operator监控Kubernetes集群是最简单的。

直接贴重点,按照以下步骤可以很快搭建起k8s集群的监控:

前提你已经知道了k8s的一些基本知识,譬如namespace,本文的安装是在namespace monitor下完成的,可以根据具体情况修改名字。

监控前,先在namespace为monitor下,部署一个tomcat的k8s集群,等待被监控。

kind: Service
metadata:
  name: tomcat
  labels:
    app: tomcat
  namespace: monitor
spec:
  selector:
    app: tomcat
  ports:
  - name: web123
    targetPort: 8080
    port: 8080
  - name: ajp
    targetPort: 8009
    port: 8009
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: tomcat
  labels:
    app: tomcat
  namespace: monitor
spec:
  replicas: 1
  selector:
    matchLabels:
      app: tomcat
  template:
    metadata:
      labels:
        app: tomcat
    spec:
      containers:
      - name: tomcat
        image: registry.mindsphere.cn/library/tomcat
        ports:
        - name: http
          containerPort: 8080
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: ingress-tomcat
  namespace: monitor
  annotations:
    kubernetes.io/ingress.class: "nginx"
spec:
  rules:
  - host: tomcat.mindsphere.cn
    http:
      paths:
      - path:
        backend:
          serviceName: tomcat
          servicePort: 8080

好,这里被监控的集群已经部署完毕。下面开始安装prometheus operator

1. Helm 安装prometheus Operator

helm install --name mdsp-monitor stable/prometheus-operator --version=5.7.0 --set prometheusOperator.createCustomResource=false --namespace monitor

Note: 这里可能会遇到kube-state-metrics镜像拉不下来,而导致的Imagepullbackoff的错误,可以单独重新部署一下kube-state-metrics, 修改对应deploy.yaml文件里的镜像地址如下:

image: quay.io/coreos/kube-state-metrics:v1.5.0

2. ServiceMonitor.yaml

这里特别要注意一定要填写release: xxx, 这里release: xxx 是绝对绝对不能省去的,不然ServiceMonitors是没有办法生效的。release: xxx的值就是你第一步在helm install 指定--name时候填的值,根据我这里的上下文,需要填写release: mdsp-monitor
然后指定matchlabels: app: tomcat,这样就能监控到labels为app:tomcat的集群了。

apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
  name: tomcat
  namespace: monitor
  labels:
    team: dev
    app: tomcat
    release: mdsp-monitor
spec:
  namespaceSelector:
    any: true
  selector:
    matchLabels:
      app: tomcat
  endpoints:
  - port: web123
    interval: 10s

执行一下apply,使其生效。

kubectl apply -f servicemonitor.yaml -n monitor

3. 暴露prometheus端口,外部可以访问

其实有多种方式暴露端口,先用最近官网最简单的方式吧。

apiVersion: v1
kind: Service
metadata:
  name: prometheus
spec:
  type: NodePort
  ports:
  - name: web
    nodePort: 30900
    port: 9090
    protocol: TCP
    targetPort: web
  selector:
    prometheus: mdsp-monitor-prometheus-op-prometheus

然后同样

kubectl apply -f exposePrometheus.yaml -n monitor

4. 暴露alert-manager的端口,外部可以访问

跟第3步一样, 先写好yaml文件。

apiVersion: v1
kind: Service
metadata:
  name: prometheus-alert
  namespace: monitor
spec:
  type: NodePort
  ports:
  - name: web
    nodePort: 30903
    port: 9093
    protocol: TCP
    targetPort: web
  selector:
    alertmanager: mdsp-monitor-prometheus-op-alertmanager

然后apply一下:

kubectl apply -f exposeAlert.yaml -n monitor

完成3和4步,可以看到集群为你生成了可以外部访问的地址,然后可以直接访问了。


外部可以访问.png

5. 配置grafana

前面第一步安装,其实已经把grafana装好了。也是只需要暴露grafana让它可以外部访问:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: grafana
  namespace: monitor
spec:
  rules:
  - host: grafana.mindsphere.cn
    http:
      paths:
      - path:
        backend:
          serviceName: mdsp-monitor-grafana
          servicePort: 3000

然后apply下上面这个yaml文件

kubectl apply -f grafana_ingress.yaml -n monitor

并且在自己集群的hosts上配置对应的ip

139.24.217.177          grafana.mindsphere.cn    # grafana.mindsphere.cn

最后一步,打开grafana

http://grafana.mindsphere.cn
输入用户admin和密码prom-operator,便可以看到已经有一个datasource来着prometheus已经配置好了。

grafana_datasource.png
点击进去,点击Test按钮,会看到data source is working,说明一切就绪。
grafana
打开monitor下的资源使用情况,可以看到集群已经被监控了。
资源情况

补充一下如何在grafana里加用户

可以不通过email来邀请,关闭掉这个按钮,点击invite,


Add User

然后copy invite,贴到浏览器里,就可以为这个用户设置用户名,密码和权限,这样就能多个不同的用户登陆这个监控系统了。


Add User
这里就可以看到有多少个用户在这个系统了。
刚刚添加的用户权限是viewer

报警

to do

参考

https://akomljen.com/get-kubernetes-cluster-metrics-with-prometheus-in-5-minutes/

上一篇下一篇

猜你喜欢

热点阅读