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

Cloud Native BuildpackでToil減らしていこうという話

Kazuto Kusama
February 05, 2019

Cloud Native BuildpackでToil減らしていこうという話

NoOps Meetup Tokyo #4 で発表したスライドです。
コンテナイメージ作るのもそうだけど、その後のメンテナンスの視点は意外と忘れられがち。 Cloud Native Buildpackの仕組みを使えば、もしかしたらそのToilを減らせるかもしれません。

Kazuto Kusama

February 05, 2019
Tweet

More Decks by Kazuto Kusama

Other Decks in Technology

Transcript

  1. の モデル $ docker build $ docker push $ docker

    run 書いて イメージ作って どこかのレジストリに上げて 実行する
  2. の モデル $ docker build $ docker push $ docker

    run 書いて イメージ作って どこかのレジストリに上げて 実行する 特にこのへんが大変
  3. 誰もが同じようなことをやる の作成 の作成 の作成 の作成 の作成 の作成 この 酷いですね 笑

    イメージサイズでかいですよ 笑 詳しい人 クソが クソが クソが
  4. 誰もが同じようなことをやる の作成 の作成 の作成 の作成 の作成 の作成 この 酷いですね 笑

    イメージサイズでかいですよ 笑 詳しい人 クソが クソが クソが じゃん
  5. #!/usr/bin/env bash BUILD_DIR=$1 # Exit early if app is clearly

    not Python. if [ ! -f "$BUILD_DIR/requirements.txt" ] && [ ! -f "$BUILD_DIR/setup.py" ] && [ ! -f "$BUILD_DIR/Pipfile" ]; then exit 1 fi echo Python か か が無かったら 見つかった場合、 と文字を出して終わる
  6. $ cf push のコード ① を実行 ではないので が返る ② を実行

    ではないので が返る ③ を実行 ではないので が返る ④ を実行 のファイルがあるので が返る ⇒ を使った次の処理へ
  7. 実行可能なイメージを作成するフェーズ 言語の実行環境の設定 • たとえば 自体、 自体の実行環境 ライブラリ類の解決 • なら 、

    なら など ここでその名の通り環境のコンパイルを行うことができるが、実際のとこ ろは処理時間の都合上、コンパイル済みのバイナリを持ってくることが 多い
  8. $ ls README.md app manifest.yml node_modules package.json public server.js views

    $ pack build jacopen/testapp 2018/11/19 17:14:31 Pulling builder image 'packs/samples' (use --no-pull flag to skip this step) 2018/11/19 17:14:33 Selected run image 'packs/run' from stack 'io.buildpacks.stacks.bionic' 2018/11/19 17:14:33 Pulling run image 'packs/run' (use --no-pull flag to skip this step) *** DETECTING: 2018/11/19 08:14:43 Group: Sample Node.js Buildpack: pass *** ANALYZING: Reading information from previous image for possible re-use 2018/11/19 17:14:44 WARNING: skipping analyze, image not found 中略 ---> 170c76d2c366 Successfully built 170c76d2c366 Successfully tagged jacopen/testapp:latest Dockerfileすら無いnode.jsアプリのディレクトリで pack buildコマンドを一発打つだけで、 自動的にイメージのビルドやってくれて超らくちん というデモをしました
  9. によってもたらされるもの • 開発者の生産性向上 ◦ アプリケーション開発に注力できる ▪ どうやって 書くかとか気にしなくていい ◦ 一貫した操作でデプロイできる

    ▪ ▪ コマンド叩けば様々な言語で同様にイメージ作成できる • 持続可能な運用 ◦ のガードレールの元で開発者の生産性を高める ◦ スケーラブルなセキュリティ
  10. によってもたらされるもの • 開発者の生産性向上 ◦ アプリケーション開発に注力できる ▪ どうやって 書くかとか気にしなくていい ◦ 一貫した操作でデプロイできる

    ▪ ▪ コマンド叩けば様々な言語で同様にイメージ作成できる • 持続可能な運用 ◦ のガードレールの元で開発者の生産性を高める ◦ スケーラブルなセキュリティ
  11. これまでの のワークフロー の作成 の作成 手動、もしくはこれに相当する作業を CIツールで実施 FROM python:3.5.2 RUN apt-get

    update &&\ apt-get install xxxxxxxxx COPY xxxx xxxx CMD [xxxx] ベースイメージに 脆弱性が含まれていたら? パッケージに 脆弱性が含まれていたら?
  12. これまでの のワークフロー の作成 の作成 手動、もしくはこれに相当する作業を CIツールで実施 FROM python:3.5.2 RUN apt-get

    update &&\ apt-get install xxxxxxxxx COPY xxxx xxxx CMD [xxxx] ベースイメージに 脆弱性が含まれていたら? パッケージに 脆弱性が含まれていたら? 脆弱性が発見される度に Dockerfileを書き換え、イメージを作り直 す作業を開発者がしなくてはいけない それどころか、対応が後回しになって放置されるかもしれない
  13. これまでの のワークフロー の作成 の作成 FROM python:3.5.2 RUN apt-get update &&\

    apt-get install xxxxxxxxx COPY xxxx xxxx CMD [xxxx] を が管理?
  14. これまでの のワークフロー の作成 の作成 FROM python:3.5.2 RUN apt-get update &&\

    apt-get install xxxxxxxxx COPY xxxx xxxx CMD [xxxx] を が管理? 開発チームが増え、運用対象が増えると管理が回らない (スケーラビリティの問題 ) コミュニケーションコストの問題で開発効率が落ちる
  15. 今ある • の は、順次 対応が行われる ◦ 現時点では が利用可能 ◦ https://github.com/cloudfoundry/nodejs-cnb.git

    • Herokuからは、JavaのBuildpackがリリース ◦ https://github.com/heroku/java-buildpack • Knativeの上でFaaSを実現するriff向けのbuildpack ◦ https://github.com/projectriff/riff-buildpack