llama-server, llama-embed, wiki-embed (gpu.intel.com/i915) and the wiki behind them are bound to the Intel iGPU. On a site without one (Hetzner, restore rehearsal runs 27/28) their pods stayed Pending, and the GPU plugin and exporter DaemonSets sat on every node with nothing to serve. The node patches k8s-1..3 label their machines hardware.renner.uno/intel-gpu=true. The GPU plugin, the exporter, the three llama Deployments and the wiki now select on it. Elsewhere the DaemonSets have no pods and the Deployments stay unscheduled. Production rollout order: the label must be on the nodes (talosctl patch, no reboot) before these manifests reconcile, or the GPU plugin and the llama/wiki pods are removed or left Pending. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
84 lines
2.5 KiB
YAML
84 lines
2.5 KiB
YAML
# Intel iGPU utilisation, frequency and power for every node (#752).
|
|
#
|
|
# Not privileged: /dev/dri comes from the device plugin's monitoring resource
|
|
# (every GPU on the node, no hostPath), and the i915 PMU that intel_gpu_top
|
|
# reads needs CAP_PERFMON — the one capability granted. No hostPID, no
|
|
# hostNetwork.
|
|
apiVersion: apps/v1
|
|
kind: DaemonSet
|
|
metadata:
|
|
name: intel-gpu-exporter
|
|
namespace: monitoring
|
|
labels:
|
|
app.kubernetes.io/name: intel-gpu-exporter
|
|
spec:
|
|
selector:
|
|
matchLabels:
|
|
app.kubernetes.io/name: intel-gpu-exporter
|
|
template:
|
|
metadata:
|
|
labels:
|
|
app.kubernetes.io/name: intel-gpu-exporter
|
|
spec:
|
|
# Every node is a control plane; without this the exporter covers nothing.
|
|
tolerations:
|
|
- key: node-role.kubernetes.io/control-plane
|
|
operator: Exists
|
|
effect: NoSchedule
|
|
nodeSelector:
|
|
hardware.renner.uno/intel-gpu: "true"
|
|
securityContext:
|
|
seccompProfile:
|
|
type: RuntimeDefault
|
|
containers:
|
|
- name: intel-gpu-exporter
|
|
image: ghcr.io/clambin/intel-gpu-exporter:0.7.4@sha256:d78761fef018834c759db154fe9dcf3dd9db5974703fa50ca21f6abc35221be1
|
|
args:
|
|
# No -device: intel_gpu_top picks the only GPU the plugin injects.
|
|
- -interval=5s
|
|
ports:
|
|
- name: http-metrics
|
|
containerPort: 9100
|
|
protocol: TCP
|
|
securityContext:
|
|
# Root so the PERFMON capability is effective without file
|
|
# capabilities on the binary.
|
|
runAsUser: 0
|
|
runAsNonRoot: false
|
|
allowPrivilegeEscalation: false
|
|
readOnlyRootFilesystem: true
|
|
capabilities:
|
|
drop: ["ALL"]
|
|
add: ["PERFMON"]
|
|
resources:
|
|
requests:
|
|
cpu: 10m
|
|
memory: 32Mi
|
|
gpu.intel.com/monitoring: 1
|
|
limits:
|
|
memory: 128Mi
|
|
gpu.intel.com/monitoring: 1
|
|
livenessProbe:
|
|
httpGet:
|
|
path: /metrics
|
|
port: http-metrics
|
|
initialDelaySeconds: 15
|
|
periodSeconds: 30
|
|
---
|
|
apiVersion: v1
|
|
kind: Service
|
|
metadata:
|
|
name: intel-gpu-exporter
|
|
namespace: monitoring
|
|
labels:
|
|
app.kubernetes.io/name: intel-gpu-exporter
|
|
spec:
|
|
clusterIP: None
|
|
selector:
|
|
app.kubernetes.io/name: intel-gpu-exporter
|
|
ports:
|
|
- name: http-metrics
|
|
port: 9100
|
|
targetPort: http-metrics
|
|
protocol: TCP
|