# kube-state-metrics v2.19.1 (Task 6.5): Zustand der Objekte (Pods, Deployments, Knoten, PVCs) für Prometheus auf infra. # NodePort 30808 auf jedem Knoten; Prometheus fragt genau ein Ziel ab (file_sd, monitoring-targets.py). # Nur die Ressourcen, die Dashboard und Alerts brauchen (infra hat 4 GB RAM). apiVersion: v1 kind: ServiceAccount metadata: name: kube-state-metrics namespace: kube-system --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: kube-state-metrics rules: - apiGroups: [""] resources: [nodes, pods, namespaces, persistentvolumeclaims] verbs: [list, watch] - apiGroups: [apps] resources: [deployments, daemonsets, statefulsets, replicasets] verbs: [list, watch] --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: kube-state-metrics roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: kube-state-metrics subjects: - kind: ServiceAccount name: kube-state-metrics namespace: kube-system --- apiVersion: apps/v1 kind: Deployment metadata: name: kube-state-metrics namespace: kube-system labels: {app: kube-state-metrics} spec: replicas: 1 selector: matchLabels: {app: kube-state-metrics} template: metadata: labels: {app: kube-state-metrics} spec: serviceAccountName: kube-state-metrics automountServiceAccountToken: true securityContext: runAsNonRoot: true runAsUser: 65534 seccompProfile: {type: RuntimeDefault} containers: - name: kube-state-metrics image: registry.k8s.io/kube-state-metrics/kube-state-metrics:v2.19.1 args: - --resources=nodes,pods,namespaces,persistentvolumeclaims,deployments,daemonsets,statefulsets,replicasets - --port=8080 - --telemetry-port=8081 ports: - {name: metrics, containerPort: 8080} - {name: telemetry, containerPort: 8081} readinessProbe: httpGet: {path: /readyz, port: 8081} initialDelaySeconds: 5 livenessProbe: httpGet: {path: /livez, port: 8080} initialDelaySeconds: 5 resources: requests: {cpu: 10m, memory: 64Mi} limits: {memory: 192Mi} securityContext: allowPrivilegeEscalation: false readOnlyRootFilesystem: true capabilities: {drop: [ALL]} --- apiVersion: v1 kind: Service metadata: name: kube-state-metrics namespace: kube-system spec: type: NodePort selector: {app: kube-state-metrics} ports: - {name: metrics, port: 8080, targetPort: metrics, nodePort: 30808}