# Другие варианты проверок # # проверить, что PVC использует StorageClass из одобренного списка: # rules: - name: check-storage-class match: resources: kinds: - PersistentVolumeClaim context: - name: storageClassInfo apiCall: urlPath: "/apis/storage.k8s.io/v1/storageclasses/{{ request.object.spec.storageClassName }}" jmesPath: "metadata.labels.\"approved-for-production\"" validate: message: >- StorageClass '{{ request.object.spec.storageClassName }}' не одобрена для production. Используйте StorageClass с лейблом approved-for-production: "true" deny: conditions: - key: "{{ storageClassInfo }}" operator: NotEquals value: "true" # проверить, что количество реплик не превышает кворум с учётом текущей нагрузки: # context: - name: existingDeployments apiCall: urlPath: >- /apis/apps/v1/namespaces/{{ request.object.metadata.namespace }}/deployments jmesPath: "items[?metadata.name != '{{ request.object.metadata.name }}'] | length(@)" validate: message: >- В namespace уже {{ existingDeployments }} деплойментов. Максимум разрешено 20. deny: conditions: - key: "{{ existingDeployments }}" operator: GreaterThanOrEquals value: "20" # принимать решения на основе состояния нод # context: - name: nodesInfo apiCall: urlPath: "/api/v1/nodes" jmesPath: "items[?metadata.labels.\"node-type\" == 'gpu'].metadata.name" validate: message: "GPU workloads требуют минимум 2 GPU-ноды в кластере" deny: conditions: - key: "{{ length(nodesInfo) }}" operator: LessThan value: "2"