Promethues调测记录
一、目标:
promethues应用部署
监控维度: 主机,pod层,应用参数层
告警配置(邮件短信)
页面监控调配
二、部署过程
1、根据集群版本选择对应的promethues operator版本,这里选择0.9版本
2、下载operator包,切换到0.9分支
git clone https://github.com/prometheus-operator/kube-prometheus.git
git checkout v.0.9.0
3、创建CRDs资源
进入manifests/setup目录,由于集群已经存在一套promethues集群,需要作一些修改:
修改所有以Definition.yaml结尾的文件(纯净环境无需改动)
将spec.group字段值尾部添加”.test”,将metadata.name字段值尾部添加”.test”
CRD资源metadata下字段的命名规则为: spec.names. plural+.+spec.group
修改cluster级别资源(纯净环境无需改动)
prometheus-operator-clusterRoleBinding.yaml
prometheus-operator-clusterRole.yaml
改为别名避免重复
(3)创建CRDs资源
修改完后,执行kubectl apply -f . 创建CRD资源。
4、安装prometheus
(1)修改暴露外部访问的端口
如果不配置ingress直接通过node ip访问prometheus相关UI的话需要将默认的cluster ip改为node IP
cd manifests/
vim prometheus-service.yaml
type: NodePort
nodePort: 31090
vim grafana-service.yaml
type: NodePort
nodePort: 31000
vim alertmanager-service.yaml
type: NodePort
nodePort: 31093
(2)修改node-exporter端口(纯净环境无需改动)
现有集群已占用9100端口, 所以需要修改node-export占用的端口
修改node-exporter-daemonset.yaml内容,将9100改为9101
由于`hostNetwork` is true,需要将hostPort与containerPort保持一致。
修改node-exporter-service.yaml内容,将9100改为9101
(3)使用集群storageClass,实现promethues本地存储
修改prometheus-prometheus.yaml文件,添加如下内容:
storage:
volumeClaimTemplate:
spec:
storageClassName: sc-topolvm
resources:
requests:
storage: 100Gi
(4)Grafana本地化存储,storageClass
创建grafana使用的pvc
vim grafana-pvc.yaml
kubectl create -f grafana-pvc.yaml
(5)alertmanager本地存储storageclass
vim alertmanager-alertmanager.yaml
(4)修改APIService资源(纯净环境无需改动)
prometheus-adapter-apiService.yaml
修改clusterrole,修改name名称(纯净环境无需改动)
blackbox-exporter-clusterRole.yaml
prometheus-adapter-clusterRole.yaml
kube-state-metrics-clusterRole.yaml
prometheus-clusterRole.yaml
node-exporter-clusterRole.yaml
修改grafana时区(不修改会出现时区问题)
进入manifests目录
sed -i 's/UTC/UTC+8/g' grafana-dashboardDefinitions.yaml
sed -i 's/utc/utc+8/g' grafana-dashboardDefinitions.yaml
添加prometheus访问 etcd /etrics接口证书
prometheus-prometheus.yaml文件添加如下字段,脚本里会通过下面命令先创建secret
kubectl -n monitoring create secret generic etcd-certs --from-file=/etc/kubernetes/pki/etcd/server.crt --from-file=/etc/kubernetes/pki/etcd/server.key --from-file=/etc/kubernetes/pki/etcd/ca.crt
(8)将准备好的镜像包上传到集群节点,并导入镜像
Docker load -i XXXXXX
(9)查看集群状态
(10)验证webUI
注意:以下cluster级别资源无需修改,使用了系统级别资源
prometheus-adapter-clusterRoleBindingDelegator.yaml
prometheus-adapter-roleBindingAuthReader.yaml
Prometheus平台:
Grafana平台:
账号密码: admin 1234@Abcd
Alertmanager平台:
三、部署架构
(1)组件清单
operator
blackbox-exporter
prometheus server
alertmanager
node-exporter
Prometheus Adapter for Kubernetes Metrics APIs (k8s-prometheus-adapter)
kube-state-metrics
Grafana
组件说明:
operator: 根据自定义资源(Custom Resource Definition / CRDs)来部署和管理 Prometheus Server,同时监控这些自定义资源事件的变化来做相应的处理,是整个系统的控制中心。其职责是部署和管理 Prometheus Server,根据 ServiceMonitor 动态更新 Prometheus Server 的监控对象。
blackbox-exporter: 监控业务容器存活性。
prometheus server: Operator 根据自定义资源 Prometheus 类型中定义的内容而部署的 Prometheus Server 集群,这些自定义资源可以看作是用来管理 Prometheus Server 集群的 StatefulSets 资源。
alertmanager: 实现监控报警
node-exporter:用来监控运算节点上的宿主机的资源信息,需要部署到所有运算节点。
prometheus-adapter: 由于本身prometheus属于第三方的 解决方案,原生的k8s系统并不能对Prometheus的自定义指标进行解析,就需要借助于k8s-prometheus-adapter将这些指标数据查询接口转换为标准的Kubernetes自定义指标。
kube-state-metrics: 当部署了metrics-server、cadvisor(集成在kubelet内)监控指标基本都已经能拿到,但是这些都是在应用内部,需要在应用提供or开启/metrics接口,或者部署exports来暴漏对应的指标,但是对于deployment,Pod、daemonset、cronjob等k8s资源对象并没有监控,比如:当前replace是多少?Pod当前状态(pending or running?)cadvisor并没有对具体的资源对象就行监控,因此就需引用新的exports来暴漏监控指标,kube-state-metrics。
基于 client-go 开发,轮询 Kubernetes API, 监听 add delete update等事件
grafana:数据可视化, 进行图像展示。
部署架构
整体架构:
部署架构:
四、监控完善
(1)添加etcd监控
确认etcd内置metrics是否已正常提供数据
curl --cacert /etc/kubernetes/pki/etcd/ca.crt --cert /etc/kubernetes/pki/etcd/server.crt --key /etc/kubernetes/pki/etcd/server.key https://127.0.0.1:2379/metrics
确认后创建promethues用户访问etcd的secret
kubectl -n monitoring create secret generic etcd-certs --from-file=/etc/kubernetes/pki/etcd/server.crt --from-file=/etc/kubernetes/pki/etcd/server.key --from-file=/etc/kubernetes/pki/etcd/ca.crt
修改manifests目录下的prometheus-prometheus.yaml内容,添加如下:
secrets:
- etcd-certs
执行kubectl apply -f prometheus-prometheus.yaml更新prometheus生效
进入容器查看是否生效
创建etcd对应的service
创建etcd对应service后测试svc对应ClusterIP是否代理成功
curl --cacert /etc/kubernetes/pki/etcd/ca.crt --cert /etc/kubernetes/pki/etcd/server.crt --key /etc/kubernetes/pki/etcd/server.key https://100.22.77.43:2379/metrics -k
创建对应创建ServiceMonitor
kubectl create -f prometheus-serviceMonitorEtcd.yaml
在promethues查看tagets列表是否出现kube-etcd
(2)添加kube-proxy监控
修改kube-proxy对应configmap,修改如下两个值
kubectl edit cm kube-proxy -n kube-system
修改后如下命令重启kube-proxy
kubectl -n kube-system rollout restart daemonset/kube-proxy
创建kube-proxy对应SVC
Kubectl create -f kube-proxy-svc.yaml
创建kube-proxy对应servicemonitor,其中scheme为http
(3)添加kube-controller-manager监控
kube-controller-manager的servicemonitor已经默认存在,只需补充创建svc,同时需要修改绑定的本地IP
将/etc/kubernetes/manifests/kube-controller-manager.yaml文件内” bind-address”的值改为”0.0.0.0”
创建svc
Kubectl create -f kube-controller-manager-svc.yaml
(4)添加scheduler监控
scheduler的servicemonitor已经默认存在,只需补充创建svc,同时需要修改绑定的本地IP
将/etc/kubernetes/manifests/kube-scheduler.yaml文件内” bind-address”的值改为”0.0.0.0”
创建svc
Kubectl create -f prometheus-kubeSchedulerService.yaml
五、监控指标
六、告警规则与通知
七、exporter开发指南