Apache Airflow: запуск Kubernetes Pod Operator через API

Thank you for reading this post, don't forget to subscribe!

Сре­ди мно­же­ства все­воз­мож­ных опе­ра­то­ров в Apache Airflow есть опе­ра­тор под назва­ни­ем KubernetesPodOperator, кото­рый исполь­зу­ет­ся для запус­ка задач в подах кла­сте­ра Kubernetes. Это поз­во­ля­ет нам запус­кать рас­пре­де­лен­ные вычис­ле­ния или дли­тель­ные опе­ра­ции (тер­ми­но­ло­гия Google AIPlong-running operations) в кла­сте­ре и прак­ти­че­ски не забо­тясь о их мас­шта­би­ро­ва­нии и рас­по­ло­же­нии - Kubernetes сде­ла­ет это за нас. Такой под­ход поз­во­ля­ет суще­ствен­но сэко­но­мить сред­ства, ведь после выпол­не­ния зада­чи под может быть уда­лен, а кла­стер, при пра­виль­но настро­ен­ном мас­шта­би­ро­ва­нии, умень­шен в размерах.

Неко­то­рые пара­мет­ры при настрой­ке KubernetesPodOperator могут исполь­зо­вать­ся как шаб­ло­ны (пол­ный спи­сок), дру­гие же могут срав­ни­тель­но лег­ко быть “шаб­ло­ни­зи­ро­ва­ны” (при­мер для пара­мет­ра ‘namespace’ рас­смот­рим ниже) - имен­но эту воз­мож­ность мы будем исполь­зо­вать для демон­стра­ции запус­ка и пере­да­чи пара­мет­ров в DAG с помо­щью HTTP-запро­са.

Про­стей­ший при­мер, в кото­ром будет исполь­зо­вать­ся в каче­стве шаб­ло­на пара­метр ‘image’, выгля­дит сле­ду­ю­щим образом:

Запу­стить DAG через HTTP и пере­дать в каче­стве пара­мет­ра тег обра­за мож­но с помо­щью сле­ду­ю­ще­го запро­са (так­же при­ве­ден ответ от API):

после выпол­не­ния зада­чи в логе мож­но будет увидеть:

openjdk 15.0.2 2021-01-19
OpenJDK Runtime Environment (build 15.0.2+7-27)
OpenJDK 64-Bit Server VM (build 15.0.2+7-27, mixed mode, sharing)

Запу­стим тот же DAG, но с дру­гим зна­че­ни­ем пара­мет­ра (ответ от API о запу­щен­ной зада­че опущен):

 

лог:

Естес­ствен­но, Apache Airflow под­дер­жи­ва­ет несколь­ко вари­ан­тов аутен­ти­фи­ка­ции и даже поз­во­ля­ет внед­рять свои вари­ан­ты. В сле­ду­ю­щем при­ме­ре рас­смот­рим самый про­стой из пред­ло­жен­ных - ‘basic_auth’. Про­ве­рить какой имен­но вари­ант исполь­зу­ет­ся на вашем инстан­се Airflow мож­но с помо­щью команды:

С вклю­чен­ной ‘basic_auth’ запрос дол­жен выгля­деть так:

 

или так:

Более инте­рес­ный при­мер из реаль­ной жиз­ни, в кото­ром пара­мет­ры исполь­зу­ют­ся для пере­да­чи пере­ме­ных окру­же­ния внутрь запус­ка­е­мо­го пода, выгля­дит так:

 

Запус­ка­ем его такой командой:

Обе­щан­ный при­мер с “шаб­ло­ни­за­ци­ей” пара­мет­ра ‘namespace’ может выгля­деть при­мер­но так: