上文讲到podMonitor是pod监控对象的抽象,本文就以calico为例,分析如何使用podMonitor对象监控calico。
calico中核心的组件是Felix,它负责设置路由表和ACL规则,同时还负责提供网络健康状况的数据;这些数据会被写入etcd。
由此可见,监控calico的核心便是监控felix,felix相当于calico的大脑。
1. calico的部署方式
calico-node在集群中以daemonset部署,部署了3个Pod:
# kubectl get all -A|grep calico-node
kube-system pod/calico-node-j5kw9 1/1 Running 6 195d
kube-system pod/calico-node-njz9m 1/1 Running 4 195d
kube-system pod/calico-node-tmg9v 1/1 Running 4 195d
kube-system daemonset.apps/calico-node 3 3 3 3 3 <none> 217d
2. 打开calico的metrics监听
calico在启动时,默认没有打开Metrics监听:
# kubectl edit ds calico-node -n kube-system
# 修改container name=calico-node的配置;
# 将其env:FELIX_PROMETHEUSMETRICSENABLED修改为“True”
spec:
containers:
- env:
......
- name: FELIX_PROMETHEUSMETRICSENABLED
value: "True"
- name: FELIX_PROMETHEUSMETRICSPORT
value: "9091"
将FELIX_PROMETHEUSMETRICSENABLED=True,其监听端口为9091:
# curl http://localhost:9091/metrics
# HELP felix_active_local_endpoints Number of active endpoints on this host.
# TYPE felix_active_local_endpoints gauge
......
3. 创建podMonitor
首先,修改dameonset,为container定义container port;
containerPort=9091,name=http-metrics:
# kubectl edit ds calico-node -n kube-system
# 修改container name: calico-node的配置
# 增加ports声明
spec:
containers:
......
ports:
- containerPort: 9091
name: http-metrics
protocol: TCP
再创建podMonitor对象:
# cat prometheus-podMonitorCalico.yaml
apiVersion: monitoring.coreos.com/v1
kind: PodMonitor
metadata:
labels:
k8s-app: calico-node
name: calico-node
namespace: monitoring
spec:
podMetricsEndpoints:
- interval: 15s
path: /metrics
port: http-metrics
namespaceSelector:
matchNames:
- kube-system
selector:
matchLabels:
k8s-app: calico-node
其中定义了pod的筛选条件:
- Port名称=http-metrics;
- k8s-app=calico-node;
- namespace=kube-system;
4. prometheus dashboard查看calico监控任务
参考:
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。