Argo Workflows を Argo CD で管理しよ
はじめに
Argo Workflows ってどうやって導入していますか?
Argo Workflows って導入したあとどうやって管理していますか?
Argo プロジェクトには Argo CD という便利なツールがあるので Argo Workflows と組み合わせて使ってみよう!をやってみた記事となります。
Argo Workflows や Argo CD の詳細については本記事では記載しないのでご了承ください
今回 Argo Workflows を使うにあたって @makocchi さんのスライドを大いに参考しております。
まだまだ Argo Workflows は詳しくないので今後も活用していきます。
準備
どちらも brew にてインストールしています。
# https://formulae.brew.sh/formula/kind
brew install kind
# https://formulae.brew.sh/formula/argo
brew install argo
kind にてローカルマシンに Kubernetes 環境を構築します。
kind create cluster
以下のコマンドにて Argo CD 環境を構築します。
kubectl create namespace argocd
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml
導入
Argo Workflows を導入する方法はいくつかあります。
- kubectl
- helm
- kustomize
今回は helm × Argo CD で導入します。
マニフェストは以下のようになります。
argo-workflows.yaml
---
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: argo-workflows
namespace: argocd
labels:
environment: sample
spec:
project: default
source:
path: charts/argo-workflows
repoURL: https://github.com/argoproj/argo-helm.git
targetRevision: argo-workflows-0.40.4
helm:
valuesObject:
workflow:
serviceAccount:
create: true
name: argo-workflow
rbac:
create: true
controller:
workflowNamespaces:
- default
syncPolicy:
automated: {}
syncOptions:
- CreateNamespace=true
destination:
namespace: argo
server: https://kubernetes.default.svc
kubectl
にて上記マニフェストを apply
すると下記のように argo-workflows
がアプリケーションとして構築されます。
Argo Workflows のために namespace を helm にて同時に作成するように設定します。
syncPolicy:
automated: {}
syncOptions:
- CreateNamespace=true
destination:
namespace: argo
server: https://kubernetes.default.svc
参考:https://argo-cd.readthedocs.io/en/stable/user-guide/sync-options/#create-namespace
また、ワークフローを実行するための ServiceAccount も同時に作成するように設定します。
helm:
valuesObject:
workflow:
serviceAccount:
create: true
name: argo-workflow
rbac:
create: true
controller:
workflowNamespaces:
- default
参考:https://artifacthub.io/packages/helm/argo/argo-workflows#serviceaccount-for-workflow-spec
ワークフロー
examples にサンプルがたくさんあるので参考にします。
その際、以下のようにサービスアカウントを指定する必要があります。
spec:
serviceAccountName: argo-workflow
argo submit コマンドや kubectl create
コマンドにてワークフローを実行します。
下記のスクリプトにて Argo Workflows にログインします。
GUI ログインスクリプト
pod=$(kubectl --context ${CONTEXT} get pod -n argo --output json | jq -c '.items[]' | jq '.metadata.name' | grep 'server' | tr -d '"')
password=$(kubectl --context ${CONTEXT} exec -it -n argo "${pod}" -- argo auth token)
echo "${password}" | pbcopy
open http://localhost:2746
kubectl --context ${CONTEXT} port-forward -n argo service/argo-workflows-server 2746:2746
おわりに
ワークフローも Argo CD で管理しようかなって思いましたが
単発で実行するようなものだと思うので不要ですかね。
CronWorflows
はしてもいいかもしれませんが。
あと、せっかく Argo CD で管理できたのでバージョン管理もよしなにしたいです。
stable
がなさそうなのでどうしたらいいのかといった感じです。
今回実装したコードは以下に置いておきます。
Discussion