Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

@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 プロポーザルレビュアー 公式サイト レスポンシブ対応

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

What is Cloud Native?

Slide 6

Slide 6 text

“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/

Slide 7

Slide 7 text

CNCF

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

Certification (Kuberentes)

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

Definition of Cloud Native?

Slide 14

Slide 14 text

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/ ● 「クラウド 提供するアジリティをビジネス加速に役立てる」 →ややエンタープライズ寄り?

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

Case study #1 iRidge

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

技術選択(ツール) 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

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

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/

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

(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), ]

Slide 25

Slide 25 text

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

Slide 26

Slide 26 text

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

Slide 27

Slide 27 text

Case study #2 GitLab (OSS)

Slide 28

Slide 28 text

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

Slide 29

Slide 29 text

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

Slide 30

Slide 30 text

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

Slide 31

Slide 31 text

Case study #3 GitHub (github.com)

Slide 32

Slide 32 text

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

Slide 33

Slide 33 text

Connect with Community

Slide 34

Slide 34 text

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

Slide 35

Slide 35 text

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

Slide 36

Slide 36 text

No content