1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Argo Workflows の artifacts に Oracle Cloud Infrastructure (OCI) Object Storage を使う

Last updated at Posted at 2022-11-22

はじめに

先日開催した Oracle Cloud Hangout Cafe 「ワークフローツールで楽々Job管理」 の Q&A コーナーで 「Argo Workflows の artifacts に OCI Object Storage は使えますか?」という質問がありました。Oracle Cloud Infrastructure (OCI) の Object Storage は S3 互換 API を提供していますので、当然回答は「はい、使えますよ、S3 互換 API 使って下さい」になった訳ですが、ここでは実際にこれをやってみたいと思います。

OCI S3 互換 API の概要については、こちらの資料「 OCIオブジェクト・ストレージ - S3互換APIの利用」を参照して下さい。

尚、Argo Workflows は 既にセットアップされていて、"argo" ネームスペースでワークフローが実行できるようになっている前提で話を進めます。

OCI Object Storage バケットを作成する

S3 互換 API でアクセスできる OCI のコンパートメントは仕様上ただ1つです。
「管理 > テナンシ詳細」で、どのコンパートメントが利用可能か確認(若しくは指定)して、そのコンパートメント内に Argo Workflows が使うバケットを作成して下さい。
同時にオブジェクト・ストレージ・ネームスペースも確認しておいてください。

image.png

顧客秘密キーを生成する

S3 互換 API の認証情報になります。
OCI コンソールから認証に使うユーザーの「アイデンティティ > ユーザー > ユーザーの詳細 > 顧客秘密キー」をたどって、新しい顧客秘密キーを生成します。秘密キーは生成された時にしかコピーするチャンスが無いので注意。
アクセス・キーと秘密キーをメモします。

image.png

Secret を作成する

生成した顧客秘密キーを使って Secret を作成します。

kubectl create secret -n argo generic oci-os-s3-cred \
  --from-literal=accesskey=<アクセス・キー値> \
  --from-literal=secretkey=<秘密キーの値>

ConfigMap を作成する

以下のような ConfigMap を作成します。

apiVersion: v1
kind: ConfigMap
metadata:
  namespace: argo
  name: artifact-repositories
  annotations:
    workflows.argoproj.io/default-artifact-repository: oci-artifact-repository
data:
  oci-artifact-repository: |
    s3:
      bucket: argo-artifacts
      endpoint: somens.compat.objectstorage.ap-tokyo-1.oraclecloud.com
      region: ap-tokyo-1
      accessKeySecret:
        name: oci-os-s3-cred
        key: accesskey
      secretKeySecret:
        name: oci-os-s3-cred
        key: secretkey

ポイントは、以下のとおり

  • metadata.name が "artifact-repositories" だと、これがデフォルトの artifact repository になるので、ワークフロー定義でいちいち指定する必要が無くなります。
  • data には複数のエントリーが書けますが、metadata.annotations.workflows.argoproj.io/default-artifact-repository でデフォルトのエントリーを指定できます。
  • s3.endpoint は S3互換APIのルールに従ったURLを指定します。
    <ネームスペース>.compat.objectstorage.<リージョン>.oraclecloud.com
  • s3.region は ホームリージョン以外のリージョンのバケットを使用する場合必須です。

ワークフローを実行する

Github にある example を実行してみます。

argo submit -n argo https://raw.githubusercontent.com/argoproj/argo-workflows/master/examples/artifact-passing.yaml

内容はこのようなもの。

# This example demonstrates the ability to pass artifacts
# from one step to the next.
apiVersion: argoproj.io/v1alpha1
kind: Workflow
metadata:
  generateName: artifact-passing-
spec:
  entrypoint: artifact-example
  templates:
  - name: artifact-example
    steps:
    - - name: generate-artifact
        template: whalesay
    - - name: consume-artifact
        template: print-message
        arguments:
          artifacts:
          - name: message
            from: "{{steps.generate-artifact.outputs.artifacts.hello-art}}"

  - name: whalesay
    container:
      image: docker/whalesay:latest
      command: [sh, -c]
      args: ["sleep 1; cowsay hello world | tee /tmp/hello_world.txt"]
    outputs:
      artifacts:
      - name: hello-art
        path: /tmp/hello_world.txt

  - name: print-message
    inputs:
      artifacts:
      - name: message
        path: /tmp/message
    container:
      image: alpine:latest
      command: [sh, -c]
      args: ["cat /tmp/message"]

実行できました。

image.png

Object Storage のバケットを見てみましょう。

image.png

ファイル (hello-art.tgz) が作成されていますね。

(おしまい)

参考情報

https://docs.oracle.com/ja-jp/iaas/Content/Object/Tasks/s3compatibleapi.htm
https://argoproj.github.io/argo-workflows/walk-through/artifacts/
https://argoproj.github.io/argo-workflows/configure-artifact-repository/

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?