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

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

Sponsored · Ship Features Fearlessly Turn features on and off without deploys. Used by thousands of Ruby developers.
Avatar for Kazuto Kusama Kazuto Kusama
February 05, 2019

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

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

Avatar for Kazuto Kusama

Kazuto Kusama

February 05, 2019

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