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

Dockerとk8s, helmをTwelve Factor Appsの観点 からざっくり整理

Dockerとk8s, helmをTwelve Factor Appsの観点 からざっくり整理

2018/07/19 Docker Meetup Tokyo #24での、藤原の講演資料になります

Recruit Technologies

July 19, 2018
Tweet

More Decks by Recruit Technologies

Other Decks in Technology

Transcript

  1. ⾃⼰紹介 藤原 涼⾺ 株式会社リクルートテクノロジーズ ITE本部 SRE部 ISEG 経歴 2011-2015ユーザ系SIer にてR&D

    2016/1〜 リクルートテクノロジーズに⼊社 主な活動(社内外含む) • コンテナを中⼼とした先進アーキテクチャの事業への装着 • Rancher JPコアメンバー • 寄稿(@IT 先⾏事例に学ぶKubernetes 企業活⽤の現実) 趣味 勉強会で⾊々喋る ⼦供と遊ぶ 6 (C) Recruit Technologies Co.,Ltd. All rights reserved.
  2. (前提の確認)Twelve-Factor appについて (2/2) 1. コードベース 2. 依存関係 3. 設定 4.

    バックエンドサービス 5. ビルド・リリース・実⾏ 6. プロセス 9 (C) Recruit Technologies Co.,Ltd. All rights reserved. 7. ポートバインディング 8. 並⾏性 9. 廃棄容易性 10.開発/本番⼀致 11.ログ 12.管理プロセス
  3. 1. コードベース 同じコードベース(リポジトリ)を起源とする 10 (C) Recruit Technologies Co.,Ltd. All rights

    reserved. Docker Kubernetes Helm それぞれのツールがコードで 主に管理する範囲を整理 狭 広 ୯Ұͷ ίϯςφ಺ ෳ਺ίϯςφ ؒͷؔ܎ νϟʔτ (k8s্Ͱఆٛ͞Εͨ ෳ਺ΞϓϦέʔγϣϯͷؔ܎)
  4. 2. 依存関係 依存関係を明⽰的に宣⾔し分離する 11 (C) Recruit Technologies Co.,Ltd. All rights

    reserved. Docker Kubernetes Helm それぞれのツールの中で宣⾔する依存関係を整理 コンテナイメージ間 リソース定義間 チャート間 Dockerfile • FROM句 • マルチステージビルド Deployment ReplicaSet Pod (コンテナ & コンテナイメージ) Service 親チャート ⼦チャート ) ) ) & ) ( ) ) requirements.yaml charts/
  5. 3. 環境 設定を環境変数に格納する 12 (C) Recruit Technologies Co.,Ltd. All rights

    reserved. Docker Kubernetes Helm それぞれのツールの中で宣⾔される依存関係を整理 1. Dockerfile • ENV 2. docke run -e 1. ConfigMap 2. Secrets 1. values.yaml
  6. 4. バックエンドサービス バックエンドサービスをアタッチされたリソースとして扱う 13 (C) Recruit Technologies Co.,Ltd. All rights

    reserved. 環境変数を使ってバックエンドサービスは切り替えする (またはDNSをうまく活⽤、認証情報は後述)
  7. 5. ビルド・リリース・実⾏ ビルド、リリース、実⾏の3つのステージを厳密に分離する 14 (C) Recruit Technologies Co.,Ltd. All rights

    reserved. Docker (docker) Kubernetes (kubectl) Helm (helm) ビルド リリース 実⾏ Helm͋Γ Helmͳ͠ kubectl apply –f … kubectl create –f … docker build helm package? helm install helm upgrade ຌྫ
  8. 6. プロセス よくあるDockerのベストプラクティスを守る 1. 1 コンテナ = 1プロセス 2. ステートレス

    & シェアードナッシング* 15 (C) Recruit Technologies Co.,Ltd. All rights reserved. *ͨͩ͠ɺ2ʹ͍ͭͯ͸ࠓޙͷঢ়گʹΑͬͯ͸গͮͭ͠มΘΔ͔΋
  9. 7.ポートバインディング ポートバインディングを通してサービスを公開する 16 (C) Recruit Technologies Co.,Ltd. All rights reserved.

    Docker Kubernetes Helm Dockerfileͷ EXPOSE۟ (ͲͷϙʔτͰListenͯ͠Δ͔) ServiceϦιʔε (ϙʔτόΠϯσΟϯάΛఆٛ) k8sϦιʔεͷ ςϯϓϨʔςΟϯάΛհͯ͠ ϙʔτόΠϯσΟϯάΛ੍ޚ
  10. 8. 並⾏性 プロセスモデルによってスケールアウトする 17 (C) Recruit Technologies Co.,Ltd. All rights

    reserved. Docker Kubernetes Helm Deploymentsɺ Replicasetͷ ϨϓϦΧ਺มߋʹ Α੍ͬͯޚ k8sͱಉ͡΋ͷΛ helm upgrade + values.yaml(ͳͲ) ʹΑ੍ͬͯޚ ରԠ͢Δ ػೳ͸ͳ͠ (swarmは⼀旦スコープ外)
  11. 10. 開発・本番⼀致 開発、ステージング、本番環境をできるだけ⼀致させた状 態を保つ 19 (C) Recruit Technologies Co.,Ltd. All

    rights reserved. Docker Kubernetes Helm (環境間で)何の差異を無くすか、 何の差異をカバーしてくれるかを整理 コンテナ イメージ 差異を無くして くれるもの コンテナ構成 カバーするもの 環境変数・機密情報など (with ConfigMap, Secrets) 凡例 + α
  12. 11. ログ STDOUT/STDERRに出⼒して集約 • オンプレ • ELKスタックなどを活⽤ • パブリッククラウド •

    AWS … CloudWatch Logs, Elasticsearch • GCP … StackDriver Logs 20 (C) Recruit Technologies Co.,Ltd. All rights reserved. 本番運⽤だと必須
  13. 12. 管理プロセス 管理タスクを1回限りのプロセスとして実⾏する (例えば、RoRにおける rake db:migrate など) 21 (C) Recruit

    Technologies Co.,Ltd. All rights reserved. Docker Kubernetes Helm Job, CronJob の利⽤ docker run --rm … ない
  14. まとめ (2/3) • 開発の中で出てきた要件をどのツールに担わせるべきか、 といった判断に役⽴てることができそうです • そもそもこれ全部必要なんだっけ?ということも改めて 整理できそうです • ツールセットの隙間(抜け漏れ)を⾒つけられることがあ

    るので良いかもしれません • とはいえ単⼀の考え⽅のみだと不⾜は明らかなので複数の観点か らの確認は必要です 23 (C) Recruit Technologies Co.,Ltd. All rights reserved. *ݸਓతʹ͸Twelve Factor Apps΍ ϓϩμΫγϣϯϨσΟϚΠΫϩαʔϏε͕ ੔ཧʹΦεεϝͰ͢ɻ