نحوه راهاندازی گردشهای کاری Argo در Kubernetes
Argo Workflows یک پروژه منبع باز است که امکان هماهنگی چندین شغل Kubernetes را فراهم می کند. Argo Workflows بهعنوان یک تعریف منبع سفارشی Kubernetes (CRD) پیادهسازی شده است، به این معنی که بومی اکوسیستم Kubernetes است و میتواند روی هر خوشه Kubernetes اجرا شود.
گردش کار مراحلی را تنظیم می کند که توسط آن مشاغل فردی اجرا می شوند. میتوانید از Argo Workflows برای اهداف مختلفی مانند پردازش داده، یادگیری ماشین، CI/CD و اتوماسیون زیرساخت استفاده کنید.
در این مقاله، شما Argo Workflows را بر روی یک خوشه Kubernetes راه اندازی می کنید و از الگوهای موجود برای ایجاد یک گردش کار برای مدیریت در یک خوشه Kubernetes استفاده می کنید.
مفاهیم کلیدی Argo Workflows
همانطور که در بالا ذکر کردم، Argo Workflows به عنوان یک تعریف منبع سفارشی Kubernetes (CRD) توسط کنترل کننده خود پیاده سازی می شود. Argo Workflows از دو مفهوم اصلی تشکیل شده است: workflow
و Template
.
جریان کار
گردش کار یک منبع مرکزی در Argo Workflows است که گردش کاری را که باید اجرا شود تعریف می کند و وضعیت گردش کار را ذخیره می کند.
یک گردش کار شامل مشخصاتی است که شامل یک نقطه ورودی و فهرست ی از الگوها است.
یک گردش کار میتواند منطق پیچیده را با استفاده از نمودارهای غیر چرخهای جهتدار (DAG) یا مراحلی برای ثبت وابستگیها یا توالیهای بین الگوها مدلسازی کند.
قالب
قالب یک مفهوم اصلی در Argo Workflows است که دستورالعمل هایی را برای اجرا در مرحله گردش کار تعریف می کند. یک قالب می تواند یکی از انواع زیر باشد:
Container : به شما امکان می دهد ظرف را تعریف کنید. به عنوان مثال:
- name: hello-world container: image: alpine:latest command: [sh, -c] args: ["echo hello world"]
اسکریپت : الگویی که یک اسکریپت را در یک تصویر ظرف اجرا می کند. این شبیه به نوع کانتینر است، اما به شما امکان می دهد به جای استفاده از یک فایل جداگانه، اسکریپت را درون خطی بنویسید. به عنوان مثال:
- name: factorial inputs: parameters: - name: num script: image: python:alpine 3.6 command: [python] source: | def factorial(n): if n == 0: return 1 else: return n * factorial(n-1) print(factorial(int({{inputs.parameters.num}})))
منبع : این الگو امکان دستکاری مستقیم منابع خوشه را می دهد. می توان از آن برای عملیاتی مانند بازیابی، ایجاد، اصلاح یا حذف، از جمله درخواست های GET، CREATE، APPLY، PATCH، REPLACE یا DELETE استفاده کرد. به عنوان مثال:
- name: create-configmap resource: action: create manifest: | apiVersion: v1 kind: ConfigMap metadata: name: my-config data: foo: bar hello: world
DAG : این الگو یک نمودار غیر چرخه ای جهت دار از سایر الگوها را تعریف می کند. در این مثال، DAG دارای سه وظیفه است: A، B، و C. وظیفه A ابتدا اجرا می شود، سپس وظایف B و C به صورت موازی اجرا می شوند. به عنوان مثال:
- name: my-dag dag: tasks: - name: A template: echo arguments: parameters: [{name: message, value: A}] - name: B dependencies: [A] template: echo arguments: parameters: [{name: message, value: B}] - name: C dependencies: [A] template: echo arguments: parameters: [{name: message, value: C}]
حالا بیایید شروع کنیم.
پیش نیازها
برای پیروی از این راهنما، مطمئن شوید که موارد زیر را دارید:
یک خوشه Kubernetes. برای ایجاد یک خوشه Kubernetes جدید، این را دنبال کنید
راهنما
دانش اولیه درباره چیستی Kubernetes. می توانید از اسناد رسمی Kubernetes اطلاعات بیشتری کسب کنید
مرحله 1 - Argo Workflows را نصب کنید
با استفاده از Kubectl
، یک فضای نام برای Argo Workflows ایجاد کنید تا منابع خوشه kubernetes خود را جدا کنید.
$ kubectl create namespace argo
آخرین فایل انتشار Argo Workflows را از صفحه github Argo Workflows نصب کنید.
$ kubectl apply -n argo -f https://github.com/argoproj/argo-workflows/releases/download/v<VERSION>/install.yaml
نسخه Argo Workflows مورد استفاده در این راهنما v3.5.0 است.
$ kubectl get all -n argo
خروجی:
NAME READY STATUS RESTARTS AGE pod/workflow-controller-7f8c9f8f5-9qj2l 1/1 Running 0 2m pod/argo-server-6f8f9c9f8f-6kx4d 1/1 Running 0 2m NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/argo-server ClusterIP 10.3.240.123 <none> 2746/TCP 2m service/workflow-controller-metrics ClusterIP 10.3.240.124 <none> 9090/TCP 2m NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/workflow-controller 1/1 1 1 3m05s deployment.apps/argo-server 1/1 1 1 3m07s NAME DESIRED CURRENT READY AGE replicaset.apps/workflow-controller-7f8c9f8f5 1 1 1 3m33s replicaset.apps/argo-server-6f8f9c9f8f 1 1 1 2m33s
مرحله 2 - رابط کاربری Argo برای مانیتورینگ را شروع کنید
Argo Server یک رابط کاربری گرافیکی دارد که میتوانید از آن برای مدیریت و نظارت بر گردشهای کاری خوشه Kubernetes خود استفاده کنید.
در این راهنما، فرآیند احراز هویت درخواست توکن برای دسترسی به رابط وب Argo را دور میزنید زیرا به صورت عمومی قابل دسترسی نیست. این حالت احراز هویت سرور نامیده میشود، اگرچه میتوانید از حالت دیگر، تأیید اعتبار مشتری استفاده کنید، که برای دسترسی به رابط وب نیاز به درخواست یک نشانه دارید.
$ kubectl patch deployment \ argo-server \ --namespace argo \ --type='json' \ -p='[{"op": "replace", "path": "/spec/template/spec/containers/0/args", "value": [ "server", "--auth-mode=server" ]}]'
خروجی:
deployment.apps/argo-server patched
توجه داشته باشید که این حالت برای محیط های تولیدی توصیه نمی شود، زیرا خطرات امنیتی قابل توجهی ایجاد می کند. یک گزینه امن تر، استفاده از حالت احراز هویت مشتری است که از مشتریان می خواهد توکن حامل Kubernetes خود را ارائه دهند.
کنترل دسترسی مبتنی بر نقش Kubernetes (RBAC) را برای اعطای مجوزهای سطح مدیریت Argo برای مدیریت منابع در فضای نام argo
پیکربندی کنید.
$ kubectl create rolebinding argo-default-admin --clusterrole=admin --serviceaccount=argo:default -n argo
پورت رابط وب سرور Argo را با kubectl port-forward
فوروارد کنید.
$ kubectl -n argo port-forward deployment/argo-server 2746:2746
با استفاده از مرورگری مانند Chrome، به آدرس IP http://localhost:2746
مراجعه کنید.
یک گردش کار جدید ایجاد کنید
میتوانید از مانیفست YAML برای تعریف گردشهای کاری Agro و اعمال آن در خوشه Kubernetes استفاده کنید.
یک فایل Workflow جدید ایجاد کنید.
Nano argo-workflow.yaml
apiVersion: argoproj.io/v1alpha1 kind: Workflow metadata: name: demo-workflow spec: entrypoint: main templates: - name: main container: image: busybox command: ["/bin/sh"] args: ["-c", "echo 'The first step of the Workflow'"]
در اینجا یک تفکیک سریع از اجزای فایل آورده شده است:
entrypoint
نقطه ورودی برای گردش کار را مشخص می کند که به عنوان main
تعریف می شود.
templates
حاوی فهرست ی از الگوها هستند که مراحل یا وظایف را در گردش کار تعریف می کنند.
name
نام قالب است که به عنوان main
تنظیم شده است.
container
یک مرحله مبتنی بر کانتینر را در گردش کار مشخص می کند.
image
تصویر Docker را برای استفاده برای کانتینر مشخص می کند که در اینجا به عنوان busybox
تنظیم شده است.
command
دستوری را که باید در داخل کانتینر اجرا شود مشخص میکند که به صورت ["/bin/sh"]
تنظیم شده است.
args
آرگومان هایی را مشخص می کند که باید به دستور داخل کانتینر ارسال شوند، به صورت ["-c", "echo 'The first step of the Workflow'"]
تنظیم شده است. این دستور echo
برای چاپ "مرحله اول گردش کار" اجرا می کند.
گردش کار را در خوشه خود اعمال کنید:
$ kubectl -n argo create -f argo-workflow.yaml
این خروجی است:
workflow.argoproj.io/hello-world-nb42c created
نحوه مدیریت گردش کار Argo
برای فهرست کردن تمام گردشهای کاری در فضای نام argo
، موارد زیر را انجام دهید:
$ kubectl -n argo get wf
این خروجی است:
NAME STATUS AGE MESSAGE demo-workflow Succeeded 4m23s
$ kubectl -n argo logs demo-workflow
این خروجی است:
This template is the first step of the Workflow time="2024-02-13T19:56:54.629Z" level=info msg="sub-process exited" argo=true error="<nil>"
$ kubectl -n argo delete wf workflow-name
$ kubectl -n argo suspend wf workflow-name $ kubectl -n argo resume wf workflow-name
$ argo submit -n argo workflow.yaml
در اسناد رسمی Argo Workflows می توانید اطلاعات بیشتری کسب کنید.
نتیجه
شما اکنون Argo Workflows را کاوش کرده و با موفقیت آن را راه اندازی کرده اید. این ابزار قدرتمند شما را قادر میسازد تا با استفاده از DAG یا گامهای جداگانه، منطق ایجاد کنید و به شما در اجرای وظایف مختلف از طریق قالبهای مختلف کمک میکند. همچنین می توانید با استفاده از ابزارهایی مانند Argo CLI، Argo UI و Argo Events با گردش کار خود تعامل داشته باشید و پیشرفت آنها را پیگیری کنید.
با استفاده از Argo Workflows، میتوانید از مقیاسپذیری و انعطافپذیری Kubernetes برای اطمینان از اجرای مطمئن وظایف بهره ببرید.
ارسال نظر