[Argo] 00 - Introduction to Argo
Ref: Argo Workflows 101 Workshop 22 Sep 2020
- 06:50 fundamentals
- 23:30 Anatomy of a Workflow
- 40:00 Artifacts
- 1:00:00 Exit Handlers
- 1:05:00 Workflow Templates
- 1:19:00 Cluster Workflow Template
- 1:20:30 Cron Workflows
资源不多,这个有必要过一遍。
课程表
- 基于k8s的orign solution: k8s教学视频
- 基于s3d的solution: ArgoCon '21 - Deployments on the Edge using Argo CD & Workflows and K3s (Sergio Mendez)
- Kubernetes详解(一)——Kubernetes基本知识【非常好的k8s博客系列】
- Use Cases
Argo 生态
Ref: Argo生态系的介绍
Argo CD
Ref: https://www.bilibili.com/video/BV17F411h7Zh/
貌似是个通常的部署网络服务的东西。
编排资源清单:Helm or Kustomize
Argo Workflows
官网文档:https://argoproj.github.io/argo-workflows/training/
该文档,同时推荐了四个视频。
Argo Events
Argo Events是一个事件驱动的 Kubernetes 工作流自动化框架。它支持20 多种不同的事件(例如 webhook、S3 drop、cronjob、消息队列-例如 Kafka、GCP PubSub、SNS、 SQS等)
特性:
-
- 支持来自20多个事件源和10多个触发器的事件。
- 能够为工作流自动化定制业务级约束逻辑。
- 管理从简单、线性、实时到复杂、多源事件的所有内容。
- 符合CloudEvents。
Argo Rollouts
Argo-Rollout是一个Kubernetes Controller和对应一系列的CRD,提供更强大的Deployment能力。包括灰度发布、蓝绿部署、更新测试(experimentation)、渐进式交付(progressive delivery)等特性。
为什么 Argo
Argo 工作流程的主要组成部分讨论如下:
- 工作流:这是 Argo 中最重要的组件。它有两个主要功能:第一个是定义要执行的工作流,第二个是存储工作流的状态。
- 模板:模板有两大类,即模板定义和模板调用器。模板定义了要完成的工作,通常在一个容器中。此类别下的模板类型包括 Script、Containers、Resource 和 Suspend。资源模板用于在集群上创建、应用、替换、删除或修补资源。暂停模板用于在特定的持续时间内停止执行。模板调用器用于调用或调用其他模板并提供执行控制。此类别下的模板类型包括 Step 模板,它允许您在一系列步骤中定义任务,以及 DAG 模板,它允许您将任务定义为依赖关系图。
- 工作流执行器:这是一种执行容器的方法。它符合特定的接口,使 Argo 能够执行某些操作,例如:收集制品、管理容器生命周期、监控 pod 日志等。
- 制品存储库:这是存储制品的地方。请记住,制品是由容器保存的文件。
Argo 能本地搭建么?
配置与安装
通过 helm 方式进行部署 , 操作简洁 , 易于更新 , 且已有成熟的部署方案。
-
Namespace
kubectl create ns <namespace>
部署 argo workflows 需要 artifact repo 和 database。
-
Artifact repo
我们选择 s3存储, 需要创建一个 secret 存放 s3 的 accessKey 和 secretKey
例如 : s3/argo-s3-secret.yaml
apiVersion: v1 stringData: accessKey: <access-key-value> secretKey: <secret-key-value> kind: Secret metadata: name: argo-s3-secret labels: app: cos type: Opaque
执行:
kubectl create secret -n <namespace> -f s3/argo-s3-secret.yaml
-
Database
我们单独部署一个 postgresql 数据库供 argo-workflows 使用 - 通过 Helm方式 部署,选用 bitnami/postgresql chart - 需要提前创建 secret 存放 postgresql 的 admin password, username, password (for username)
kubectl create secret -n argo-dev generic argo-workflows-postgresql \ --from-literal=username=<username> \ --from-literal=password=<password> \ --from-literal=postgres-password=<postgres-password>
例如 : postgresql/examples.yaml
global: postgresql: auth: username: "<username>" database: "argo_postgres" existingSecret: "argo-workflows-postgresql" secretKeys: adminPasswordKey: "postgres-password" userPasswordKey: "password" primary: persistence: size: 10Gi readReplicas: persistence: size: 10Gi
Helm
helm repo add bitnami https://charts.bitnami.com/bitnami helm repo update
Install (& Upgrade)
helm upgrade --install -n <namespace> -f postgresql/example.yaml argo-workflows-postgresql bitnami/postgresql
Argo Workflows
Config: argo-workflows/exampls.yaml
controller: # -- enable persistence using postgres persistence: connectionPool: maxIdleConns: 100 maxOpenConns: 0 # save the entire workflow into etcd and DB nodeStatusOffLoad: false # enable archiving of old workflows archive: false postgresql: host: argo-workflows-postgresql port: 5432 database: argo_postgres tableName: argo_workflows # the database secrets must be in the same namespace of the controller userNameSecret: name: argo-workflows-postgresql key: username passwordSecret: name: argo-workflows-postgresql key: password artifactRepository: # -- Archive the main container logs as an artifact archiveLogs: false # -- Store artifact in a S3-compliant object store # @default -- See [values.yaml] s3: # Note the `key` attribute is not the actual secret, it's the PATH to # the contents in the associated secret, as defined by the `name` attribute. accessKeySecret: name: argo-s3-secret key: accessKey secretKeySecret: name: argo-s3-secret key: secretKey insecure: true bucket: <bucket> endpoint: <endpoint> region: <region>
Helm
helm repo add argo https://argoproj.github.io/argo-helm
helm repo update
Install (& Upgrade)
helm upgrade --install -n <namespace> -f argo-helm/example.yaml argo-workflows argo/argo-workflows
Testing
argo submit https://raw.githubusercontent.com/argoproj/argo-workflows/master/examples/hello-world.yaml --watch
End