设置作业准入策略
实施验证准入策略以防止在没有队列名称的情况下创建作业。
此页面展示了如何使用基于 通用表达式语言 (CEL) 的 Kubernetes 验证准入策略 为 Kueue 设置作业准入策略。
开始之前
确保满足以下条件
- Kubernetes 集群正在运行。
- kubectl 命令行工具可以与你的集群通信。
- 已安装 Kueue.
示例
以下示例展示了如何设置作业准入策略,以拒绝发送到标记为 kueue-managed
命名空间的、没有队列名称的早期所有作业或作业集。
您应该在 Kueue 配置中将 manageJobsWithoutQueueName
设置为 false
,以允许管理员在未标记为 kueue-managed
的任何命名空间中执行作业。发送到未标记命名空间的作业不会被拒绝,也不会被 Kueue 管理。
apiVersion: admissionregistration.k8s.io/v1
kind: ValidatingAdmissionPolicy
metadata:
name: sample-validating-admission-policy
spec:
failurePolicy: Fail
matchConstraints:
resourceRules:
- apiGroups: ["batch"]
apiVersions: ["v1"]
operations: ["CREATE", "UPDATE"]
resources: ["jobs"]
- apiGroups: ["jobset.x-k8s.io"]
apiVersions: ["v1alpha2"]
operations: ["CREATE", "UPDATE"]
resources: ["jobsets"]
validations:
- expression: "has(object.metadata.labels) && 'kueue.x-k8s.io/queue-name' in object.metadata.labels && object.metadata.labels['kueue.x-k8s.io/queue-name'] != ''"
message: "The label 'kueue.x-k8s.io/queue-name' is either missing or does not have a value set."
要创建该策略,请下载上述文件并运行以下命令
kubectl create -f sample-validating-policy.yaml
然后,通过创建 ValidatingAdmissionPolicyBinding
将验证准入策略应用到命名空间。策略绑定将命名空间链接到已定义的准入策略,并指示 Kubernetes 如何响应验证结果。
以下是策略绑定的示例
apiVersion: admissionregistration.k8s.io/v1
kind: ValidatingAdmissionPolicyBinding
metadata:
name: sample-validating-admission-policy-binding
spec:
policyName: sample-validating-admission-policy
validationActions: [Deny]
matchResources:
namespaceSelector:
matchLabels:
kueue-managed: "true"
要创建绑定,请下载上述文件并运行以下命令
kubectl create -f sample-validating-policy-binding.yaml
运行以下命令来标记您希望强制执行此策略的每个命名空间
kubectl label namespace my-user-namespace 'kueue-managed=true'
现在,当您尝试在标记为 kueue-managed
的任何命名空间中创建没有 kueue.x-k8s.io/queue-name
标签或值的 作业
或 作业集
时,错误消息将类似于以下内容
ValidatingAdmissionPolicy 'sample-validating-admission-policy' with binding 'sample-validating-admission-policy-binding' denied request: The label 'kueue.x-k8s.io/queue-name' is either missing or does not have a value set.