HOME

Argo Workflows部署实践

简介

Argo Workflows 是一个开源的工作流管理平台,用于运行复杂的 Kubernetes 作业。它支持多种编排模式,并能够管理和追踪每一个工作流任务的状态变化。本文将介绍如何在生产环境中部署和使用 Argo Workflows。

部署环境准备

环境要求

准备 Helm

Argo Workflows 可以通过 Helm 来部署,因此你需要首先安装并配置 Helm。确保你的环境中已正确设置 Helm:

# 安装 Helm
curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3
chmod 700 get_helm.sh
./get_helm.sh

# 添加 Argo Workflows 的仓库
helm repo add argo https://argoproj.github.io/argo-helm/

# 更新 Helm 仓库
helm repo update

部署 Argo Workflows

创建命名空间

为了隔离工作流相关的资源,建议为 Argo Workflows 创建一个独立的命名空间:

kubectl create namespace argo

配置默认存储

如果你使用 Minio 作为状态存储服务,需要配置相应的 Secret 和 StorageClass。

创建 Minio Secret

apiVersion: v1
data:
  accessKey: <minio_access_key>
  secretKey: <minio_secret_key>
kind: Secret
metadata:
  name: argo-minio-secret
type: Opaque

将上述 YAML 文件保存为 argo-minio-secret.yaml,并执行:

kubectl apply -f argo-minio-secret.yaml

创建 Minio StorageClass

创建一个名为 argocd-storage-class 的 StorageClass 以支持 Minio 存储。

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: argocd-storage-class
provisioner: kubernetes.io/minio-object-storage
parameters:
  bucketName: <minio_bucket_name>
  accessKeySecretRef:
    name: argo-minio-secret
    key: accessKey
  secretKeySecretRef:
    name: argo-minio-secret
    key: secretKey
  endpoint: https://<minio_endpoint>

将上述 YAML 文件保存为 argocd-storage-class.yaml,并执行:

kubectl apply -f argocd-storage-class.yaml

部署 Argo Workflows

使用 Helm 安装 Argo Workflows。

helm install argo-workflow argo/argo-workflow \
    --namespace argo \
    --set global.storageClass=argocd-storage-class \
    --set workflow.storage.bucket=<minio_bucket_name> \
    --set artifactStorage.class=argocd-storage-class \
    --set argoproj.argo-server.artifactLocation=s3://<bucket-name> \

上述命令中的参数可以调整以适应你的具体需求。

验证安装

部署完成后,可以通过访问 Argo Workflows 的 UI 来检查状态:

kubectl port-forward svc/argo-workflow-ui -n argo 2746:8080 &

然后在浏览器中打开 http://localhost:2746

使用 Argo Workflows

编写工作流模板

Argo Workflows 支持使用 YAML 文件定义工作流。以下是一个简单的示例:

apiVersion: argoproj.io/v1alpha1
kind: Workflow
metadata:
  generateName: hello-world-
spec:
  templates:
    - name: say-hello-to
      inputs:
        parameters:
          - name: who
            default: World
      container:
        image: alpine:3.6
        command: ["/bin/sh", "-c"]
        args: ["echo Hello, $(arg @inputs.parameters.who)"]
    - name: say-goodbye-to
      inputs:
        parameters:
          - name: who
            default: World
      container:
        image: alpine:3.6
        command: ["/bin/sh", "-c"]
        args: ["echo Goodbye, $(arg @inputs.parameters.who)"]
  entrypoint: say-hello-to

保存上述内容为 hello-world.yaml,并执行:

argo submit hello-world.yaml --watch

监控工作流

你可以通过 Argo Workflows 的 UI 或者使用命令行工具来监控和管理你的工作流任务。

总结

本文介绍了如何在 Kubernetes 集群中部署和使用 Argo Workflows。从环境准备到实际操作,我们详细描述了每一步的操作步骤,并提供了一些示例帮助你快速上手。希望这些内容能为你在生产环境中成功部署 Argo Workflows 提供参考与指导。