Argo(アルゴ)は、2020年4月にCNCFのインキューベーション・プロジェクトになった。筆者が所属するIBMでも、注目のプロジェクトで適用が始まっているので、その概要について調べてみた。
アルゴとは
アルゴプロジェクトは、ワークフロー、デプロイ、ロールアウト、およびイベントなど、ジョブやアプリケーションをデプロイし、実行するためのKubernetes-ネイティブツールのセットだ。継続的デリバリー、累進的デリバリーなどの GitOps パラダイムによって、KubernetesでMLOps つまり機械学習のDevOps基盤を推進する。
アルゴ プロジェクトは、CNCFが支援するプロジェクトであり。この活動は複数あるが、本記事では、主要な4つのグループを取り上げる。
- アルゴ ワークフロー (Argo Workflow)
- アルゴ CD (Argo CD (Continuous Development))
- アルゴ ロールアウト (Argo Rollouts)
- アルゴ イベント (Argo Events)
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上で実現する。
IBM Cloud で Argo workflow を動かす時の課題とOperatorによる対処法も合わせてご覧ください。
はじめかたのリンク
- チュートリアル https://github.com/argoproj/argo/blob/master/docs/quick-start.md
- ワークフローのサンプル, https://argoproj.github.io/argo/examples/
- インストール, https://argoproj.github.io/argo/installation/
- https://github.com/argoproj/argo
- https://blog.argoproj.io/artifacts-management-in-container-native-workflows-part-1-f6efa838666b
アルゴ 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 マニフェスト
さらに具体的な記事を書きましたので、「Argo CD の GitOpsを確認してみた」ご参照ください。
はじめかたのリンク
- Argo-CD Getting Started, https://github.com/argoproj/argo-cd/blob/master/docs/getting_started.md
- Getting Started, https://argoproj.github.io/argo-cd/getting_started/
- Introduction to Argo CD : Kubernetes DevOps CI/CD, https://github.com/argoproj/argo-cd
- Getting Started with ArgoCD on OpenShift 4, https://www.youtube.com/watch?v=xYCX2EejSMc
アルゴ ロールアウト (Argo Rollouts)
Argoロールアウトは、KubernetesコントローラとCRDのセットであり、ブルー・グリーン・デプロイ、カナリアリリース、カナリア分析、実験的配信など、Kubernetesへの段階的な配信などの高度なデプロイ機能を提供する。
Argoロールアウトは、イングレスコントローラーおよびサービスメッシュと統合し、ロールアウト中にシェーピング機能を利用してトラフィックを新しいバージョンに徐々にシフトする。さらに、ロールアウトは、さまざまなプロバイダーからのメトリックを参照および解釈して、主なKPIを検証し、ロールアウト時に、自動昇格またはロールバックを進める。
はじめたかのリンク
- Getting Started, https://argoproj.github.io/argo-rollouts/getting-started/
- Roleout Demo, https://github.com/argoproj/rollouts-demo
- https://github.com/argoproj/argo-rollouts
- https://www.youtube.com/watch?v=2WSJF7d8dUg
アルゴ イベント (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
具体的な活用例として「Argo Events と Workflow の連携」のリンクもご参照願います。
はじめたかのリンク
- Introduction、https://argoproj.github.io/argo-events/tutorials/01-introduction/
- https://github.com/argoproj/argo-events
- YouTube,TGI Kubernetes 111: CloudEvents and Argo Events, https://youtu.be/LQbBgQnUs_k?t=1151
以上