Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Argo Workflow 検証 #34

Closed
suzuki-shunsuke opened this issue Jan 27, 2020 · 3 comments
Closed

Argo Workflow 検証 #34

suzuki-shunsuke opened this issue Jan 27, 2020 · 3 comments

Comments

@suzuki-shunsuke
Copy link
Owner

suzuki-shunsuke commented Jan 27, 2020

Getting Started

https://argoproj.github.io/docs/argo/demo.html

ローカルでサンプルを動かす。

kind だと動かない

k8s クラスタが必要だが、 kind だと動かないので minikube を使う。

kubernetes-sigs/kind#1002 (comment)

kind だと dockerd を起動していないので、 docker socket をマウントできない。

Argo 自体は起動するのだが、 workflow を submit したところ、起動に失敗していた。
workflow の起動に失敗した場合、 $ kubectl describe pod で原因が分かったりする。

  Warning  FailedMount  17s (x8 over 80s)  kubelet, argo-control-plane  MountVolume.SetUp failed for volume "docker-lib" : hostPath type check failed: /var/lib/docker is not a directory
  Warning  FailedMount  17s (x8 over 80s)  kubelet, argo-control-plane  MountVolume.SetUp failed for volume "docker-sock" : hostPath type check failed: /var/run/docker.sock is not a socket file

Minikube のインストール

https://minikube.sigs.k8s.io/docs/start/macos/

$ brew install minikube
$ minikube config set vm-driver hyperkit
$ minikube start

Mac で Docker 使ってたら hyperkit はあるはず。
Hyperkit については https://www.publickey1.jp/blog/16/docker_hyperkit.html

Argo Install

$ brew install argoproj/tap/argo
$ kubectl create ns argo
$ kubectl apply -n argo -f https://raw.githubusercontent.com/argoproj/argo/v2.2.1/manifests/install.yaml

サンプルがそのままだと動かない場合は manifest をダウンロードして修正して apply
自分の場合、 manifest の API バージョンが k8s cluster がサポートしていなかった。
"apps/v1beta2" を apps/v1 に修正した。

kubernetes/kubernetes#55894 (comment)

サービスアカウントに権限を付与する

$ kubectl create rolebinding default-admin --clusterrole=admin --serviceaccount=default:default

Argo UI をブラウザで見れるようにする

$ kubectl -n argo port-forward deployment/argo-ui 8001:8001

サンプルを実行する。 --watch をつけるとターミナルに延々と出力されて鬱陶しいのでつけない。

$ argo submit https://raw.githubusercontent.com/argoproj/argo/master/examples/hello-world.yaml

Argo UI で結果が確認できる。
Argo UI には認証がない。また、UIは read only といった感じで workflow のキャンセルや再実行ということは出来なそう。 Argo CLI を使えばキャンセルはできる。

Install an Artifact Repository

ファイルを共有するには Artifact を外部ストレージに保存する必要がある。
S3 などに対応しているが、サンプルでは MinIO を使っている。
Helm でインストールする

Helm のインストール

$ brew install helm

MinIO のインストール

https://github.com/helm/charts/tree/master/stable/minio

Chart repository の追加

https://helm.sh/docs/intro/quickstart/

$ helm repo add stable https://kubernetes-charts.storage.googleapis.com/

helm install コマンドも修正が必要だった。 --name がなくなり、 name が必須の引数になったらしい。

https://stackoverflow.com/questions/57961162/helm-install-unknown-flag-name

$ helm install argo-artifacts stable/minio \
  --set service.type=LoadBalancer \
  --set defaultBucket.enabled=true \
  --set defaultBucket.name=my-bucket \
  --set persistence.enabled=false

Reconfigure the workflow controller to use the Minio artifact repository

Argo の Workflow Controller が MinIO を使えるように設定を kubectl edit で変更する。
ここも公式ドキュメントの修正が必要だった。

secret 名や service 名が argo-artifacts ではなく argo-artifacts-minio だった。

スクリーンショット

実行履歴

image

image

image

Workflow の manifest も確認できる

image

Workflow のログ

image

@suzuki-shunsuke
Copy link
Owner Author

suzuki-shunsuke commented Jan 27, 2020

検討すべきワークロード

  • CI
  • 手動バッチジョブ(パラメータあり)
  • 定期自動実行ジョブ

CI

  • GitHub -> Argo Events -> Argo Workflow
    • シンプル
    • CIの結果を Argo Workflow の UI で見る
    • GitHub Status API で Status を更新する必要がある
    • Argo Workflow のログってどこに残るのか?
      • Pod 消しても残る?
      • Cluster リプレースみたいなときに過去のもの消えてしまわないか?
      • workflow のログを RDB に残して Pod のログを S3 みたいな object storage に記録できるとかだと安心感ある
  • GitHub -> CI service(CodeBuildやCircleCI) -> Argo Workflow
    • workflow の実行結果を CI service で取得し、ビルドの実行結果に反映させる必要がある
    • ビルドの終了を検知する必要がある
    • ジョブの実行結果は CI service でみたい
      • Argo Workflow のログなどを CI service に残す必要がある
      • CI サービス上で argo logs 実行して残す感じ
      • 見づらい

@suzuki-shunsuke
Copy link
Owner Author

suzuki-shunsuke commented Feb 1, 2020

$ minikube start
$ kubectl create namespace argo
$ kubectl apply -n argo -f https://raw.githubusercontent.com/argoproj/argo/release-2.5/manifests/quick-start-postgres.yaml
$ kubectl port-forward -n argo service/argo-server 2746:2746
$ kubectl port-forward -n argo service/minio 9000:9000
$ kubectl -n argo exec -ti deployment/postgres -- psql -U postgres -d postgres

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant