Hướng dẫn cài đặt Argo Workflows trên Kubernetes
Argo Workflows là một dự án mã nguồn mở cho phép điều phối nhiều job Kubernetes hay K8s. Trong bài viết này, bạn sẽ được hướng dẫn cài đặt Argo Workflows trên một cụm Kubernetes và sử dụng các template có sẵn để tạo Workflow quản lý trong cụm Kubernetes.
Argo Workflows: Các khái niệm chính
Argo Workflows là một dự án mã nguồn mở cho phép điều phối nhiều job Kubernetes. Argo Workflows được triển khai như một định nghĩa tài nguyên tùy chỉnh (CRD) của Kubernetes, có nghĩa là nó là một phần của hệ sinh thái Kubernetes và có thể chạy trên bất kỳ cụm Kubernetes nào. Argo Workflows bao gồm hai khái niệm chính: workflow và Template.
1. Workflow
Workflow là một tài nguyên trung tâm trong Argo Workflows, nó định nghĩa quy trình công việc sẽ được thực hiện và lưu trữ trạng thái của quy trình công việc.
Workflow bao gồm một đặc tả chứa entrypoint và danh sách các template.
Workflow có thể mô hình hóa logic phức tạp bằng cách sử dụng đồ thị theo chu trình có hướng (DAG) hoặc các bước để nắm bắt các dependency hoặc chuỗi giữa các template.
2. Template
Template là một khái niệm cốt lõi trong Argo Workflows, nó định nghĩa các hướng dẫn để thực thi trong một bước workflow. Template có thể là một trong các loại sau:
- Container: Cho phép bạn có thể định nghĩa container. Dưới đây là một ví dụ:
- name: hello-world
container:
image: alpine:latest
command: [sh, -c]
args: ["echo hello world"]
- Script: Template chạy script trong một container image. Loại này tương tự như loại container nhưng cho phép bạn viết script inline thay vì sử dụng một tệp riêng biệt. Dưới đây là một ví dụ:
- 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}})))
- Resource: Template này cho phép thao tác trực tiếp với các tài nguyên của cụm. Nó có thể được sử dụng cho các hoạt động như truy xuất, tạo, sửa đổi hoặc xóa, bao gồm các yêu cầu GET, CREATE, APPLY, PATCH, REPLACE hoặc DELETE. Dưới đây là một ví dụ:
- name: create-configmap
resource:
action: create
manifest: |
apiVersion: v1
kind: ConfigMap
metadata:
name: my-config
data:
foo: bar
hello: world
- DAG: Template này định nghĩa một đồ thị theo chu trình có hướng của các template khác. Trong ví dụ này, DAG có ba task: A, B và C. Task A chạy trước, sau đó các task B và C chạy song song. Dưới đây là một ví dụ:
- 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}]
Hướng dẫn cài đặt Argo Workflows chi tiết
Để làm theo hướng dẫn này, hãy đảm bảo bạn có những điều sau:
- Một cụm Kubernetes. Để tạo cụm Kubernetes mới, hãy làm theo hướng dẫn này.
- Kiến thức cơ bản về Kubernetes là gì. Bạn có thể tìm hiểu thêm về Kubernetes từ tài liệu chính thức của họ.
- Kubectl CLI
Bước 1 - Cài đặt Argo Workflows
- Sử dụng Kubectl, tạo một namespace cho Argo Workflows để phân tách các tài nguyên cụm kubernetes của bạn.
$ kubectl create namespace argo
- Cài đặt tệp phát hành Argo Workflows mới nhất từ trang github Argo Workflows.
$ kubectl apply -n argo -f https://github.com/argoproj/argo-workflows/releases/download/v<VERSION>/install.yaml
Phiên bản Argo Workflows được sử dụng trong hướng dẫn này là v3.5.0.
- Kiểm tra xem tất cả các tài nguyên đã được cài đặt chính xác chưa.
$ kubectl get all -n argo
Output:
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
Bước 2 - Khởi động Argo UI để giám sát
Argo Server có giao diện người dùng đồ họa mà bạn có thể sử dụng để quản lý và giám sát Workflows cụm Kubernetes của mình.
Trong hướng dẫn này, bạn sẽ bỏ qua quy trình xác authentication yêu cầu token để truy cập giao diện web Argo vì nó không thể được truy cập công khai. Điều này được gọi là chế độ Xác thực máy chủ, mặc dù bạn có thể sử dụng chế độ khác, Xác thực máy khách, yêu cầu bạn phải yêu cầu token để có thể truy cập giao diện web.
- Thay đổi chế độ xác thực thành Xác thực máy chủ.
$ kubectl patch deployment \
argo-server \
--namespace argo \
--type='json' \
-p='[{"op": "replace", "path": "/spec/template/spec/containers/0/args", "value": [
"server",
"--auth-mode=server"
]}]'
Output:
deployment.apps/argo-server patched
Lưu ý rằng chế độ này không được khuyến nghị cho môi trường production, vì nó tạo ra rủi ro bảo mật đáng kể. Một tùy chọn an toàn hơn là sử dụng chế độ xác thực máy khách, yêu cầu máy khách cung cấp Kubernetes bearer token của họ.
- Định cấu hình Kubernetes Role-Based Access Control (RBAC) để cấp quyền quản trị viên Argo cho phép quản lý tài nguyên trong namespace argo.
$ kubectl create rolebinding argo-default-admin --clusterrole=admin --serviceaccount=argo:default -n argo
- Chuyển tiếp cổng giao diện web của máy chủ Argo bằng kubectl port-forward.
$ kubectl -n argo port-forward deployment/argo-server 2746:2746
Sử dụng trình duyệt như Chrome, hãy truy cập Địa chỉ IP http://localhost:2746.
Tạo Workflow mới và các thao tác cơ bản
Bạn có thể sử dụng một tệp kê khai YAML để xác định Agro Workflows và áp dụng cho cụm Kubernetes của bạn.
- Tạo một tệp Workflow mới.
Nano argo-workflow.yaml
- Thêm nội dung sau vào tệp
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'"]
Dưới đây là phần phân tích nhanh về các thành phần của tệp:
- entrypoint chỉ định điểm vào cho workflow, được định nghĩa là main.
- templates chứa danh sách các template, xác định các bước hoặc task trong workflow.
- name là tên của template, được đặt là main.
- container chỉ định một bước dựa trên container trong workflow.
- image chỉ định Docker image sẽ sử dụng cho container, được đặt ở đây là busybox.
- command chỉ định command sẽ được thực thi bên trong container, được đặt là ["/bin/sh"].
- args chỉ định các đối số sẽ được chuyển đến command bên trong container, được đặt là ["-c", "echo 'The first step of the Workflow'"]. Command này sẽ chạy echo để in "The first step of the Workflow".
Áp dụng Workflow vào cụm của bạn:
$ kubectl -n argo create -f argo-workflow.yaml
Đây là kết quả đầu ra:
workflow.argoproj.io/hello-world-nb42c created
- Để liệt kê tất cả các workflow trong namespace argo, hãy làm như sau:
$ kubectl -n argo get wf
Đây là kết quả đầu ra:
NAME STATUS AGE MESSAGE
demo-workflow Succeeded 4m23s
- Để xem nhật ký pod cho Workflow của bạn, hãy làm như sau:
$ kubectl -n argo logs demo-workflow
Đây là kết quả đầu ra:
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>"
- Để xóa workflow, hãy làm như sau:
$ kubectl -n argo delete wf workflow-name
- Để tạm dừng hoặc tiếp tục workflow, hãy làm như sau:
$ kubectl -n argo suspend wf workflow-name
$ kubectl -n argo resume wf workflow-name
- Để gửi workflow bằng Argo CLI, hãy làm như sau:
$ argo submit -n argo workflow.yaml
Bạn có thể tìm hiểu thêm về Argo Workflows trên tài liệu chính thức của họ.
Kết luận
Bạn đã tìm hiểu về Argo Workflows và thiết lập thành công. Công cụ mạnh mẽ này cho phép bạn tạo logic bằng cách sử dụng DAG hoặc các bước riêng lẻ, giúp bạn thực hiện các tác vụ khác nhau thông qua các template khác nhau. Bạn cũng có thể tương tác với workflow của mình và theo dõi tiến trình của chúng bằng cách sử dụng các công cụ như Argo CLI, Argo UI và Argo Events.
Bằng cách sử dụng Argo Workflows, bạn có thể tận dụng khả năng mở rộng và tính linh hoạt của Kubernetes để đảm bảo thực thi các tác vụ một cách đáng tin cậy. Cảm ơn các bạn đã theo dõi bài viết vừa rồi.
All rights reserved