반응형
큐버네티스 포드에 대한 리소스(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
대상:
로 변경
반응형
'개발하자' 카테고리의 다른 글
플러터: iOS 빌드 실패 (0) | 2023.08.20 |
---|---|
테라폼 - 쿠버네티스 - if 변수가 존재하는 경우 사양 환경 생성 (0) | 2023.08.19 |
인증 시 FastApi 422 처리할 수 없는 엔티티, 수정하는 방법? (0) | 2023.08.18 |
python-rq에 유사한 예약된 작업이 있는지 확인하는 방법은 무엇입니까? (0) | 2023.08.17 |
TypeError: _evaluate()는 3개의 위치 인수를 사용하지만 4개는 fastapi에서 제공되었습니다 (0) | 2023.08.17 |