Argoとは?

Argo(アルゴ)は、2020年4月にCNCFのインキューベーション・プロジェクトになりましたので、概要について調べてみました。

アルゴとは

アルゴプロジェクトは、ワークフロー、デプロイ、ロールアウト、およびイベントなど、ジョブやアプリケーションをデプロイし、実行するためのKubernetes-ネイティブツールのセットだ。継続的デリバリー、累進的デリバリーなどの GitOps パラダイムによって、KubernetesでMLOps つまり機械学習のDevOps基盤を推進する。

アルゴ プロジェクトは、CNCFが支援するプロジェクトであり。この活動は複数あるが、本記事では、主要な4つのグループを取り上げる。

  1. アルゴ ワークフロー (Argo Workflow)
  2. アルゴ CD (Argo CD (Continuous Development))
  3. アルゴ ロールアウト (Argo Rollouts)
  4. アルゴ イベント (Argo Events)
argo-logo.png

Tekton Pipeline や Trigger のタスクの1ステップに、アルゴを組み込むことができるので、Tektonのトリガーで受けた git push の イベントから、Argo CDにつないでアプリケーションの状態管理など、連携運用も可能である。

Argoは、2017年にApplatixで開発された。その後、Applatixは2018年にIntuitによって買収された。2020年4月にCNCFのインキューベーション・プロジェクトになった。

参考資料:
https://argoproj.github.io/
https://github.com/argoproj/
* YouTube Argo Channel, https://www.youtube.com/channel/UCOvYmppcbOPm1viN6ust3lA
* OperatorHub Argo CD, https://operatorhub.io/operator/argocd-operator
* CI/CD With Argo On Kubernetes, https://medium.com/axons/ci-cd-with-argo-on-kubernetes-28c1a99616a9
https://blog.argoproj.io/argo-goes-to-cncf-incubator-f0e9dfb40597
* Google Cloudが機械学習の工程パイプラインを作るツールを提供, https://jp.techcrunch.com/2020/03/12/2020-03-11-google-cloud-launches-new-mlops-tools-for-deploying-ml-pipelines/

アルゴ ワークフロー (Argo Workflow)

アルゴ ワークフローは、機械学習などの複雑なバッチ処理のスケジューラーとして利用されている。学習用データのセットの生成、後続のデープラーニングの処理などで利用されている。これは Kubernetes 上の並列ジョブのためのワークフローエンジンである。 これはカスタムリソース定義(CRD)によって実装され、次の様な特徴がある。

  • ワークフローは、個々のタスクのステップをコンテナで構成するため、開発言語や環境からの制約が少ない画期的な実行基盤である。
  • 複数タスクの連なり、または、有向非巡回グラフ(DAG)によってタスク間の依存関係を導出して、ワークフローの実行モデルを構成する。
  • アルゴ ワークフローは、断片的な時間で、機械学習やデータ処理の計算集中型ジョブを簡単に実行できる。
  • ソフトウェア製品の複雑な構成をおこなうこと無く、CICDパイプラインをKubernetes上で実現する。
スクリーンショット 2020-07-27 15.59.31.png

はじめかたのリンク

アルゴ CD (Argo CD (Continouse Development))

アルゴCDは、目的とする環境で、アプリケーションが目的とする状態となるように、デプロイを自動化する。 デプロイするアプリケーションのブランチによる更新を追跡、タグ、Gitコミット時のマニフェストの特定バージョンへの固定などがある。

アルゴCDは、Kubernetesコントローラとして実装され、アプリケーションの動作を継続的にモニターして、現在状態から目的とする状態へ変えていく。Gitリポジトリを通じて状態を設定する。 デプロイされたアプリケーションの現状が、目的とする状態から外れることを OutOfSync (同期外)とみなす。 アルゴCDは、目的とする状態と現状の差異を視覚化しレポートする。現状を目的の状態にするために、自動的同期または手動同期の手段を提供する。 Gitリポジトリでターゲット状態へ加えられた変更は、自動的に適用され、指定されたターゲット環境へ反映される。
アルゴCDは、アプリケーションの目的状態の定義をGitリポジトリを使うことで、GitOpsパターンに従う。 Kubernetesマニフェストは幾つかの方法で指定できる。

  • kustomize: kustomize は、Kubernetes の YAML をソースにして、目的にカスタマイズした YAML を生成する。
  • helmチャート: helm は Kubernetes のパッケージマネージャーで、YAML形式のマニフェスト一式をパッケージした一塊をチャートと呼ぶ。
  • ksonnet: Kubernetes マニフェストの記述、共有、デプロイのフレームワークで、CLIによってアプリケーションのマニフェストを簡単に生成する。プロジェクトは終了
  • jsonnet: Json のテンプレートエンジン
  • プレーンな YAML/Json マニフェスト
スクリーンショット 2020-07-27 15.49.26.png

はじめたかのリンク

アルゴ ロールアウト (Argo Rollouts)

Argoロールアウトは、KubernetesコントローラとCRDのセットであり、ブルー・グリーン・デプロイ、カナリアリリース、カナリア分析、実験的配信など、Kubernetesへの段階的な配信などの高度なデプロイ機能を提供する。

Argoロールアウトは、イングレスコントローラーおよびサービスメッシュと統合し、ロールアウト中にシェーピング機能を利用してトラフィックを新しいバージョンに徐々にシフトする。さらに、ロールアウトは、さまざまなプロバイダーからのメトリックを参照および解釈して、主なKPIを検証し、ロールアウト時に、自動昇格またはロールバックを進める。

はじめたかのリンク

アルゴ イベント (Argo Events)

Argo イベントは、Kubernetesのイベント駆動型ワークフロー自動化フレームワークで、webhook、s3、スケジュール、メッセージングキュー、gcp pubsub、sns、sqsなどのさまざまなソースからのイベントで、K8sオブジェクト、Argoワークフロー、サーバーレスワークロードなどをトリガーするのに役立ち、以下の特徴がある。

  • 20以上のイベントソースからのイベントをサポート
  • ワークフロー自動化のためにビジネスレベルの制約ロジックをカスタマイズ
  • シンプルな線形のリアルタイムから複雑なマルチソースイベントまで、すべてを管理
  • トリガーとしてKubernetesオブジェクト、Argoワークフロー、AWS Lambda、サーバーレスなどをサポート
  • CloudEventsに準拠

トリガー対象のイベント

  • Argo Workflows
  • Standard K8s Objects
  • HTTP Requests / Serverless Workloads (OpenFaas, Kubeless, KNative etc.)
  • AWS Lambda
  • NATS Messages
  • Kafka Messages
  • Slack Notifications
  • Argo Rollouts
  • Custom Trigger / Build Your Own Trigger
  • Apache OpenWhisk