본문 바로가기

개발하자

큐버네티스 포드에 대한 리소스(V1ResourceRequirements) 개체를 기류 내에서 동적으로 구축하는 방법

반응형

큐버네티스 포드에 대한 리소스(V1ResourceRequirements) 개체를 기류 내에서 동적으로 구축하는 방법

현재 DAG를 기류 버전 1.10.10에서 2.0.0으로 마이그레이션하고 있습니다.

이 DAG는 작업의 복잡성에 따라 동적으로 리소스를 할당하는 사용자 지정 파이썬 연산자를 사용합니다. 문제는 v1.10.10()에서 사용된 가져오기가 더 이상 작동하지 않는다는 것입니다. v2.0.0의 경우 사용해야 하지만 이 리소스 개체를 동적으로 빌드해야 합니다. 바보같이 들릴지 모르지만, 나는 이 물체를 만드는 정확한 방법을 찾지 못했다.

예를 들어, 나는 시도했다

            self.resources = k8s.V1ResourceRequirements(
                request_memory=get_k8s_resources_mapping(resource_request)['memory'],
                limit_memory=get_k8s_resources_mapping(resource_request)['memory_l'],
                request_cpu=get_k8s_resources_mapping(resource_request)['cpu'],
                limit_cpu=get_k8s_resources_mapping(resource_request)['cpu_l']
            )

또는

            self.resources = k8s.V1ResourceRequirements(
                requests={'cpu': get_k8s_resources_mapping(resource_request)['cpu'],
                          'memory': get_k8s_resources_mapping(resource_request)['memory']},
                limits={'cpu': get_k8s_resources_mapping(resource_request)['cpu_l'],
                        'memory': get_k8s_resources_mapping(resource_request)['memory_l']}
            )

(get_k8s_resources_mapping(resource_request)['xxx']은(는) resource_request에 따라 메모리의 경우 '2Gi' 또는 CPU의 경우 '2'와 같은 값을 반환합니다.)

하지만 그들은 효과가 없는 것 같다. 작업이 실패합니다.

그렇다면 Python에서 V1ResourceRequirements를 올바르게 구축하려면 어떻게 해야 할까요? 그리고 작업 인스턴스의 executor_config 속성에서 어떻게 보여야 할까요? 이런 거요?

'resources': {'limits': {'cpu': '1', 'memory': '512Mi'}, 'requests': {'cpu': '1', 'memory': '512Mi'}}



올바른 구문은 다음과 같습니다:

대상:

from kubernetes import client
from airflow.providers.cncf.kubernetes.operators.pod import KubernetesPodOperator

KubernetesPodOperator(
    ...,
    container_resources = client.V1ResourceRequirements(
        requests={"cpu": "1000m", "memory": "8G"},
        limits={"cpu": "16000m", "memory": "128G"}
    )
)

동적으로 생성하려면 요청/제한 값을 반환하는 함수로 바꾸기만 하면 됩니다.


다음은 이전 버전에서 코드가 작동하는 데 필요한 변경 사항입니다.

대상:

가져오기 경로를 다음으로 변경:

from airflow.providers.cncf.kubernetes.operators.kubernetes_pod import KubernetesPodOperator

대상:

로 변경


반응형