$30 off During Our Annual Pro Sale. View Details »

Cloud Native Apps

tnir
April 19, 2018

Cloud Native Apps

Cloud Native Apps入門

[B-1] 2018-04-19 Japan Container Days v18.04

tnir

April 19, 2018
Tweet

More Decks by tnir

Other Decks in Technology

Transcript

  1. Cloud Native Apps 入門
    @tnir - Takuya Noguchi
    2018-04-19 - Japan Container Days (JKD) v18.04

    View Slide

  2. @tnir
    Takuya Noguchi
    Tw: @tn961ir
    FB: @takuya.noguchi.961
    ● Co-organizer of Kaimyacho.k8s
    & Prometheus Tokyo & Docker
    Meetup Tokyo
    ● Cloud Native Ambassador,
    CNCF
    ● Core Team member, GitLab
    ● 20 yrs Software Engineer in
    Digital Transform
    ● Works for iRidge, Inc. as Tech
    Comm/DX←SRE←SWE
    Japan Container Days v18.04
    プロポーザルレビュアー
    公式サイト レスポンシブ対応

    View Slide

  3. 質問
    ● みなさん ロール なんですか?
    ○ インフラエンジニア
    ○ SRE
    ○ エンジニアリングマネージャー
    ○ アーキテクト・システムエンジニア
    ○ アプリケーションエンジニア

    View Slide

  4. Agenda
    Cloud native appsと
    ● Cloud native applications
    ● CNCF
    Case study
    ● iRidge
    ● GitLab
    ● GitHub
    まとめ
    ● 成果と課題

    View Slide

  5. What is Cloud Native?

    View Slide

  6. “Cloud native” (CNCF憲章)
    クラウドネイティブなシステム(cloud native system):
    1. Container packaged ( => containerization)
    2. Dynamically managed ( => orchestration)
    3. Micro-services oriented ( => service mesh)
    https://www.cncf.io/about/charter/

    View Slide

  7. CNCF

    View Slide

  8. Cloud Native Computing Foundation
    ● 2015年にKubernetesプロジェクト 寄贈先としてLinux
    Foundation もとでスタート
    ● 20プロジェクト(2018年4月現在)
    ● メンバーシップ(スポンサー)
    ○ ~ 180社 (2018年4月現在)
    ● Technical Oversight Committee
    ● Governing Board
    ● Staff

    View Slide

  9. Cloud Native Landscape
    詳細 17:00〜 [B-5]CNCF: Evolving the Container Landscape[Chris Aniszczyk]

    View Slide

  10. CNCF CI dashboard
    github.com/crosscloudci/cross-cloud
    https://cncf.ci/

    View Slide

  11. Certification (Kuberentes)

    View Slide

  12. Certification (CKA & CKAD)
    Kubernetes管理者認定資格 Kubernetesアプリ開発者認定資格
    (ベータ)

    View Slide

  13. Definition of Cloud Native?

    View Slide

  14. What’s cloud native application?
    ● Developing Cloud Native Applications
    ○ Ken Owens (Cisco Systems), May 2017
    ○ https://blog.devnetcreate.io/developing-cloud-native-applications-
    94179c53e486
    ○ https://www.cncf.io/blog/2017/05/15/developing-cloud-native-ap
    plications/
    ● Cloud Native Application Maturity Model (2015)
    ○ https://www.nirmata.com/2015/03/09/cloud-native-application-m
    aturity-model/
    ● 「クラウド 提供するアジリティをビジネス加速に役立てる」
    →ややエンタープライズ寄り?

    View Slide

  15. Cloud application maturity
    https://www.nirmata.com/2015/03/09/cloud-native-application-maturity-model/
    (by Open Data Center Alliance)

    View Slide

  16. Case study #1
    iRidge

    View Slide

  17. iRidge, Inc.
    ● スマホアプリ専業(O2O, Fintech)
    ○ システム・インテグレーション
    ● 2008年創業
    ● 従業員 70名(エンジニア30名, No Ops)

    View Slide

  18. 技術選択(ツール)
    2008
    2013
    2014
    2015
    2016
    2017
    2018
    2019?
    創業
    SaaS立ち上げ
    売上
    前年比3倍
    EU展開 上場
    SRE立ち上げ
    300人体制へ
    App Engineでスタートするも環境が特殊、ベンダーロックイン 懸念
    (2011) EC2東京リリースでAWS本格導入
    Gitへ 移行、コンテナ技術導入
    Kubernetes、CI/CD導入
    Registry基盤導入
    ベンダーニュートラル
    Serverless
    Auto DevOps
    Unikernel

    View Slide

  19. The Twelve-Factor App原則に従う
    https://12factor.net/
    I. コードベース
    バージョン管理されている 1つ コードベースと複数 デプロイ
    II. 依存関係
    依存関係を明示的に宣言し分離する
    III. 設定
    設定を環境変数に格納する
    IV. バックエンドサービス
    バックエンドサービスをアタッチされたリソースとして扱う
    V. ビルド、リリース、実行
    ビルド、リリース、実行 3つ ステージを厳密に分離する
    VI. プロセス
    アプリケーションを 1つもしく 複数 ステートレスなプロセスとして実行する
    VII. ポートバインディング
    ポートバインディングを通してサービスを公開する
    VIII. 並行性
    プロセスモデルによってスケールアウトする
    IX. 廃棄容易性
    高速な起動とグレースフルシャットダウンで堅牢性を最大化する
    X. 開発/本番一致
    開発、ステージング、本番環境をできるだけ一致させた状態を保つ
    XI. ログ
    ログをイベントストリームとして扱う
    XII. 管理プロセス
    管理タスクを 1回限り プロセスとして実行する

    View Slide

  20. CI(/CD)基盤
    ● イメージビルド 省力化・自動化・標準化 重要
    by
    GitLab Container
    Registry
    非クリーン環境 クリーンDocker環境 2016〜
    2013〜

    View Slide

  21. GitLab CI評価
    ● UI 洗練感 ない
    ● 企業ユースに 適する
    ● Cloud native対応
    ● GitHub / GHE対応
    ● CNCF CIにも採用済み The Forrester Wave™: Continuous Integration Tools, Q3 2017
    https://www.forrester.com/report/The+Forrester+Wave+Continuous
    +Integration+Tools+Q3+2017/-/E-RES137261
    https://get.gitlab.com/forrester-wave-ci/

    View Slide

  22. アーキテクチャ
    ● システムごとにアーキテクチャをレビュー
    ○ マイクロサービスになっているとレビューに時間がかかる
    ● そもそもマイクロサービスとして 開発リソースが足りない
    ● 慣れたウェブアプリフレームワークを使いたい
     → 積極的なマイクロサービス 行わない

    View Slide

  23. マイクロサービス化にこだわらない
    ● 既存コード資産
    ● 慣れたフレームワーク
    ● I/Oを熟考した「サービス」を実装していく
    cf.) Spoons (LightStep) “The End of Microservices”, Jul 2017:
    https://lightstep.com/blog/the-end-of-microservices/

    View Slide

  24. (e.g.) Djangoアプリを分離
    from django.urls import path
    from . import views
    urlpatterns = [
    path('articles/2003/', views.special_case_2003),
    path('articles//', views.year_archive),
    path('articles///', views.month_archive),
    path('articles////', views.article_detail),
    ]

    View Slide

  25. 外部サービスに注意
    Service A Service B
    Proxy
    Ext.
    Service X
    Service C Service D
    サーキットブレーカーがない で Service B 実装を頑張る
    Ours Customer’s
    HTTP/1.1
    REST API
    XML
    etc.

    View Slide

  26. Kubernetesをもっと身近に
    全ソフトウェアエンジニアがKubernetesで動くアプリを開発でき
    るように

    View Slide

  27. Case study #2
    GitLab (OSS)

    View Slide

  28. GitLab: Railsアプリ + 複数M/W
    All-in-one packages
    (rpms, debs)
    →そ ままイメージ化

    View Slide

  29. Cloud-native化
    Gitオペレーションがfilesystem
    にべったり 実装
    →垂直分割
      gRPC (Go)で実装
    →クライアント側: grpc-ruby
     →重たい(少しツラい)
    https://dzone.com/articles/3-lessons-from-transitioning-a-monolith-to-cloud-n

    View Slide

  30. Services & Pods
    https://about.gitlab.com/handbook/infrastructure/production-architecture/

    View Slide

  31. Case study #3
    GitHub (github.com)

    View Slide

  32. k8s migration of API & Web of github.com
    Kubernetes Meetup Tokyo #9
    https://speakerdeck.com/tnir/kubecon-tips-and-kubernetes-at-github

    View Slide

  33. Connect with Community

    View Slide

  34. コミュニティと 関わり
    ● 社内で一人孤立奮闘・・・頼り ドキュメント
    ● オーガナイザ
    ○ Kamiyacho.k8s
    ○ Prometheus Tokyo
    ○ GitLab Tokyo & GitLab.JP
    ○ Cloud Native Ambassadors
    ○ Docker Tokyo
    ● 参加者
    ○ 多数 コミュニティ
    ● 今同じような人がいれ ぜひコミュニティへご参加を!

    View Slide

  35. Summary
    1. どんなワークロードもKubernetesで実行できる世界を目指
    しましょう(アプリ cloud native化)
    2. Cloud nativeなアプリを開発していける仕組み化が重要
    3. スタートとして“microservices”に拘らないことも大事
    4. コミュニティ 皆さまに支えられてやってこれ、社内 コンテ
    ナ標準化ができた

    View Slide

  36. View Slide