如何解决绕过 pod 变异钩子提供的资源
我们在 kubernetes 上运行了气流。下面是我的airflowlocalsettings
:
airflowLocalSettings: |
from airflow.contrib.kubernetes.pod import Pod,Resources
from airflow.configuration import conf
def pod_mutation_hook(pod: Pod):
pod.labels.update({"app": "airflow-pod"})
pod.annotations.update({"iam.amazonaws.com/role": "role"})
pod.tolerations += [{"key": "spotInstance","operator": "Exists"}]
pod.resources = Resources(limit_memory = "512Mi",limit_cpu = "300m")
pod.affinity.update({
"nodeAffinity": {
"preferredDuringSchedulingIgnoredDuringExecution": [
{"weight": 100,"preference": {
"matchExpressions": [{
"key": "role.node.kubernetes.io/spot-worker","operator": "In","values": ["spot-worker"]
}]
}}
]
}
})
我想启动一些选择性任务 pod,这些 pod 拥有通过 resources
中的 KubernetesPodoperator
参数传递的自己的资源。
现在的问题是资源被覆盖,它从 pod_mutation_hook
获取默认资源。
我们如何绕过 pod_mutation 资源,让这些 pod 可以有自己的资源设置?我无法从 pod_mutation_hook
中删除资源设置,因为其他 Pod 也在使用它。
解决方法
我通过调整 pod_mutaion_hook 代码解决了这个问题,如下所示。
resources = pod.resources
is_class = isinstance(resources,Resources)
if is_class:
resource_flag = resources.is_empty_resource_request()
else:
resource_flag = False
if resource_flag:
pod.resources = Resources(limit_memory="512Mi",limit_cpu="300m")
基本上,我正在检查 pod 中是否已经有可用的资源,然后采取行动。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。