微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

绕过 pod 变异钩子提供的资源

如何解决绕过 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 举报,一经查实,本站将立刻删除。