# Create a namespace for Prometheus components apiVersion: v1 kind: Namespace metadata: name: monitoring labels: name: monitoring --- apiVersion: v1 kind: ServiceAccount metadata: name: prometheus namespace: monitoring --- # This is useful for testing and manual access to the /metrics endpoints apiVersion: v1 kind: Secret metadata: name: prometheus-service-account-token namespace: monitoring annotations: kubernetes.io/service-account.name: prometheus type: kubernetes.io/service-account-token --- # Authorize Prometheus to view Kubernetes cluster components for service discovery purposes # Authorize Prometheus to retrieve metrics apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: prometheus rules: - apiGroups: [""] resources: - nodes - nodes/proxy - services - endpoints - pods verbs: ["get", "list", "watch"] - apiGroups: - networking.k8s.io resources: - ingresses verbs: ["get", "list", "watch"] - nonResourceURLs: ["/metrics"] verbs: ["get"] --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: prometheus roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: prometheus subjects: - kind: ServiceAccount name: prometheus namespace: monitoring --- # Prometheus Server configuration apiVersion: v1 kind: ConfigMap metadata: name: prometheus-server-conf labels: name: prometheus-server-conf namespace: monitoring data: prometheus.yml: |- global: scrape_interval: 5s evaluation_interval: 5s scrape_configs: # Scrape Kubernetes metrics - job_name: 'kubernetes-apiservers' kubernetes_sd_configs: - role: endpoints scheme: https tls_config: ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token relabel_configs: - source_labels: [__meta_kubernetes_namespace, __meta_kubernetes_service_name, __meta_kubernetes_endpoint_port_name] action: keep regex: default;kubernetes;https # Scrape Antrea Controller metrics - job_name: 'antrea-controllers' kubernetes_sd_configs: - role: endpoints scheme: https 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 relabel_configs: - source_labels: [__meta_kubernetes_namespace, __meta_kubernetes_pod_container_name] action: keep regex: kube-system;antrea-controller - source_labels: [__meta_kubernetes_pod_node_name, __meta_kubernetes_pod_name] target_label: instance # Scrape Antrea Agents metrics - job_name: 'antrea-agents' kubernetes_sd_configs: - role: pod scheme: https 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 relabel_configs: - source_labels: [__meta_kubernetes_namespace, __meta_kubernetes_pod_container_name] action: keep regex: kube-system;antrea-agent - source_labels: [__meta_kubernetes_pod_node_name, __meta_kubernetes_pod_name] target_label: instance --- # Prometheus Server deployment apiVersion: apps/v1 kind: Deployment metadata: name: prometheus-deployment namespace: monitoring spec: selector: matchLabels: app: prometheus-server replicas: 1 template: metadata: labels: app: prometheus-server spec: containers: - name: prometheus image: ubuntu/prometheus:2.46.0-22.04_stable command: [ "/bin/prometheus" ] args: - "--config.file=/etc/prometheus/prometheus.yml" - "--storage.tsdb.path=/prometheus/" - "--log.level=debug" ports: - containerPort: 9090 volumeMounts: - name: prometheus-config-volume mountPath: /etc/prometheus/ - name: prometheus-storage-volume mountPath: /prometheus/ serviceAccountName: prometheus volumes: - name: prometheus-config-volume configMap: defaultMode: 420 name: prometheus-server-conf - name: prometheus-storage-volume emptyDir: {} --- apiVersion: v1 kind: Service metadata: name: prometheus-service namespace: monitoring annotations: prometheus.io/scrape: 'true' prometheus.io/port: '9090' spec: selector: app: prometheus-server type: NodePort ports: - port: 8080 targetPort: 9090 nodePort: 30000