使用prometheus实现对k8s的监控
2019-09-27 本文已影响0人
xyz098
监控策略
白盒监控层
- 基础设施层(Node) : 集群和应用提供运行时环境,
node exporter
获取 - 容器基础设施(Container): 应用提供运行时环境,
kubelet cAdvisor
获取 - 用户应用(pod):包含一组容器,对外提供服务,应用内置提供
prometheus
获取 -
kubernetes组件
: 核心组件的运行状态,确保平台自身稳定。apiserver
的并发和吞吐量决定集群性能好坏,pod
的启动时间指标影响使用体验
黑盒监控层
- 内部服务负载均衡(service):提供集群应用与应用的访问,
Blackbox Exporter
探测 - 外部访问入口(ingress):集群外访问入口,
Blackbox Exporter
探测
监控目标
目标 | 服务发现模式 | 监控方法 | 数据源 |
---|---|---|---|
节点kubelet的基本运行状态 | node | 白盒监控 | kubelet(node/metrics)或api-server |
节点容器的状态 | node | 白盒监控 | kubelet(node/cAdvisor)或api-server |
节点node主机资源 | node | 白盒监控 | node exporter |
节点pod状态 | pod | 白盒监控 | node exporter过滤pod |
api-server组件的运行状态 | endpoints | 白盒监控 | api server |
service探测 | service | 黑盒监控 | blackbox exporter |
ingress探测 | ingress | 黑盒监控 | blackbox exporter |
部署实现
新建namespace
kubectl create -f yw-monitor-ns.yml
ConfigMaps管理配置文件
kubectl create -f prometheus-cfg.yml
# 查看cm是否正常
alias kywm='kubectl -n yw-monitor'
kywm get cm
kywm describe cm
Deployment部署Prometheus
# deployment部署prometheus的pod
kubectl create -f prometheus-deployment.yml
# 查看pod运行状态
kywm get pod
NAME READY STATUS RESTARTS AGE
prometheus-8c69488b-khzkk 1/1 Running 0 3m
# 查看服务
kywm get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
prometheus NodePort 172.16.255.30 <none> 9090:31212/TCP 2h
ClusterRole访问授权
基于角色的访问控制模型RBAC
过程:
定义角色——> 角色赋予访问权限 ——> 创建账号 ——> 账号与角色绑定
clusterRole
是全局的,不用指定命名空间。serviceAccount
属于特定的命名空间资源
# 部署
kubectl create -f prometheus-rbac.yml
# 在promthues中增加访问账号
spec:
xxxx
spec:
serviceAccountName: prometheus
serviceAccount: prometheus
# 对depolyment的prometheus的pod变更升级
kubectl apply -f prometheus-deployment.yml
# 验证
# 指定ServiceAccount创建pod后,会自动将k8s的CA证书挂到pod对应的目录
kywm exec -it prometheus-b7b648474-gnpml ls /var/run/secrets/kubernetes.io/servi
ceaccount/
ca.crt namespace token
k8s服务发现实现监控
prometheus
与kubernetes API
集成的5中服务发现模式,分别是Node、Service、Pod、Endpoint、Ingress
Pod
: 跑多个容器进程组合成一个应用;
service
: 给pod
别名已经pod
的访问;
endpoint(IP+PORT)
: 运行的进程
- job_name: 'kubernetes-pods'
tls_config:
ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
insecure_skip_verify: true
bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
# 通过设置kubernetes_sd_configs实现对各类资源的自动发现
kubernetes_sd_configs:
- role: pod
注意:prometheus
能够自动发现所有资源对象,作为target
采集。但不是所有对象都支持prometheus
的采集方式。故对症下药,不通类型的监控目标设置不通的数据采集方式。