apiVersion: v1 kind: ServiceAccount metadata: name: kube-state-metrics namespace: monitoring labels: app.kubernetes.io/name: kube-state-metrics app.kubernetes.io/version: "2.15.0" --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: kube-state-metrics labels: app.kubernetes.io/name: kube-state-metrics app.kubernetes.io/version: "2.15.0" roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: kube-state-metrics subjects: - kind: ServiceAccount name: kube-state-metrics namespace: monitoring --- apiVersion: apps/v1 kind: Deployment metadata: name: kube-state-metrics namespace: monitoring labels: app.kubernetes.io/name: kube-state-metrics app.kubernetes.io/version: "2.15.0" spec: replicas: 1 selector: matchLabels: app.kubernetes.io/name: kube-state-metrics template: metadata: labels: app.kubernetes.io/name: kube-state-metrics app.kubernetes.io/version: "2.15.0" spec: serviceAccountName: kube-state-metrics securityContext: runAsNonRoot: true runAsUser: 65534 fsGroup: 65534 containers: - name: kube-state-metrics image: registry.k8s.io/kube-state-metrics/kube-state-metrics:v2.15.0 ports: - name: metrics containerPort: 8080 - name: telemetry containerPort: 8081 securityContext: readOnlyRootFilesystem: true allowPrivilegeEscalation: false capabilities: drop: - ALL resources: requests: cpu: 10m memory: 32Mi limits: cpu: 100m memory: 128Mi livenessProbe: httpGet: path: /healthz port: 8080 initialDelaySeconds: 5 timeoutSeconds: 5 readinessProbe: httpGet: path: / port: 8081 initialDelaySeconds: 5 timeoutSeconds: 5 --- apiVersion: v1 kind: Service metadata: name: kube-state-metrics namespace: monitoring labels: app.kubernetes.io/name: kube-state-metrics app.kubernetes.io/version: "2.15.0" spec: selector: app.kubernetes.io/name: kube-state-metrics ports: - name: metrics port: 8080 targetPort: metrics - name: telemetry port: 8081 targetPort: telemetry clusterIP: None