Argo Workflows banyak digunakan untuk tugas terjadwal, machine learning, dan ETL. Namun, definisi YAML dapat sulit dipelajari. Hera Python SDK memungkinkan Anda membangun workflow dalam Python, mendukung tugas yang kompleks, pengujian yang lebih mudah, serta integrasi ekosistem Python yang mulus. Topik ini menjelaskan cara menggunakan Python SDK untuk membangun Argo Workflows berskala besar.
Latar Belakang
Argo Workflows adalah tool open-source native Kubernetes untuk mengorkestrasi workflow yang kompleks dengan dependensi tugas yang fleksibel.
Kasus penggunaannya mencakup tugas terjadwal, machine learning, simulasi, komputasi ilmiah, ETL, pelatihan model, dan CI/CD. Argo Workflows menggunakan YAML untuk mendefinisikan workflow, tetapi indentasi yang ketat dan struktur hierarkis YAML menciptakan kurva belajar yang curam untuk workflow yang kompleks.
Hera adalah Python SDK untuk membangun dan mengirimkan Argo Workflows, yang memungkinkan data scientist bekerja dalam Python, bukan YAML.
Perbandingan metode penulisan
|
|
YAML |
Hera |
|
Kesederhanaan |
Tinggi |
Tinggi, baris kode lebih sedikit |
|
Menulis workflow yang kompleks |
Sulit |
Mudah. Menghindari kesalahan sintaksis YAML. |
|
Integrasi ekosistem Python |
Sulit |
Mudah. Akses ke library Python. |
|
Kemampuan pengujian |
Sulit, rentan terhadap kesalahan sintaksis |
Mudah. Framework pengujian meningkatkan kualitas dan pemeliharaan kode. |
Hera menjembatani ekosistem Python dan Argo Workflows, memungkinkan orkestrasi tugas berskala besar tanpa kerumitan YAML. Contoh berikut menggunakan Hera.
Membuat kluster dan mendapatkan token
-
Buat kluster alur kerja Argo, lalu aktifkan Argo Server dan akses konsol alur kerja.
-
Buat token kluster.
kubectl create token default -n default
Mengirimkan workflow dengan Hera
-
Instal Hera.
pip install hera -
Tulis dan kirimkan workflow.
DAG diamond sederhana
DAG diamond adalah pola umum di mana tugas bercabang dan kemudian konvergen. Dalam contoh ini, Task A berjalan terlebih dahulu, kemudian B dan C berjalan secara paralel, dan Task D berjalan setelah keduanya selesai.
-
Buat file bernama
simpleDAG.pydengan konten berikut.# Impor paket yang diperlukan. from hera.workflows import DAG, Workflow, script from hera.shared import global_config import urllib3 urllib3.disable_warnings() # Konfigurasikan alamat host dan token. global_config.host = "https://{{argo_server_IP}}:2746" global_config.token = "abcdefgxxxxxx" # Ganti dengan token yang Anda peroleh. global_config.verify_ssl = "" # Dekorator @script adalah fitur utama Hera yang memungkinkan Anda mengorkestrasi fungsi Python hampir secara native. # Ini memungkinkan Anda memanggil fungsi yang didekorasi dalam context manager Hera, seperti konteks Workflow atau Steps. # Fungsi ini tetap berjalan normal di luar konteks Hera apa pun, yang berarti Anda dapat menulis unit test untuknya. # Contoh ini mencetak pesan input. @script(image="mirrors-ssl.aliyuncs.com/python:3.10") def echo(message: str): print(message) # Workflow adalah resource utama dalam Argo dan kelas kunci dalam Hera. Ini menyimpan templat, menetapkan entrypoint, dan menjalankannya. with Workflow( generate_name="dag-diamond-", entrypoint="diamond", namespace="default", ) as w: with DAG(name="diamond"): A = echo(name="A", arguments={"message": "A"}) # Bangun templat. B = echo(name="B", arguments={"message": "B"}) C = echo(name="C", arguments={"message": "C"}) D = echo(name="D", arguments={"message": "D"}) A >> [B, C] >> D # Tentukan dependensi: Task B dan C bergantung pada A, dan task D bergantung pada B dan C. # Buat workflow. w.create() -
Kirimkan workflow.
python simpleDAG.py -
Lihat tugas DAG dan hasilnya di workflow console.
Workflow
dag-diamond-g9v45menampilkan DAG diamond: node A selesai, B dan C berjalan secara paralel, lalu konvergen di D. Semua node menunjukkan eksekusi yang berhasil.
Map-reduce
Contoh ini menggunakan templat DAG untuk mengimplementasikan MapReduce: memecah tugas menjadi langkah map paralel, lalu menggabungkan hasilnya dalam langkah reduce. Setiap langkah merupakan fungsi Python.
-
Buat file bernama
map-reduce.pydengan konten berikut. -
Kirimkan workflow.
python map-reduce.py -
Lihat tugas DAG dan hasilnya di workflow console. Pada halaman WORKFLOW DETAILS, DAG menunjukkan node
split, empat nodemapparalel, dan nodereduceyang semuanya berhasil dieksekusi (tanda centang hijau).
-
Referensi
-
Dokumentasi Hera:
-
Contoh deployment YAML:
-
Diamond sederhana (YAML): dag-diamond.yaml
-
MapReduce (YAML): map-reduce.yaml
-