翻了无数的帖子,最后发现了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已经配置好了。
点击进去,点击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/
网友评论