Slide 1

Slide 1 text

Workflow Oracle Cloud Hangout Café Season6 #3 Yutaka Ichikawa Oracle Corporation Japan Solutions Architect Nov02, 2022

Slide 2

Slide 2 text

Copyright © 2022, Oracle and/or its affiliate 2 Proflie Name • Yutaka Ichikawa/市川 豊 Belong • Solutions Architect Role • Principal Cloud Solution Engineer SNS • Twitter/GitHub/Qiita:cyberblack28 Blog • https://cyberblack28.hatenablog.com/ Materials • https://speakerdeck.com/cyberblack28/ Community • Oracle Cloud Hangout Cafe #ochacafe • CloudNative Days Tokyo #cndt #o11y2022 Certified • Certified Kubernetes Administrator • Certified Kubernetes Application Developer • Certified Kubernetes Security Specialist • Kubernetes and Cloud Native Associate Publications New

Slide 3

Slide 3 text

1. ワークフローについて 2. アプリケーション開発におけるワークフロー 3. Argo Workflows Demo 4. 汎用的なワークフロー 5. Airflow Demo 6. 参考資料 7. Commercial Agenda

Slide 4

Slide 4 text

ワークフローについて

Slide 5

Slide 5 text

Copyright © 2022, Oracle and/or its affiliate 5 ワークフローについて ワークフローとは? 申請や承認などの仕事やタスクのプロセスをフロー、図式化したもの。 購入申請 直属の上長 承認 経理部長 承認 総務部長 承認 注文 例)会社で何かを購入してもらう場合 この一連の流れが ”ワークフロー” 「誰が」、「いつ」、「どんな目的で」、「誰の責任で」、「何を購入したか」を見える化

Slide 6

Slide 6 text

Copyright © 2022, Oracle and/or its affiliate 6 ワークフローについて ワークフロー導入による改善 • 業務プロセスの効率化による業務オペレーションのスピード向上 • 情報共有がスムーズとなり、不要な確認作業を削減 • 責任所在や全体管理の厳格化により、効率的で公正な業務運用が可能 ある目的において、ワークフローの整備、ルール化することによって、 効率的で公正な運用、目的達成を実現する

Slide 7

Slide 7 text

Copyright © 2022, Oracle and/or its affiliate 7 ワークフローについて ワークフローシステムとは、業務やタスクの流れを自動化するシステム O K O K 紙によるワークフロー O K 電子化によるワークフロー O K • どの申請書を使うべきかわからない • 申請書の作成に時間がかかる • 申請書を誰に回せばよいか分からない • 印刷・保管のコストがかかる • 書類作成・承認作業の負担軽減 • ワークフローの可視化 • ペーパーレスの促進 • 内部統制の強化 など など

Slide 8

Slide 8 text

Copyright © 2022, Oracle and/or its affiliate 8 ある目的において、ワークフローの整備、ルール化することによって、 効率的で公正な運用、目的達成を実現する

Slide 9

Slide 9 text

アプリケーション開発における ワークフロー

Slide 10

Slide 10 text

Copyright © 2022, Oracle and/or its affiliate 10 アプリケーション開発におけるワークフロー アプリケーション開発におけるワークフローを考えてみる ある目的において、ワークフローの整備、ルール化することによって、 効率的で公正な運用、目的達成を実現する この内容をアプリケーション 開発に置き換えてみる • 効率的にテストを実施したい • 早く正確にサービスをリリースしたい • 安全にサービスをリリースしたい • 高い品質でサービスをリリースしたい • 開発体制、チーム、メンバー等が変わっても対応できる流れをつくりたい • 開発に集中したい ある目的 効率的で公正な運用、目的達成を実現 多種多様

Slide 11

Slide 11 text

Copyright © 2022, Oracle and/or its affiliate 11 アプリケーション開発におけるワークフロー アプリケーション開発におけるワークフロー、CI/CD アプリケーション開発に必要となるビルド、テスト、成果物(アーティファクト)の保存までの工程を自動化して、継続的に 行われる状態にすること CI(Continuous Integration/継続的インテグレーション) CI環境を整備することで、早期バグの発見による品質向上、検証時間の短縮によるリリーススピード向上、開発者が開 発に集中できる環境でより良い開発サイクルを実現 ソースコード更新 アプリケーションビルド ユニットテスト コンテナイメージビルド コンテナイメージ 脆弱性スキャン コンテナイメージ レジストリ格納 コンテナアプリケーション開発を仮例とした作業(ジョブorタスク) ワークフロー

Slide 12

Slide 12 text

Copyright © 2022, Oracle and/or its affiliate 12 アプリケーション開発におけるワークフロー アプリケーション開発におけるワークフロー、CI/CD CI(継続的インテグレーション)によって生み出された成果物(アーティファクト)を、実際の環境(ステージングやプロ ダクション)へ自動的に配置すること CD(Continuous Delivery/継続的デリバリー) CD環境を整備することで、エンドユーザに影響を与えることなく、高頻度、安全にアプリケーションのリリースを実現 承認管理 本番環境デプロイ コンテナアプリケーション開発を仮例とした作業(ジョブorタスク) ワークフロー

Slide 13

Slide 13 text

Copyright © 2022, Oracle and/or its affiliate 13 アプリケーション開発におけるワークフロー アプリケーション開発におけるワークフロー、CI/CD CI(継続的インテグレーション)によって生み出された成果物(アーティファクト)を、実際の環境(ステージングやプロ ダクション)へ自動的に配置すること CD(Continuous Delivery/継続的デリバリー) アプリケーション開発に必要となるビルド、テスト、成果物(アーティファクト)の保存までの工程を自動化して、継続的に 行われる状態にすること CI(Continuous Integration/継続的インテグレーション) より良いサービスを速く安全に提供できることにより、 エンドユーザ様の満足度、企業競争力や収益の向上を実現する

Slide 14

Slide 14 text

Copyright © 2022, Oracle and/or its affiliate 14 アプリケーション開発におけるワークフロー 主なツール/サービス Circle CI Travis CI GitHub Actions GitLab Runner TEKTON AWS Code Pipeline Cloud Build Azure DevOps OCI DevOps

Slide 15

Slide 15 text

Copyright © 2022, Oracle and/or its affiliate 15 アプリケーション開発におけるワークフロー 主なツール/サービス Kubernetes-nativeなCIツールTEKTON KubernetesのCustomResourceとしてパイプラインを定義できるため、 マニフェストファイルの作成、適用(kubectl apply)の流れで、CI環境を構築。 2021年6月 #ochacafe 『CI/CD最新事情』 でデモ交えて解説 「git clone」「image build」「image push」 それぞれをタスクとしてTEKTONパイプライン作成して、 ワークフローを実行するデモを実施

Slide 16

Slide 16 text

Copyright © 2022, Oracle and/or its affiliate 16 アプリケーション開発におけるワークフロー 主なツール/サービス GitHub Actions と ArgoCD を利用した GitOps デモ 2021年6月 #ochacafe 『CI/CD最新事情』 でデモ交えて解説

Slide 17

Slide 17 text

Copyright © 2022, Oracle and/or its affiliate 17 アプリケーション開発におけるワークフロー 主なツール/サービス GitHub Actions の CI 構成(ワークフロー) このワークフローを GitHub Actions の main.yml の記述を確認しながら、実際に Kubernetes クラスタにデプロイするまでのデモを実施。 2021年6月 #ochacafe 『CI/CD最新事情』 でデモ交えて解説

Slide 18

Slide 18 text

Copyright © 2022, Oracle and/or its affiliate 18 アプリケーション開発におけるワークフロー Argo Workflows Argo Workflows Argo CD Argo Rollouts Argo Events DAG と Step ベースのワークフ ローをサポートする Kubernetes ネイティブのワークフローエンジン。 フルロードされた UI による宣言 型の継続的デリバリー。 Canary や Blue-Green などの 高度な Kubernetes デプロイ戦 略を容易に実施。 Kubernetes のイベント ベースの 依存関係管理。 https://argoproj.github.io/ Argo Family

Slide 19

Slide 19 text

Copyright © 2022, Oracle and/or its affiliate 19 アプリケーション開発におけるワークフロー Argo Workflows Argo Workflows とは? Argo Workflows is an open source container-native workflow engine for orchestrating parallel jobs on Kubernetes. Argo Workflows is implemented as a Kubernetes CRD (Custom Resource Definition). Argo Workflows は、Kubernetes 上で並列ジョブを構成するオープンソースのコンテナネイティブワークフ ローエンジンです。 Argo Workflows は Kubernetes CRD (カスタム リソース定義) として実装されます。

Slide 20

Slide 20 text

Copyright © 2022, Oracle and/or its affiliate 20 アプリケーション開発におけるワークフロー Argo Workflows ワークフローの定義を Kubernetes の CRD を利用して定義、実行可能 アプリケーションを GitHub からクローン アプリケーションビルド コンテナイメージビルド コンテナイメージ レジストリ格納 apiVersion: argoproj.io/v1alpha1 kind: WorkflowTemplate metadata: name: buildkit spec: arguments: parameters: - name: repo value: https://github.com/argoproj/argo-workflows - name: branch value: master - name: path value: test/e2e/images/argosay/v2 - name: image value: alexcollinsintuit/argosay:v2 entrypoint: main ・ ・ ・ ・ 例

Slide 21

Slide 21 text

Copyright © 2022, Oracle and/or its affiliate 21 アプリケーション開発におけるワークフロー Argo Workflows Install Kubernetes クラスタに Argo Workflows をインストールする方法は、3タイプ 1. kubectl apply $ kubectl create namespace argo $ kubectl apply -n argo -f https://github.com/argoproj/argo-workflows/releases/download/v<>/install.yaml 2. Helm $ helm repo add argo https://argoproj.github.io/argo-helm $ helm install --create-namespace --namespace argo argo-workflows argo/argo-workflows Chart https://github.com/argoproj/argo-helm/tree/main/charts/argo-workflows 3. Kustomize https://github.com/argoproj/argo-workflows/blob/master/manifests/namespace-install/kustomization.yaml $ cat base/kustomization.yaml …

Slide 22

Slide 22 text

Copyright © 2022, Oracle and/or its affiliate 22 アプリケーション開発におけるワークフロー Argo Workflows Install デフォルトでは、Namespace argo に Pod 2個、Service 1個 Namespace: argo Pod Service argo-workflows-server argo-workflows-workflow-controller argo-workflows-service Pod Replicas: 1 Deployment Port: 2746 port-forward/Service(NodePort/LoadBalancer)でアクセス可能 Web Access

Slide 23

Slide 23 text

Copyright © 2022, Oracle and/or its affiliate 23 アプリケーション開発におけるワークフロー Argo Workflows CLI Install ワークフローの操作を argo コマンドで実行可能(Linux/Mac/Windows) Linux # Download the binary curl -sLO https://github.com/argoproj/argo-workflows/releases/download/v3.3.9/argo-linux-amd64.gz # Unzip gunzip argo-linux-amd64.gz # Make binary executable chmod +x argo-linux-amd64 # Move binary to path mv ./argo-linux-amd64 /usr/local/bin/argo # Test installation argo version Mac の場合は、linux の 箇所を darwin に変更 Windows の場合は、 exeファイルをダウン ロード https://github.com/argoproj/argo-workflows/releases/tag/v3.3.9

Slide 24

Slide 24 text

Copyright © 2022, Oracle and/or its affiliate 24 アプリケーション開発におけるワークフロー Argo Workflows CLI Install argo-server の Pod でも argo コマンドは実行可能 $ kubectl exec -it argo-workflows-server-xxxxxxxxx-xxxxx -- argo auth token Bearer xxxxxxxxxxx… ※ベースイメージが scratch のため、argo コマンド以外はほぼ利用できない

Slide 25

Slide 25 text

Copyright © 2022, Oracle and/or its affiliate 25 アプリケーション開発におけるワークフロー Argo Workflows containerRuntimeExecutor Argo Workflows では、Pod などの内部処理を実装された containerRuntimeExecutor で処理する バージョン3.3までは、emissary、docker、kubelet、k8sapi、pns という containerRuntimeExecutor があ り、バージョン3.2までは docker がデフォルト、バージョン3.3以降から emissary がデフォルトとなり、emissary 以外は Deprecated Removed となる バージョン3.4以前では、ワークフローがうまくいかなかったり、Pod が正常に終わらないなどトラブルの際に executor を 変更することで解決することがあった

Slide 26

Slide 26 text

Copyright © 2022, Oracle and/or its affiliate 26 アプリケーション開発におけるワークフロー Argo Workflows UI • v3.0.0 以降から HTTPS で Listen がデフォルト • HTTP で Listen する場合は、argo-workflows-server の Pod の args に 「--secure=false」追加または「ARGO_SECURE=false」の環境変数を 設定、さらに readinessProbe を 「scheme: HTTP」に変更 • Helm の場合は、デフォルトで 「--secure=false」

Slide 27

Slide 27 text

Copyright © 2022, Oracle and/or its affiliate 27 アプリケーション開発におけるワークフロー Argo Workflows UI Login • ログイン方式は、Server, Client, Single Sign-On の3タイプ • Server 認証方式は、UI の操作を argo-workflows-server の権限で実施する方式(v3以前はデフォルトの認証方式) • Client 認証方式は、UI の操作を特定のサービスアカウントで実施する方式(v3以降はこちらがデフォルトの認証方式) • Single Sign-On 認証方式は、外部に認証を任せて実施する方式

Slide 28

Slide 28 text

Copyright © 2022, Oracle and/or its affiliate 28 アプリケーション開発におけるワークフロー Argo Workflows UI Login (Client) $ kubectl exec -it argo-workflows-server-xxxxxxxxx-xxxxx -- argo auth token Bearer eyJhbGciOiJSUzI1N… 「Bearer」+「Token」を 入力してログインボタン

Slide 29

Slide 29 text

Copyright © 2022, Oracle and/or its affiliate 29 アプリケーション開発におけるワークフロー Argo Workflows Workflow 書き方 Argo Workflows では、各処理を template という概 念で管理、 name で指定するのが template 名 spec.entrypoint は必須項目、どの処理(tempate)から開始する かを指定 ワークフローの流れは、 steps として記述(DAG 形式も可) steps の内容は、上から書いた順に実行される 「- 」を2つ記述して、配列をネストさせる必要があり、 これにより、複数処理を並列に実行できる 処理の詳細は、template に記述、左例は steps 内から 「name: whalesay」 を参照 sample-workflows.yaml

Slide 30

Slide 30 text

Copyright © 2022, Oracle and/or its affiliate 30 アプリケーション開発におけるワークフロー Argo Workflows Workflow 書き方 $ kubectl create -f sample-workflows.yaml workflow.argoproj.io/steps-bnnn8 created マニフェストを展開 Podのログ確認

Slide 31

Slide 31 text

Copyright © 2022, Oracle and/or its affiliate 31 アプリケーション開発におけるワークフロー Argo Workflows Workflow 書き方 並列処理 sample-workflows-parallel.yaml 並列実行処理の記述

Slide 32

Slide 32 text

Copyright © 2022, Oracle and/or its affiliate 32 アプリケーション開発におけるワークフロー Argo Workflows ワークフローの書き方 DAGとは? Directed Acyclic Graph = 有向非巡回グラフ(ゆうこうひじゅんかいぐらふ) 有向非巡回グラフ、有向非循環グラフ、有向無閉路グラフ(ゆうこうひじゅんかいグラフ、英: Directed acyclic graph, DAG)とは、グラフ理論における閉 路のない有向グラフのことである。有向グラフは頂点と有向辺(方向を示す矢印付きの辺)からなり、辺は頂点同士をつなぐが、ある頂点vから出発し、 辺をたどり、頂点vに戻ってこないのが有向非巡回グラフである Wikipedia(https://bit.ly/3erf4qg) 順序付けする必要があるタスクの集合図 A B C A B C A 一方向のみ前方向に流れる DAG またAに戻る巡回する実行順序 Not DAG

Slide 33

Slide 33 text

Copyright © 2022, Oracle and/or its affiliate 33 アプリケーション開発におけるワークフロー Argo Workflows Workflow 書き方 DAG sample-workflows-dag.yaml 先行タスクとして、A を指定し ているため、並列実行 DAG形式の記述、dependencies で先行 task を指定可能

Slide 34

Slide 34 text

Copyright © 2022, Oracle and/or its affiliate 34 アプリケーション開発におけるワークフロー Argo Workflows Workflow 書き方 パラメータ Parameters 定義は、 steps 内で template を呼び出す時と呼び出される template 側の両方で定義する必要がある sample-workflows.yaml 呼び出す側 arguments として定義 呼び出される側 inputs として定義

Slide 35

Slide 35 text

Copyright © 2022, Oracle and/or its affiliate 35 アプリケーション開発におけるワークフロー Argo Workflows Workflow 書き方 パラメータ inputs.parameters の定義にデフォルト値の設定が可能 この場合、 steps の arguments が省略可能となり、hello1 が args となる sample-workflows.yaml 呼び出す、 arguments で違う値を定義した場合は、呼び出される inputs で定義したデフォルト値は、上書きされる

Slide 36

Slide 36 text

Copyright © 2022, Oracle and/or its affiliate 36 アプリケーション開発におけるワークフロー Argo Workflows Workflow 書き方 処理済みのワークフロー削除 sample-workflows.yaml 処理が完了(成功/失敗)したワークフロー (Completed Pod)を自動で削除する定義 パラメータ 内容 secondsAfterCompletion 完了後に存続する秒数 secondsAfterSuccess 成功後に存続する秒数 secondsAfterFailure 失敗後に存続する秒数 ※ secondsAfterCompletion は、Succeess/Failure 以外の場合 ttlStrategy この設定をすることで、完了したPodで溢れることを回避

Slide 37

Slide 37 text

Copyright © 2022, Oracle and/or its affiliate 37 アプリケーション開発におけるワークフロー Argo Workflows Workflow 書き方 スクリプト Script Templatesと各言語の実行環境となるコンテナイメージ を指定することによってスクリプトも実行可能 script-workflows.yaml

Slide 38

Slide 38 text

Copyright © 2022, Oracle and/or its affiliate 38 アプリケーション開発におけるワークフロー Argo Workflows Workflow 書き方 Kubernetes リソース resource-workflows.yaml ワークフローを処理において、 Kubernetes のリソース作成も可能 • serviceAccountName が無い場合は、 namespace 内の default の権 限で実行 • serviceAccountName を設定することを推奨 Log

Slide 39

Slide 39 text

Copyright © 2022, Oracle and/or its affiliate 39 アプリケーション開発におけるワークフロー Argo Workflows Workflow 書き方 リトライ1 retry-workflows.yaml retryStrategy • 処理失敗時の自動リトライ定義 • リトライ回数を limit で指定 • 上記例では、本実行と5回のリトライ、合わせて6回 • 最初の実行は、0番目

Slide 40

Slide 40 text

Copyright © 2022, Oracle and/or its affiliate 40 アプリケーション開発におけるワークフロー Argo Workflows Workflow 書き方 リトライ2 retry-advance-workflows.yaml retryStrategy • backoff を利用して、リトライ間隔、リトライ時間を指定可能 • 上記の例では、duration 10秒待つ,20秒待つ,40秒待つ...(factor で何倍するのかを指定) • maxDuration が “1m” 1分(60秒)なので、limitで5回でも2回のリトライで終了

Slide 41

Slide 41 text

Copyright © 2022, Oracle and/or its affiliate 41 アプリケーション開発におけるワークフロー Argo Workflows Workflow 書き方 処理の継続 continue-workflows.yaml • step に continueOn を設定することで、処理に失敗しても リトライせずフローを進める • 失敗したフローがあっても、ワークフロー全体としては成功となる C の処理が失敗しても D の処理が実行される

Slide 42

Slide 42 text

Copyright © 2022, Oracle and/or its affiliate 42 アプリケーション開発におけるワークフロー Argo Workflows Workflow 書き方 サスペンド処理/ディレイ処理 suspend-workflows.yaml • suspend は、処理の途中で止めて、 確認後、処理を継続する場合に使用 • 処理を継続する場合 UI では RESUME ボタン CLIの場合、$ argo resume <ワークフロー名> suspend delay UI CLI “$ argo resume” • 処理の途中で止めて、一定時間過ぎ たら処理の継続を指定可能 UI CLI “$ argo resume” 20秒後処理が継続される 指定時間内であれば、RESUMEで処理も可能

Slide 43

Slide 43 text

Copyright © 2022, Oracle and/or its affiliate 43 アプリケーション開発におけるワークフロー Argo Workflows Workflow 書き方 外部リソースの取得 artifact-workflows.yaml • GitHub や S3 からアプリケーション ソースをコンテナ内部に取得可能 • http も可能で、 GitHub からバイナリ をダウンロードして配置も可能 inputs.artifacts

Slide 44

Slide 44 text

Copyright © 2022, Oracle and/or its affiliate 44 アプリケーション開発におけるワークフロー Argo Workflows Workflow 書き方 ファイルの受け渡し ワークフローの処理間でファイルの共有をボリュームを mount して行う volumeClaimTemplates volume を定義、 クラスタ上に PVC と PV が作 成される 各処理で mount 可能、ワークフローを消すと volume も消える

Slide 45

Slide 45 text

Copyright © 2022, Oracle and/or its affiliate 45 アプリケーション開発におけるワークフロー Argo Workflows Workflow 書き方 ファイルの受け渡し S3 互換のオブジェクトストレージを利用することも可能 artifact artifact を ConfigMap で定義 artifact-repo-cm.yaml minio-workflows.yaml Workflow から ConfigMap を参照

Slide 46

Slide 46 text

Copyright © 2022, Oracle and/or its affiliate 46 アプリケーション開発におけるワークフロー Argo Workflows Workflow 書き方 ファイルの受け渡し steps に artifacts を設定する クラスタ内の MinIO に格納される MinIO は s3 互換のオブジェクトストレージサーバ (OSS) https://github.com/minio/minio minio-workflows.yaml

Slide 47

Slide 47 text

Copyright © 2022, Oracle and/or its affiliate 47 アプリケーション開発におけるワークフロー Argo Workflows Workflow 書き方 テンプレート • ワークフローテンプレートを利用することで、ワークフロー自体をテンプレート化して、効率的に管理 • YAML ファイルとしては、spec の内容が 「kind: Workflow」 と同じであるため、「kind: WorkflowTemplate」 にリネームして利用可能 • templateRef として、ワークフロー側から呼び出すことが可能 Workflow Workflow Template テンプレート呼び出し

Slide 48

Slide 48 text

Copyright © 2022, Oracle and/or its affiliate 48 アプリケーション開発におけるワークフロー Argo Workflows Workflow 書き方 テンプレート $ kubectl create -f workflow-template.yaml $ kubectl create -f workflow-template-o.yaml WorkflowTemplate として登録 テンプレートを呼び出して、ワークフローを実行

Slide 49

Slide 49 text

Argo Workflows Demo

Slide 50

Slide 50 text

Copyright © 2022, Oracle and/or its affiliate 50 Argo Workflows Demo GitHub + OKE + DockerHub Namespace: argo Namespace: default PVC PV argo-workflows-server argo-workflows-workflow-controller buildkit-workflows-xxxxx-clone buildkit-workflows-xxxxx-build buildkit-workflows-xxxxx-image OKE git clone docker image build docker image push ① ② ③ go build Secret docker-config /work buildkit-workflows-work-xxxxx UI $ kubectl create -f dev-workflows.yaml CLI GitHub DockerHub $ kubectl create secret generic docker-config --from- literal="config.json={¥"auths¥": {¥"https://index.docker.io/v1/¥": {¥"auth¥": ¥"$(echo -n :|base64)¥"}}}" 1 2 volumeClaimTemplates を利用して、git clone した ソースを /work で共有 DockerHub の認証情報を Secret にする

Slide 51

Slide 51 text

Copyright © 2022, Oracle and/or its affiliate 51 Argo Workflows Demo ワークフロー解説 buildkit-workflows.yaml パラメータ設定 リポジトリ URL ブランチ ビルドする go ファイルのパス DockerHub のリポジトリ名とタグ

Slide 52

Slide 52 text

Copyright © 2022, Oracle and/or its affiliate 52 Argo Workflows Demo ワークフロー解説 buildkit-workflows.yaml ボリューム設定 タスク設定 パラメータで指定した GitHub のリポジトリ /ブランチからソースコードをクローン処理 サンプルアプリケーションの go ファイルのビ ルド処理 Dockerfile からコンテナイメージビルド処 理と DockerHub へのプッシュ処理 Clone Build Image 各処理で受け渡すソース コードを共有する work ディレクトリ

Slide 53

Slide 53 text

Copyright © 2022, Oracle and/or its affiliate 53 Argo Workflows Demo ワークフロー解説 buildkit-workflows.yaml クローン処理 Alpine の git コマンドを利用できるイメージから work ディレクトリをマウント、 そこにソースコードをクローン パラメータで指定したリポジトリとブランチに対して git clone コマンドを実行

Slide 54

Slide 54 text

Copyright © 2022, Oracle and/or its affiliate 54 Argo Workflows Demo ワークフロー解説 buildkit-workflows.yaml アプリケーションビルド処理 go のビルドイメージから work ディレクトリをマウント、作業ディレクトリをパラメータで指定した パスで go のビルドを実行 go のビルド実行

Slide 55

Slide 55 text

Copyright © 2022, Oracle and/or its affiliate 55 Argo Workflows Demo ワークフロー解説 buildkit-workflows.yaml イメージビルドとイメージプッシュ処理 DockerHub の認証情報がある Secret を参照 buildctl-daemonless.sh のスクリプトを実行して、Dockerfile からイメージビルド処理とイメージ プッシュ処理を実行 Buildkit イメージから work ディレクトリをマウント、作業ディレクトリをパラメータで指定したパスにす る、 .docker としてマウントする

Slide 56

Slide 56 text

汎用的なワークフロー

Slide 57

Slide 57 text

Copyright © 2022, Oracle and/or its affiliate 57 汎用的なワークフロー Apache Airflow https://airflow.apache.org/ • オープンソースのワークフロー管理プラットフォーム • 2014年に Airbnb 社が開発した OSS であり、2016年から Apache Software Foundation のプロジェクト • Python と DAG ベースにワークフローを表現

Slide 58

Slide 58 text

Copyright © 2022, Oracle and/or its affiliate 58 汎用的なワークフロー Apache Airflow Principles • Airflow パイプラインは Python で 定義され、動的なパイプライン生成 が可能 • パイプラインを動的にインスタンス化 するコードを記述できる • Airflow にはモジュラー アーキテクチャ があり、メッセージキューを使用して任意 数のワーカーを調整 • Airflow は無限にスケーリングを準備 • 独自の演算子を簡単に定義し、ライブ ラリを拡張して、環境に適した抽象化の レベルに合わせられる • Airflow パイプラインは無駄がなく明 示的。 • パラメータ化は、強力な Jinja テン プレート エンジンを使用してコアに組 み込まれる

Slide 59

Slide 59 text

Copyright © 2022, Oracle and/or its affiliate 59 汎用的なワークフロー Apache Airflow Features • 堅牢で最新の Web アプリケーション を介して、ワークフローを監視、スケ ジュールおよび管理 • 完了したタスクと進行中のタスクのス テータスとログを常に完全に把握でき る。 • 標準の Python 機能を使用して ワークフローを作成 • ワークフローを構築における柔軟性を 維持 • Airflow は、多くのサードパーティ サービスでタスクを実行可能 • 多くのプラグ アンド プレイ オペレー ターを提供 • Python の知識があれば誰でもワー クフローをデプロイ可能 • Airflow は、パイプラインの範囲を 制限せずに、ML モデルの構築、 データの転送、インフラストラクチャの 管理など可能

Slide 60

Slide 60 text

Copyright © 2022, Oracle and/or its affiliate 60 汎用的なワークフロー Apache Airflow のマネージドサービス https://www.astronomer.io/ https://aws.amazon.com/jp/managed-workflows-for-apache-airflow/ Amazon Managed Workflows for Apache Airflow https://cloud.google.com/composer/docs/concepts/overview?hl=ja Cloud Composer Astronomer 柔軟で容易なリソース管理、耐障害性、クラウドサービスとの連携など、マネージドサービスならではのメリットを生 かして運用を効率化

Slide 61

Slide 61 text

Copyright © 2022, Oracle and/or its affiliate 61 汎用的なワークフロー Apache Airflow Install https://airflow.apache.org/docs/apache-airflow/stable/installation/index.html デモ環境では、Helm を利用して Kubernetes クラスタにインストール

Slide 62

Slide 62 text

Copyright © 2022, Oracle and/or its affiliate 62 汎用的なワークフロー Apache Airflow Install helm repo add apache-airflow https://airflow.apache.org helm repo update helm install airflow apache-airflow/airflow --create-namespace --namespace airflow 公式の Helm リポジトリを追加 リポジトリのアップデート airflow のインストール

Slide 63

Slide 63 text

Copyright © 2022, Oracle and/or its affiliate 63 汎用的なワークフロー Apache Airflow Install kubectl edit service/airflow-webserver -n airflow kubectl get service/aiflow-webserver -n airflow NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE airflow-webserver LoadBalancer 10.96.110.188 144.xxx.xxx.xxx 8080:31703/TCP 12m UI アクセスのために、Service airflow-webserver を type: LoadBalancer に変更 EXTERNAL-IP を確認 http://EXTERNAL-IP:8080 にアクセス

Slide 64

Slide 64 text

Copyright © 2022, Oracle and/or its affiliate 64 汎用的なワークフロー Apache Airflow Install Default Username : admin Default Password : admin

Slide 65

Slide 65 text

Copyright © 2022, Oracle and/or its affiliate 65 汎用的なワークフロー Apache Airflow Install

Slide 66

Slide 66 text

Copyright © 2022, Oracle and/or its affiliate 66 汎用的なワークフロー Apache Airflow Install デフォルトでは、Namespace airflow に Pod 7個、Service 7個 Pod Service Namespace: airflow Service Port: 8080 port-forward/Service(NodePort/LoadBalancer)でアクセス可能 Pod airflow-webserver Web Access Pod Pod Pod Pod Pod Pod Service Service Service Service Service Service

Slide 67

Slide 67 text

Copyright © 2022, Oracle and/or its affiliate 67 汎用的なワークフロー Apache Airflow Install Pod 名 概要 airflow-scheduler DAG 実行と DAG からの個々のタスクのスケジューリングを制御 airflow-worker DAG の個々のタスクを、Redis キューから取得して実行 airflow-postgresql Scheduler、Worker、Webserver の状態を保存 airflow-statsd Airflow のメトリック情報を取得 airflow-triggerer Deferrable Operators という worker を効率的に利用できる Operator を管理 airflow-redis DAG の個々のタスクのキューを保持 airflow-webserver Web UI の提供 コンポーネント概要

Slide 68

Slide 68 text

Copyright © 2022, Oracle and/or its affiliate 68 汎用的なワークフロー Apache Airflow Install コンポーネント概要 Metadata Database Queue Worker Webserver Scheduler Executor DAGs Airflow cfg

Slide 69

Slide 69 text

Copyright © 2022, Oracle and/or its affiliate 69 汎用的なワークフロー Apache Airflow Install サンプルワークフローの有効化 helm show values apache-airflow/airflow > values.yaml vim values.yaml values.yaml ファイルを書き出し values.yaml の編集 values.ymal を変更して upgrade することで有効化可能 ・ ・ <省略> ・ extraEnv: | - name: AIRFLOW__CORE__LOAD_EXAMPLES value: 'True' ・ ・ <省略> ・

Slide 70

Slide 70 text

Copyright © 2022, Oracle and/or its affiliate 70 汎用的なワークフロー Apache Airflow Install サンプルワークフローの有効化 helm upgrade --install airflow apache-airflow/airflow -n airflow -f values.yaml values.yaml を適用 UI の DAGs に表示される

Slide 71

Slide 71 text

Airflow Demo

Slide 72

Slide 72 text

Copyright © 2022, Oracle and/or its affiliate 72 Airflow Demo 公式チュートリアル 公式チュートリアルのコードを見ながら、Airflow を学ぶ ['/bin/bash', '-c', 'date'] ['/bin/bash', '-c', 'sleep 5'] ['/bin/bash', '-c', '¥n¥n echo "2022-10-21"¥n echo "2022-10-28"¥n¥n echo "2022-10-21"¥n echo "2022-10-28"¥n¥n echo "2022-10-21"¥n echo "2022-10-28"¥n¥n echo "2022-10-21"¥n echo "2022-10-28"¥n¥n echo "2022-10-21"¥n echo "2022-10-28"¥n'] ① ② ③

Slide 73

Slide 73 text

Copyright © 2022, Oracle and/or its affiliate 73 Airflow Demo 公式チュートリアル 公式チュートリアルのコードを見ながら、Airflow を学ぶ リストから、 tutorial を選択 上部メニュー Graph を選択 タスクと依存関係が表示

Slide 74

Slide 74 text

Copyright © 2022, Oracle and/or its affiliate 74 Airflow Demo 公式チュートリアル 公式チュートリアルのコードを見ながら、Airflow を学ぶ 上部メニュー Code を選択 Python Code で定義されたワークフローが表示

Slide 75

Slide 75 text

Copyright © 2022, Oracle and/or its affiliate 75 Airflow Demo 公式チュートリアル 公式チュートリアルのコードを見ながら、Airflow を学ぶ 必要なライブラリをインポート ワークフロー全体のオブジェクト パラメータを指定

Slide 76

Slide 76 text

Copyright © 2022, Oracle and/or its affiliate 76 Airflow Demo 公式チュートリアル 公式チュートリアルのコードを見ながら、Airflow を学ぶ BashOperator: Bash シェルコマンドを実行できる Date コマンドを実行して、時刻表示 sleep 5 を実行して 5秒待つ

Slide 77

Slide 77 text

Copyright © 2022, Oracle and/or its affiliate 77 Airflow Demo 公式チュートリアル 公式チュートリアルのコードを見ながら、Airflow を学ぶ Airflow の jinja テンプレート を利用して実装したスクリプトを呼び出す for : 5回 ds : 実行する日付 macros.ds_add (ds, 7) : 実行する日付の7日後 t1 を実行してから t2 t3 を実行

Slide 78

Slide 78 text

Copyright © 2022, Oracle and/or its affiliate 78 Airflow Demo 公式チュートリアル 公式チュートリアルのコードを見ながら、Airflow を学ぶ .doc or Markdown 形式で DAG と タスクにドキュメントを設定できる

Slide 79

Slide 79 text

Copyright © 2022, Oracle and/or its affiliate 79 Airflow Demo 公式チュートリアル ワークフローを手動実行、ログ確認 [2022-10-21, 15:48:14 JST] {subprocess.py:75} INFO - Running command: ['/bin/bash', '-c', 'date'] [2022-10-21, 15:48:14 JST] {subprocess.py:86} INFO - Output: [2022-10-21, 15:48:14 JST] {subprocess.py:93} INFO - Fri Oct 21 06:48:14 UTC 2022 [2022-10-21, 15:48:14 JST] {subprocess.py:97} INFO - Command exited with return code 0 print_date [2022-10-21, 15:48:18 JST] {subprocess.py:75} INFO - Running command: ['/bin/bash', '-c', 'sleep 5'] [2022-10-21, 15:48:18 JST] {subprocess.py:86} INFO - Output: [2022-10-21, 15:48:23 JST] {subprocess.py:97} INFO - Command exited with return code 0 sleep

Slide 80

Slide 80 text

Copyright © 2022, Oracle and/or its affiliate 80 Airflow Demo 公式チュートリアル ワークフローを手動実行、ログ確認 [2022-10-21, 15:48:18 JST] {subprocess.py:75} INFO - Running command: ['/bin/bash', '-c', '¥n¥n echo "2022-10-21"¥n echo "2022-10-28"¥n¥n echo "2022-10-21"¥n echo "2022-10-28"¥n¥n echo "2022-10-21"¥n echo "2022-10-28"¥n¥n echo "2022-10-21"¥n echo "2022-10- 28"¥n¥n echo "2022-10-21"¥n echo "2022-10-28"¥n'] [2022-10-21, 15:48:18 JST] {subprocess.py:86} INFO - Output: [2022-10-21, 15:48:18 JST] {subprocess.py:93} INFO - 2022-10-21 [2022-10-21, 15:48:18 JST] {subprocess.py:93} INFO - 2022-10-28 [2022-10-21, 15:48:18 JST] {subprocess.py:93} INFO - 2022-10-21 [2022-10-21, 15:48:18 JST] {subprocess.py:93} INFO - 2022-10-28 [2022-10-21, 15:48:18 JST] {subprocess.py:93} INFO - 2022-10-21 [2022-10-21, 15:48:18 JST] {subprocess.py:93} INFO - 2022-10-28 [2022-10-21, 15:48:18 JST] {subprocess.py:93} INFO - 2022-10-21 [2022-10-21, 15:48:18 JST] {subprocess.py:93} INFO - 2022-10-28 [2022-10-21, 15:48:18 JST] {subprocess.py:93} INFO - 2022-10-21 [2022-10-21, 15:48:18 JST] {subprocess.py:93} INFO - 2022-10-28 templated 1 2 3 4 5 ds : 実行する日付 macros.ds_add (ds, 7) : 実行する日付の7日後 for: 5回

Slide 81

Slide 81 text

Copyright © 2022, Oracle and/or its affiliate 81 ある目的において、ワークフローの整備、ルール化することによって、 効率的で公正な運用、目的達成を実現する

Slide 82

Slide 82 text

参考資料

Slide 83

Slide 83 text

Copyright © 2022, Oracle and/or its affiliate 83 参考資料 Oracle Cloud Hangout Café Season4 #3 『CI/CD 最新事情』 動画: https://www.youtube.com/watch?v=K62nFSvHo60 資料: https://speakerdeck.com/oracle4engineer/oracle-cloud-hangout-cafe-cicdzui-xin-shi-qing 使いこなせ!Argo Workflows 動画: https://event.cloudnativedays.jp/cndt2021/talks/1272 資料: https://speakerdeck.com/makocchi/how-to-use-argo-workflows Argo Workflows Documentation https://argoproj.github.io/argo-workflows/ Airflow Documentation https://airflow.apache.org/docs/ デモ環境等の資材 https://github.com/oracle-japan/ochacafe-s6-3

Slide 84

Slide 84 text

Copyright © 2022, Oracle and/or its affiliate 84 参考資料 Airflow : Tutorial を使って Python で実装された DAG の基礎を学ぶ https://kakakakakku.hatenablog.com/entry/2022/03/07/075039 Apache Airflow Tutorial https://hackmd.io/@woodythewip/S1isd2QaI Hands-On Guide to Argo Workflows on Kubernetes https://www.udemy.com/course/hands-on-guide-to-argo-workflows-on-kubernetes/ The Complete Hands-On Introduction to Apache Airflow https://www.udemy.com/course/the-complete-hands-on-course-to-master-apache-airflow/

Slide 85

Slide 85 text

Commercial

Slide 86

Slide 86 text

Copyright © 2022, Oracle and/or its affiliate 86 OCI Workflow 開発者およびアーキテクト向けのグラフィカルなフロー・デザイナーを備えたサーバーレス・ワークフローエンジン ■ ユースケース OCIの各サービスとのオーケストレーションとそれに伴うタスク処理の自動化 例:インフラストラクチャのプロビジョニング、移行、およびパッチ適用の自動化、 機械学習モデルのトレーニングタスク処理の自動化など ■ 特徴 • OCI サービスとのオーケストレーション • スケジュールおよびイベントドリブンにワークフローをトリガー • ビジュアルデザインによるワークフローの作成と監視 • 組み込み済みのフロー制御 • 組み込み済みのリトライ・ロジックと拡張可能なエラー処理 • コンテキストとデータの管理 • ワークフローのバージョン管理 ■ 価格 2022年10月時点では、β版のためLimited Availability(制限付き利用) プログラムを通じて利用可能 OCI Workflow OCI Cloud Native Services OCI Database Services OCI Network Services OCI Storage Services OCI AI/ML Services OCI IaaS Services OCI Workflow Visual Example https://www.oracle.com/cloud/cloud-native/workflow/

Slide 87

Slide 87 text

Copyright © 2022, Oracle and/or its affiliate 87 2022/11/21-22 https://event.cloudnativedays.jp/cndt2022 ハイブリッド開催! 有明セントラルタワーホール&カンファレンス +オンライン 参加費無料 #CNDT2022

Slide 88

Slide 88 text

Copyright © 2022, Oracle and/or its affiliate 88 https://go.oracle.com/LP=131162 2022/11/18 (金) 15:30-18:00 オンライン Oracle Cloud Infrastructure (OCI) のサービスである OCI DevOps を利用して、ソースコードの変更をトリガーに、コンテナイメージの ビルドからKubernetes クラスタへアプリケーション(サンプル)をデプロイ する CI/CD パイプライン環境を構築するハンズオンを実施します。コンテ ナアプリケーション開発における CI/CD の一歩を一緒に踏み出しましょう。

Slide 89

Slide 89 text

Copyright © 2022, Oracle and/or its affiliate 89 https://www.jasa.or.jp/expo/ 11.18(金) 12:00-13:30 | アネックスホール F201 TS3-02 『What is Cloud Native ? 2022』 日本オラクル(株) ソリューション・アーキテクト本部 プリンシパル クラウド ソリューション エンジニア 市川 豊

Slide 90

Slide 90 text

Thank you Copyright © 2022, Oracle and/or its affiliate 90