Skip to content

There is a prometheus podmonitor to collect the NIC message for a pod which add the collection label.

License

Notifications You must be signed in to change notification settings

77yu77/k8s-pod-NIC-monitor

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

k8s-pod-NIC-monitor

There are a prometheus podmonitor and an exporter to collect the NIC message for pods which add the specific label.

Environment configuration

These components need to be run on a kubernetes cluster with prometheus installed. To install the prometheus in kubernetes cluster, please see https://github.com/prometheus/prometheus.

podmonitor installation

To enable the podmonitor, the first step is to add the podmonitor match label. The config context is in the prometheus-prometheus.yaml, which defines the deployment of the Prometheus server and its configuration.

spec:
  podMonitorSelector:
    matchLabels:
      team: pod-NIC # your match label

And in the podmonitor.yaml, you should add the label for prometheus to match.

apiVersion: monitoring.coreos.com/v1
kind: PodMonitor
metadata:
  name: pod-NIC-exporter # promtheus jobs name
  namespace: monitoring
  labels:
    team: pod-NIC # your match label
spec:
  namespaceSelector:
    any: true    
  podMetricsEndpoints:
  - interval: 5s
    scrapeTimeout: 5s  
    path: /metrics
    targetPort: 2112
    port: prometheus # pod port name
  selector:
    matchLabels:
      k8s-app: pod-NIC # label for the collected pods

After rewriting podmonitor.yaml, you should apply this yaml:

kubectl apply -f podmonitor.yaml

Add exporter to pod

The exporter is inserted into pod by using mount volume. The following context provides one way to mount. First you should create kubernetes pv and pvc for the pod_NIC_exporter file. The cluster should deploy storage plugin such as NFS. If you create pod by yaml file, the following code you can refer:

metadata:
  labels:
    k8s-app: pod-NIC # label for the collected pods
 spec:
    containers:
    - ...
      ports:
        - containerPort: 2112
          name: prometheus # pod port name
      volumeMounts:
      - name: pod_NIC
        mountPath: /usr/share/NIC/pod_NIC_exporter                    
  volumes:
      - name: pod_NIC
        persistentVolumeClaim:
          claimName: pod_NIC_pvc # your pvc name 

If you create pod by using client-go, the following code you can refer:

pod.WithLabels(map[string]string{
			"k8s-app": "pod-NIC",
})
Containers: []v1.ContainerApplyConfiguration{
	{
  ...
		Ports: []v1.ContainerPortApplyConfiguration{
			{
				Name:          "prometheus", // pod port name
				ContainerPort: 2112,
			},
		},
		VolumeMounts: []v1.VolumeMountApplyConfiguration{
			{
				MountPath: "/usr/share/NIC/pod_NIC_exporter",
				Name:      "pod_NIC",
			},
		},
	},
},
Volumes: []v1.VolumeApplyConfiguration{
	{
		Name: "pod_NIC",
		VolumeSourceApplyConfiguration: v1.VolumeSourceApplyConfiguration{
			PersistentVolumeClaim: &v1.PersistentVolumeClaimVolumeSourceApplyConfiguration{
				ClaimName: "pod_NIC_pvc", // your pvc name
			},
		},
	},
}

Both two methods require you to add start cmd in the pod start cmd. A easy start way is to add this following cmd to the container start cmd:

./usr/share/NIC/pod_NIC_exporter &

After that you can watch the data in the prometheus query page.

About

There is a prometheus podmonitor to collect the NIC message for a pod which add the collection label.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages