обходить ресурсы, предоставляемые обработчиком под мутации
У нас на кубернетах работает воздушный поток. Ниже мой
airflowlocalsettings
. Я хочу запустить несколько селективных модулей задач, через которые проходят собственные ресурсы.
resources
параметр в
KubernetesPodOperator
.Теперь проблема в том, что ресурсы перезаписываются, и он получает ресурсы по умолчанию из
pod_mutation_hook
. Как мы можем обойти ресурсы pod_mutation, чтобы у этих модулей были собственные настройки ресурсов. Я не могу удалить настройки ресурсов из pod_mutation_hook, потому что он также используется другими модулями.
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"]
}]
}}
]
}
})
1 ответ
Я решил эту проблему, настроив код 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")
В основном я проверяю, доступны ли уже ресурсы в модуле, а затем принимаю меры.