Upgrade to Pro — share decks privately, control downloads, hide ads and more …

コンテナレジストリサーバーにコンテナ以外のものを格納する

 コンテナレジストリサーバーにコンテナ以外のものを格納する

OpenShift.Run 2020 SummerのLTで話した内容になります。

SSSSSSSSSSSSHHHHHHHHHH

September 24, 2020
Tweet

More Decks by SSSSSSSSSSSSHHHHHHHHHH

Other Decks in Programming

Transcript

  1. コンテナレジストリサーバーにコン
    テナ以外のものを格納する
    原木

    View full-size slide

  2. 目次
    OCI Artifactsについて話します
    2
    1
    成果物管理
    成果物管理に関して抱えている課題を共有します
    2 OCI Artifacts
    OCI規格と事例について紹介します
    3
    今後予測しうる技術展開
    クラウドプロバイダーやベンダーの動向で
    気になったことを取りまとめます

    View full-size slide

  3. 成果物管理という課題
    クラウドネイティブ時代だから起こりうる問題
    3

    View full-size slide

  4. (よくある)
    クラウドネイティブなCI/CD環境
    4
    commit
    アプリケーションの
    ソースコード
    環境設定の
    ソースコード
    ビルド
    &テスト
    開発&テスト
    環境
    本番環境
    ArgoCD
    Project
    コンテナ
    レジストリ
    リポジトリ
    の更新
    git clone
    ArgoCDの
    実行
    https://ibm-cloud-architecture.github.io/cloudpak-for-applications/liberty/
    をベースに作成
    コンテナイ
    メージの作成
    &ビルド

    View full-size slide

  5. (粒度をちょっと細かくした)
    クラウドネイティブなCI/CD環境
    5
    commit
    アプリケーションの
    ソースコード
    環境設定の
    ソースコード
    ビルド
    テストレポートの
    出力
    コンテナイメージ
    の作成
    コンテナレジスト
    リへの登録
    リグレッション
    テスト
    単体テスト
    開発&テスト
    環境
    本番環境
    ArgoCD
    Project
    privateコンテナ
    レジストリ
    リポジトリ
    の更新
    git clone
    ArgoCDの
    実行
    ライブラリ管理1
    conftest
    機械学習用
    推論モデル管理
    データプレーン
    用プラグイン
    ライブラリ管理2
    publicコンテナ
    レジストリ

    View full-size slide

  6. このあたりにトラブルの種が…
    6
    commit
    アプリケーションの
    ソースコード
    環境設定の
    ソースコード
    ビルド
    テストレポートの
    出力
    コンテナイメージ
    の作成
    コンテナレジスト
    リへの登録
    リグレッション
    テスト
    単体テスト
    開発&テスト
    環境
    本番環境
    ArgoCD
    Project
    privateコンテナ
    レジストリ
    リポジトリ
    の更新
    git clone
    ArgoCDの
    実行
    ライブラリ管理1
    conftest
    機械学習用
    推論モデル管理
    データプレーン
    用プラグイン
    ライブラリ管理2
    publicコンテナ
    レジストリ
    1
    2
    3

    View full-size slide

  7. クラウドネイティブ環境における
    (ダメな)特徴
    1. イミュータブルインフラストラクチャ
    7
    3. マイクロサービス
    2. 宣言的設定
    “不変”だからこそ、いつでもパブリックリポジトリから
    取得可能…そのコンテナ、賞味期限がありませんか?
    何でも宣言するのでgitで履歴管理は万全…その結果、初
    心者お断りの構成管理になってませんか?
    独立不羈なチーム体制…その結果、サービスごとの成果
    物は無秩序に管理していませんか?

    View full-size slide

  8. クラウドネイティブ環境における
    成果物管理の業務要件は(実際)多い
    8
    ⚫ プライベートリポジトリでパッケージやライブラリを個別
    管理したい
    ⚫ 構成ファイル群を一つのサービスごとにバンドルして管理
    したい
    ⚫ デプロイ方法はできるだけシンプルにしたい
    ⚫ 多種多様なサービス=成果物をどんなものでも入れられる
    ようにしたい
    ⇒コンテナレジストリサーバーを
    成果物管理サービスとして使おう

    View full-size slide

  9. (成果物管理を集約した)
    クラウドネイティブなCI/CD環境
    9
    commit
    アプリケーションの
    ソースコード
    環境設定の
    ソースコード
    ビルド
    テストレポートの
    出力
    コンテナイメージ
    の作成
    コンテナレジスト
    リへの登録
    リグレッション
    テスト
    単体テスト
    開発&テスト
    環境
    本番環境
    ArgoCD
    Project
    リポジトリ
    の更新
    git clone
    ArgoCDの
    実行
    conftest
    アーティファクトス
    トア(成果物管理)

    View full-size slide

  10. OCI ARTIFACTS
    コンテナレジストリサーバーは
    「なんでも入るレジストリ」*1サーバーへ
    10

    View full-size slide

  11. OCI Artifactsとは?
    11
    ⚫アーティファクト(成果物)をコンテナイ
    メージと同じ枠組みで格納、配布できるよ
    うにするための仕様
    ⚫Open Container Initiativeによって策定
    1. アーティファクトの種類の定義方法
    – コンテナイメージのmanifestとindex(正確には
    manifest.config.mediaType)を利用
    2. アーティファクトの出し入れ方法
    – 配布仕様(Distribution Specification)をコンテナイメー
    ジと共通化

    View full-size slide

  12. そもそもコンテナイメージってなんだろ
    う?(OCI仕様を例に)
    12
    参考: https://github.com/opencontainers/image-spec/blob/master/spec.md
    https://github.com/opencontainers/image-spec/blob/master/image-layout.md
    アーティファクトの種類の定義方法
    アーティファクトの出し入れ方法
    $ oci-image-downloader example.com/app
    {oci-runtime-bundle-path}
    ⇒実際にこういうcliツールがあるわけではな
    い。dockerLikeな操作性が重要。参考実装は
    次に紹介するorasを参考のこと

    View full-size slide

  13. 事例紹介
    OCI Artifactsの応用事例について紹介します
    13
    1 oras
    OCI Registry As Storage
    2 ormb
    機械学習の推論モデルの管理用レジストリ
    3 WebAssembly
    WebAssembly on the server is the future of computing.

    View full-size slide

  14. oras
    OCI Registry As Storage
    14
    ⚫ 元とはhelmをコンテナイメージと同じようにレジストリ
    サーバーに格納できないかとhelmの開発元である
    deislabsの人が中心となって開発しているOSS
    ⚫ OCI Artifactsのクライアント側の参照実装
    ⚫ コンテナレジストリサーバーを”ブロブストレージ”のよ
    うに取り扱う仕組み
    ⚫ orasライブラリという形でも公開されていてwasm-to-oci
    という後で紹介するツールでも使用されている
    ⚫ とりあえず、OPAのregoファイルやhelmチャートをコン
    テナレジストリに格納したい(要は単なるブロブストレー
    ジとして利用したい)場合は便利。

    View full-size slide

  15. ormb
    OCI-based Registry for ML/DL Model Bundle
    15
    ⚫ ByteDance社の人が中心となって開発しているOSS
    ⚫ コンテナレジストリサーバーを機械学習モデル(推論モデ
    ル)の配布先として使えるようにするためのクライアント
    ツール
    ⚫ サーバー側はHarborが対応済み
    ⚫ クラウドネイティブ環境における親和性やRBACなどの権
    限管理を考えて、Harborを機能拡張して利用することに
    したとのこと
    参考情報:
    ByteDance社は単に機械学習用モデルをHarborに対応させた、というだけでは
    なく、アーティファクトの種類が今後増えていったときにProcessorと呼ばれ
    るコンテナのindexやmanifestファイルの解釈処理をどうやって拡張させる
    か?といったプロポーザルなども出しているので面白い
    https://github.com/goharbor/community/blob/master/proposals/enhanced-
    default-processor.md

    View full-size slide

  16. WebAssembly on the server is the future of
    computing.
    16
    ⚫ Dockerの創業者Hykesさんによるtweet
    ⚫ “WebAssemblyは、ウェブブラウザのクライアントサイド
    スクリプトとして動作するプログラミング言語(低水準
    言語)”でしたが、昨今ではサーバーサイドでの利用が目
    されている
    ⚫ Wasmが近い将来、LinuxContainerやWindowsContainerなど
    とならんで実行される未来が来た場合、現状普及してい
    るKubernetes&コンテナランタイム環境というエコシステ
    ムを流用する可能性が高い(私見)
    ⚫ その未来が来たときにコンテナと同じようにwasmを扱う
    krustletやWebAssemblyHubが活躍する日も近い
    https://twitter.com/solomonstre/status/1111004913222324225

    View full-size slide

  17. Krustlet と WebAssemblyHub
    17
    ⚫ Krustlet: deislabsが中心となって開発しているk8sのエコ
    システム上でwasmを実行するための仕組み
    – https://www.publickey1.jp/blog/20/kuberneteswebasssemblykrustl
    et.html
    – https://www.slideshare.net/shihoasa/krustlet101
    ⚫ WebAssemblyHub: solo.io社が中心となって開発してい
    る、Envoy用のWebFilterの配布サービス
    ⚫ mediaType=“OCI Artifactsの種類”を見る限り、どうみて
    も別物
    今後が不安…

    View full-size slide

  18. 今後予測しうる技術展開
    18

    View full-size slide

  19. 動向紹介
    OCI Artifactsの応用事例について紹介します
    19
    1
    ソースコード管理がOCI Artifactsを実装
    GitLab/GitHubの事例から
    2
    クラウドプロバイダーがサービスを充足
    コンテナレジストリサービスの発展形
    3 k8s&コンテナランタイム環境との
    親和性の高いサービスの要素として登場(予想)

    View full-size slide

  20. ソースコード管理がOCI Artifactsを実装
    20
    commit
    ビルド
    テストレポートの
    出力
    コンテナイメージ
    の作成
    コンテナレジスト
    リへの登録
    リグレッション
    テスト
    単体テスト
    開発&テスト
    環境
    本番環境
    ArgoCD
    Project
    リポジトリ
    の更新
    git clone
    ArgoCDの
    実行
    conftest
    アーティファクトス
    トア(成果物管理)
    アプリケーションの
    ソースコード
    環境設定の
    ソースコード

    View full-size slide

  21. クラウドプロバイダーによるサポート
    21

    View full-size slide

  22. ⚫K8s&コンテナランタイム環境とのより高
    次元での統合
    – OPAのConftest/Gatekeeperは現在コンテナレジストリサーバーから直接デプロイ
    できるように開発中
    https://github.com/open-policy-agent/opa/issues/1464
    – 参考事例: dockerコマンドと各クラウドプロバイダーのコンテナレジストリサー
    バーとの統合
    ⚫OCI Artifacts Hub(予想)
    – 今後も様々なmediaType…派生型OCIイメージが出てくる
    ⇒一括管理できるサービスの登場
    k8s&コンテナランタイム環境との親和性
    の高いサービスの要素として登場(予測)
    22

    View full-size slide

  23. 振り返り
    OCI Artifactsについて本日は紹介しました
    23
    1
    成果物管理
    クラウドネイティブ環境でありがちな
    成果物管理の課題をOCI Artifactsが解決することを
    説明しました。
    2 OCI Artifacts
    OCI Artifactsと事例について紹介しました。
    3
    今後予測しうる技術展開
    Kubernetesとコンテナレジストリサーバーという
    プラットフォームが前提&親和性の高いサービス
    が発展するはず。

    View full-size slide

  24. 参考文献その1
    24
    ⚫ OCI Artifacts
    – https://github.com/opencontainers/artifacts
    – OCI Artifactsの仕様書に関するリポジトリ
    ⚫ New OCI Artifacts Project
    – https://opencontainers.org/posts/blog/2019-09-10-new-oci-artifacts-project/
    – Open Container Initiativeによる新規プロジェクト “OCI Artifacts”開始の案内(2019年9月)
    ⚫ Cloud Native Artifact Registries evolve from Docker Container Registries
    – https://stevelasker.blog/2019/01/25/cloud-native-artifact-stores-evolve-from-container-registries/
    – AzureのProgram ManagerのSteve Laskerさんによる”コンテナレジストリの進化”について説明した記事
    – 下記の記事も非常に理解の参考になります。
    – https://stevelasker.blog/2019/05/11/authoring-oci-registry-artifacts-quick-guide/
    – https://stevelasker.blog/2019/08/25/oci-artifacts-and-a-view-of-the-future/
    – https://stevelasker.blog/2020/02/17/registry-namespace-repo-names/
    ⚫ OCIv2?!軽量高速なイケてる次世代イメージ仕様の最新動向を抑えよう!
    – https://www.slideshare.net/KoheiTokunaga/ociv2
    – NTT ソフトウェアイノベーションセンタの徳永さんによる2019年6月のOCI動向に関する資料(2019年6月)
    この資料で2p分に簡潔で分かりやすくまとめられた内容を膨らましたのが本資料…
    基本的にこちらの資料で説明されていた状況が昨今に至るまで踏襲されているといえる。
    ⚫ Distributing WebAssembly modules using OCI registries
    – https://radu-matei.com/blog/wasm-to-oci/
    – OCIレジストリサーバーをwasmの格納先として活用するための概念実証事例。
    実際にこの後、krustletやEnvoyのwasmプラグインのデプロイサーバーとして活用されるようになる。

    View full-size slide

  25. 参考文献その2
    25
    ⚫ OCI Artifacts(ブログ)
    – https://medium.com/@jzelinskie/oci-artifacts-f5f3b4ef2889
    – CoreOS社(現在はRed Hat社の一部/OpenShift v3からk8sベースに代わり、大きく成長した立役者)の中の
    人によるRed Hat QuayとOCI Artifactsのかかわりについて説明した記事
    – Kubesprayのオリジナルを作成したAntoine Legrandさんによって、OCI Artifactsの仕様が固まるずっと前
    からDockerレジストリプロトコルを拡張してコンテナ以外のArtifactsもサポートするビジョンが見えていた
    よという話
    – 記事にもあるが、このプロジェクト…AppRegistryはPythonで書かれていたことなどもあり、自然消滅して
    しまったらしい
    https://github.com/app-registry
    – 時代は早すぎた!というのもあるが、OCI Artifactsの仕様を見る限りではdeislabsの意向が強く反映されてい
    るので、仕様調整でコミュニティの協力が得られなかったのかもしれない(私見: 過去のIssueやOCIの議事録
    を拝見させていただいたが単純に言い切れるほどには読み切れなかった)。
    – このブログ記事の後、VMware Harbor Registry, Red Hat Quay, クラウドプロバイダーの各コンテナレジ
    ストリサーバーがOCI Artifactsに対応したのは周知の事実である。
    ⚫ OpenContainerInitiative
    – https://opencontainers.org/community/overview/
    – コンテナイメージ、コンテナイメージの配布仕様に関する標準仕様策定を進めるコミュニティ。

    View full-size slide

  26. 参考文献その3
    26
    ⚫ OCI Artifact Support In Amazon ECR
    – https://aws.amazon.com/blogs/containers/oci-artifact-support-in-amazon-ecr/
    – AWSのECRがOCI Artifactをサポートしたという記事。
    – 著者のMichael Hausenblasさんは元RedHat社(=CoreOS社)のContainerSecurity周りやKubernetes Operator関連
    で精力的に活動されている方
    ⚫ Harbor is extending its reach with key image distribution features and support for
    Machine Learning artifacts
    – https://goharbor.io/blog/harbor-extending-its-reach/
    – http://gaocegege.com/Blog/ormb
    – HarborがByteDance社と協力して機械学習モデルを格納・配布できるようになったという記事
    – ByteDance社は、 クラウドネイティブ機械学習プラットフォームのCleverを展開しているCaiyun Technology
    社を直近で買収しており、k8s&コンテナランタイム環境上で機械学習の推論モデルをSaaS環境として展開し
    ようとしている

    View full-size slide