All Policies
Check NVIDIA GPUs
Containers which request use of an NVIDIA GPU often need to be authored to consume them via a CUDA environment variable called NVIDIA_VISIBLE_DEVICES. This policy checks the containers which request a GPU to ensure they have been authored with this environment variable.
Policy Definition
/other/check_nvidia_gpu/check-nvidia-gpu.yaml
1apiVersion: kyverno.io/v1
2kind: ClusterPolicy
3metadata:
4 name: check-nvidia-gpus
5 annotations:
6 policies.kyverno.io/title: Check NVIDIA GPUs
7 policies.kyverno.io/category: Other
8 policies.kyverno.io/severity: medium
9 kyverno.io/kyverno-version: 1.6.0
10 policies.kyverno.io/minversion: 1.6.0
11 kyverno.io/kubernetes-version: "1.23"
12 policies.kyverno.io/subject: Pod
13 policies.kyverno.io/description: >-
14 Containers which request use of an NVIDIA GPU often need to
15 be authored to consume them via a CUDA environment variable called
16 NVIDIA_VISIBLE_DEVICES. This policy checks the containers which
17 request a GPU to ensure they have been authored with this environment
18 variable.
19spec:
20 validationFailureAction: audit
21 rules:
22 - name: check-nvidia-gpus
23 match:
24 any:
25 - resources:
26 kinds:
27 - Pod
28 preconditions:
29 all:
30 - key: "{{request.operation || 'BACKGROUND'}}"
31 operator: NotEquals
32 value: DELETE
33 validate:
34 message: "Images which reserve NVIDIA GPUs must be built to use them."
35 foreach:
36 - list: "request.object.spec.containers"
37 context:
38 - name: imageData
39 imageRegistry:
40 reference: "{{ element.image }}"
41 deny:
42 conditions:
43 all:
44 # If a container image calls for an NVIDIA GPU in its resources.limits, it must also
45 # have been built with the CUDA environment variable `NVIDIA_VISIBLE_DEVICES`.
46 - key: "NVIDIA_VISIBLE_DEVICES=*?"
47 operator: AnyNotIn
48 value: "{{ imageData.configData.config.Env || '' }}"
49 - key: "{{ element.resources.limits.\"nvidia.com/gpu\" || '' }}"
50 operator: GreaterThan
51 value: 0