Cloud Native プロダクト 1000本ノック from Cloud Native Meetup Tokyo at Japan Container Days v18.12 / jkd1812_cloudnativemeetup

Cloud Native プロダクト 1000本ノック from Cloud Native Meetup Tokyo at Japan Container Days v18.12 / jkd1812_cloudnativemeetup

Cloud Native プロダクト 1000本ノック
from Cloud Native Meetup Tokyo
at Japan Container Days v18.12

Cloud Native Meetup Tokyo
 青山 真也(@amsy810)
 高石 諒(@r_takaishi)
 斎藤 和史 (@capsmalt)

Cloud NativeなプロダクトはCNCF公式のものだけでも26個、更にKubernetes周辺のエコシステムを含めるとその数は膨大です。本セッションでは、様々なOSSについて多岐にわたって紹介し、Kubernetesを中心として取り巻くエコシステムを知ることで、今後のCloud Nativeな開発について考えます。また、どのようなOSSがあるのかを知りたい方にも有用です。(1000個は紹介しません)

De266761b955b2636e454a1bc7a99ed4?s=128

Masaya Aoyama (@amsy810)

December 05, 2018
Tweet

Transcript

  1. Cloud Native プロダクト 1000本ノック Cloud Native Meetup Tokyo  青山 真也(@amsy810)

     高石 諒(@r_takaishi)  斎藤 和史 (@capsmalt)
  2. None
  3. What is ? CNCF Cloud Native Defenition v1.0, CNCF, 2018-11-28

    (https://github.com/cncf/toc/blob/master/DEFINITION.md) Cloud Native に近しい技術 や CNCF がホストするプロジェクト について共有し合う会です! 昨今はコンテナ関係のエコシステムが大量に増えてきましたが、 それらの技術検証結果などを発表しあう場として利用していきたいと思っており、 仲間を募集しております。
  4. CNCF の公式 Meetup に認定されました http://bit.ly/cncfmeetupjp から メンバー登録お願いいたします。

  5. Special Thanks to speakers Kawamitsu Hayahito Mizuno Seiya @tnir @hhiroshell

    @watawuwu @bgpat_ @y_taka_23 @jyoshise @takaz @ken5scal @Ladicle @lizan
  6. Special Thanks to video distributor https://crash.academy/community/cloudnativemeetup

  7. What is Cloud Native? CNCF Cloud Native Defenition v1.0, CNCF,

    2018-11-28 (https://github.com/cncf/toc/blob/master/DEFINITION.md) Cloud native technologies empower organizations to build and run scalable applications in modern, dynamic environments such as public, private, and hybrid clouds. Containers, service meshes, microservices, immutable infrastructure, and declarative APIs exemplify this approach. These techniques enable loosely coupled systems that are resilient, manageable, and observable. Combined with robust automation, they allow engineers to make high-impact changes frequently and predictably with minimal toil. The Cloud Native Computing Foundation seeks to drive adoption of this paradigm by fostering and sustaining an ecosystem of open source, vendor-neutral projects. We democratize state-of-the-art patterns to make these innovations accessible for everyone.
  8. What is Cloud Native? CNCF Cloud Native Defenition v1.0, CNCF,

    2018-11-28 (https://github.com/cncf/toc/blob/master/DEFINITION.md) Cloud native technologies empower organizations to build and run scalable applications in modern, dynamic environments such as public, private, and hybrid clouds. Containers, service meshes, microservices, immutable infrastructure, and declarative APIs exemplify this approach. These techniques enable loosely coupled systems that are resilient, manageable, and observable. Combined with robust automation, they allow engineers to make high-impact changes frequently and predictably with minimal toil. The Cloud Native Computing Foundation seeks to drive adoption of this paradigm by fostering and sustaining an ecosystem of open source, vendor-neutral projects. We democratize state-of-the-art patterns to make these innovations accessible for everyone. •疎結合なシステム •復元力がある •管理しやすい •可観測である •堅牢な自動化により、頻繁かつ期待通りに最 小限の労力で大きな変更が可能 OpenかつScalableなシステムを実現
  9. データストア系 • Vitess • NATS • Rook • TiKV X

    as a Service
  10. X as a Service • Kubernetes上に X as a Serviceを展開するソフトウェア

    ◦ CRD + Operatorで管理できるものが多い MySQL as a Service Queue as a Service Storage as a Service KVS as a Service CNCF incubating CNCF sandbox
  11. Vitess • https://github.com/vitessio/vitess • シャーディングすることでMySQLをスケーラブルに扱うDBシステム • Youtubeによって開発された ◦ 2011年にProduction Release

    VTgate Shard-1 Shard-2 Shard-N MySQL Master MySQL Slave MySQL Slave MySQL Master MySQL Slave MySQL Slave MySQL Master MySQL Slave MySQL Slave • Vitess とクラウド時代の RDB について • 高澤 晃行 @takaz (Twitter) • https://www.slideshare.net/capsmalt/vitessrdb
  12. NATS • https://github.com/nats-io/nats-operator • Queue as a Service • Go言語性のメッセージングソフトウェア

    • 様々なメッセージングモデルが利用可能 • データストリーミングを行う NATS streamingもある NATS NATS NATS NATS Cluster publish subscribe • with NATS with Kubernetesの世界へ • Hayahito Kawamitsu • https://www.slideshare.net/hayahitokawamitsu/with-nats-with-kubernetes
  13. Rook • https://github.com/rook/rook • Storage as a Service提供する ◦ Ceph

    (block storage, object storage, shared file system) ◦ CockroachDB ◦ Minio ◦ NFS • Ceph Operatorを使うことで、ほぼ全ての種類の ストレージサービスをKubernetes上に展開することが可能 • Rookの今とこれから • 吉瀬 淳一 @jyoshise (Twitter) • https://www.slideshare.net/JunichiYoshise/rookcloudnative-meetup-3
  14. TiKV • https://github.com/tikv/tikv • KVS as a Service • CNCF

    の Sandbox Project RocksDB RocksDB RocksDB Raft Group RocksDB Region 1 Region 1 Region 1 Region 2 Region 2 Region 2
  15. Service Mesh • Istio • Linkerd • Linkerd v2 (Conduit)

    for microservice architecture
  16. ServiceMesh & Istio / Linkerd / Conduit • Microservice Architectureではサービス間通信が複雑

    • Observability • Traffic Shifting (Canary, etc) • Circuit Braker • Rate Limit • Fault Injection • mTLS • Distributed Tracing Istioの例 • ServiceMeshと仲間たち 〜Istio & Coduit & Linkerd〜 • 青山 真也 @amsy810 (Twitter) • https://speakerdeck.com/masayaaoyama/servicemesh-tozhong-jian-tati -istio-and-conduit-and-linkerd-at-cloud-native-meetup-tokyo-number-1
  17. istio For production GA Alpha GA Contributors 286+ 37+ 88+

    Commits 6200+ 900+ 1300+ Stars 13500+ 2900+ 4700+ Codes 303 ksteps 82 ksteps 172 ksteps Released at 2017-05 (GA: 2018-07) 2017-12 2016-01 (GA: 2017-04) Latest version 1.1.0 edge-18.11 1.5.2 Base technology Envoy (C++) ConduitProxy (Rust) Linkerd (Scala) Configration Method CRD (K8s resource) Conduit CLI namerctl (CLI) ServiceMesh & Istio / Linkerd / Conduit
  18. Istio (Envoy) • CNCFがホストするEnvoyプロキシを使用(Graduated Project) • CRDを使って制御 複数のK8sクラスタを纏める Service Meshを構成可能

    K8sクラスタ+VMも延伸可能 • Istio 1/0 と Envoy の開発最前線 • Lizan Zhou @lizan (Twitter) • https://docs.google.com/presentation/d/1DOvrP3jhUurK3E1NtG2DcRd 31qeW65rj98vsspCAY7c/edit
  19. Linkerd & Conduit • CNCFがホストするプロダクト • Conduit > Linkerd v2

    に名前を変えた • Conduitは現状ではモニタリングツール ◦ トラフィックの制御などはできない • Twitter、PagerDuty、Pinterest、Tumblr などが Linkerd v1をプロダクションで利用
  20. CI/CD • Istio • Linkerd • Linkerd v2 (Conduit) X

    as a Service
  21. Spinnaker • https://github.com/spinnaker/spinnaker • Netflixが開発した継続的デリバリツール(CD) • Kubernetes Provider ◦ v1:

    UIなどで設定した値を元に CD ◦ v2: Manifestを元にCDが可能 • • 詳しく showKs のブースに来て見てください
  22. Weave Flux • https://github.com/weaveworks/flux • GitOpsを実現するためのソフトウェア

  23. Argo • https://github.com/argoproj/argo • CRDを利用してワークフロー設定を記述 • Kubeflowの内部でも利用されている • 豊富なExamplesが置いてある ◦

    https://github.com/argoproj/argo/tree/master/examples • 実際は様々なプロジェクト ◦ argo (workflow) ◦ argo-cd ◦ argo-events • コンテナネイティブなワークフローエンジン Argo • Wataru Matsui @watawuwu (Twitter) • https://speakerdeck.com/watawuwu/getting-started-with-argo-1 • Introduction to Argo • メルカリ 上田さん • https://www.slideshare.net/shunyaueta/introduction-to-argo-116672516 ?ref=https://cloudnative.connpass.com/event/100600/presentation/
  24. Machine Learning • Kubeflow X as a Service

  25. Kubeflow • Kubernetes上にML基盤を展開するサービス • 既存の様々なOSSを組み合わせている • 純粋なKubeflowのコンポーネントは Operator と Katib

    など • KubeCon Seattle で 1.0 の予定… • 対応しているML Framework ◦ Tensorflow ◦ PyTorch ◦ mxnet ◦ chainer ◦ caffe2 ◦ mpi • Concepts ◦ Simple ◦ Portable ◦ Scalable • Principles ◦ Open ◦ Low bar; high celling ◦ Kubernetes Native • Kubeflow Meetup • Katib - 大嶋さん • Kubeflow Operator - 大村さん • https://cloudnative.connpass.com/event/100600/
  26. 開発サポート • Telepresence (Sandbox) • Skaffold

  27. Telepresence • https://www.telepresence.io/ • 2018年5月にSandbox入り • Kubernetes上で動かすサービスを高速に開発するためのツール • あるコードが様々なサービスに依存する時、依存サービスはKubernetesで動か し、コードはローカルで開発・動かして動作確認できる

    • IDEやデバッガなど、ローカルにあるツールを利用できる • 利用例 ◦ Rails開発 ◦ MySQLなどミドルウェアはKubernetesで動かし、Rails自体はローカルで動かす
  28. Telepresence svc: mysql pod: mysql pod: telepresence proxy Kubernetes local

    machine local process source code ビルド&実行 IDEやデバッガで開発 クラスタ内のサービスにクラスタ内DNS で名前解決してアクセス可能 TCP接続、環境変数、ボリュームなどを ローカルプロセスへプロキシ DNSコールとTCP接続がクラスタへ ルーティング telepresence client
  29. skaffold • https://github.com/GoogleContainerTools/skaffold • Kubernetes上の開発を簡単に継続して行うためのツール • イメージのビルド・プッシュ・デプロイを自動化する • CI/CDパイプラインに組み込むこともできる •

    SkaffoldでKubernetesネイティブな開発環境を作ってみた • 早川 博 @ hhiroshell • https://speakerdeck.com/hhiroshell/skaffolddekubernetesneiteibunakai-fa-huan-jing-wozuo-tutemita
  30. パッケージ・マニ フェスト管理 • Helm (Incubating) • Kssonet • Kustomize

  31. Helm • https://github.com/helm/helm • 2016年2月にリリース、2018年1月にCNCFでホスト • Kubernetes用のパッケージマネージャ ◦ aptやyum、Chef、Puppetが近い •

    CLIツールとしてhelm、Kubernetes側で動かすサーバーとしてTillerが必要 ◦ helm v3でTillerが不要になるとのこと • stableなパッケージが243個 ◦ nats、linkerd、prometheus、envoyといったCNCF Productもインストール可能
  32. ksonnet • https://ksonnet.io/ • jsonnetを使ったマニフェストファイル生成フレームワーク ◦ jsonnet:jsonを拡張したデータテンプレート言語 • モジュールを用いた再利用性 •

    環境個別の設定や値を上書きできる • パッケージの概念を持つ ◦ v0.12以上はHelm Chartレジストリをサポート。パラメータも渡せる
  33. Kustomize • https://github.com/kubernetes-sigs/kustomize • Kubetnetesのマニフェストをカスタマイズするためのツール ◦ パッケージマネージャーとは少し違う • kustomization.yaml +

    リソースファイル群 => マニフェストのyaml ◦ deployment.yaml ◦ service.yaml ◦ configMapとして扱いたいファイル • productionやstagingで異なる設定は上書きすることができる ◦ CPU ◦ レプリカ数
  34. RPC • gRPC (Incubating)

  35. gRPC • https://grpc.io/ • HTTP/2をサポートするRPCフレームワーク • Googleが2015年に発表、2017年にCNCFでホスト • C++/Java/Python/Go/Ruby/etc… 様々な言語に対応

    ◦ Protocol Bufferを経由することで各種言語用コードを生成可能 • SSL/TLS、Googleを使ったトークンベース認証をサポート ◦ 認証の拡張も可能 ◦ ALTS(Application Layer Transport Security)のための拡張が行われていたりする ▪ https://godoc.org/google.golang.org/grpc/credentials/alts
  36. Logging • Fluentd (Incubating) • FluentBit

  37. Fluentd / FluentBit • Fluentd ◦ https://www.fluentd.org/ ◦ 2011年にリリース、2016年11月にCNCFにジョイン ◦

    Rubyで書かれたログコレクタ・プロセッサー・アグリゲーター ◦ プラグインで拡張可能。 rubygems.org上には約900個のプラグインがある • FluentBit ◦ https://fluentbit.io/ ◦ Cで書かれたログコレクタ・プロセッサー ◦ プラガブルなアーキテクチャ(現在は約 30種類) ◦ Fluentdより軽量。IoTやコンテナ内利用が期待できる • Fluentd1.2 & Fluent Bit • 水野 聖也 @ saint1991 (GitHub) • https://www.slideshare.net/seiyamizuno35/fluentd12-fluent-bit-97985725
  38. Monitoirng • Prometheus(Graduated) • Cortex(Sandbox) • Thanos Prometheus Family

  39. Prometheus • https://prometheus.io/ • 2012年リリース、2016年5月にCNCFに寄贈 ◦ 2018年8月にGraduated Projectへ • システムモニタリング・アラートのためのソフトウェア

    • PrometheusでKubernetesの高速オートスケールを実現した話 • Atsushi Tanaka @bgpat • https://speakerdeck.com/bgpat/prometheusdekubernetesfalsegao-su-otosukeruwoshi-xian-sitahua Prometheus Server Exporter Grafana Alert Manager PromQL push alerts Mailなど notify pull metrics
  40. Cortex • https://github.com/cortexproject/cortex • 2018年9月にSandboxとしてCNCFにジョイン • Prometheus as a Service

    ◦ マルチテナント環境で Prometheusを簡単に扱う ◦ 長期間のログ保存を実現する https://medium.com/weaveworks/what-is-cortex-2c30bcbd247d
  41. Thanos • https://github.com/improbable-eng/thanos • 長期間のデータ保持を可能にする高可用 Prometheus ◦ 古いデータはAWS S3やGCS Bucketに保存する

    ◦ 圧縮、ダウンサンプリングなどにより期間の長いクエリ応答性を向上させる ◦ Global Query View • Thanosってどうですか? • Wataru Matsui @watawuwu • https://speakerdeck.com/watawuwu/getting-started-with-thanos https://improbable.io/games/blog/thanos-prometheus-at-scale
  42. Container Runtime • containerd • rkt

  43. containerd • https://github.com/containerd/containerd , https://containerd.io • 多機能かつ開発が盛んなコンテナランタイム ◦ コンテナのライフサイクル管理など •

    Mobyプロジェクトであり,かつCNCFプロジェクト ◦ DockerのコアランタイムとしてDocker社によって開発 ◦ 2017/3月にCNCFに寄贈 • 2018/4月リリースの containerd v1.1から CRI(Kubernetes Container Runtime Interface)にネイティブ対応し ,kubeletから直接管理可能に。 ▪ 現在の最新バージョンは 1.2 (as of 2018/11/27)
  44. https://schd.ws/hosted_files/kccncchina2018english/a8/intro-slides.pdf containerd

  45. rkt • https://github.com/rkt/rkt • CoreOS社が主導開発しているコンテナランタイム ※2018/1月RedHat社がCoreOS社を買収 ◦ シンプルなプロセスモデル ▪ 管理用デーモンが不要 ▪

    rktは単なるコマンド,デフォルトでsystemdがコンテナを管理 ◦ Podのネイティブサポート ▪ 複数コンテナを rkt run すると Pod込で起動 ▪ コンテナの隔離レベルを選択可 • systemd/nspawn • fly • kvm ▪ Pod内コンテナはimmutable (CRI対応のためmutableモードも可能)
  46. Distributed Tracing • OpenTracing • Jaeger

  47. OpenTracing • https://github.com/opentracing • https://opentracing.io/ • 分散トレーシング用のオープンな仕様と,標準APIを提供 • 対応トレーサー ◦

    Jaeger, Zipkin, LightStep, Instana, Apache Skywalking, inspectIT, stagemonitor, Datadog • 多くの言語に対応 ◦ Go, JavaScript, Java, Python, Ruby, PHP, Objective-C, C++, C#
  48. OpenTracing • 取得したSpan情報は対応トレーサーで表示 (例えば,Jaegerなど) • Microserviceや複合サービスのトレースを一元表示 https://www.jaegertracing.io/img/traces-ss.png

  49. Jaeger • https://github.com/jaegertracing/jaeger • https://www.jaegertracing.io/ • OpenTracing API対応の分散トレーサー (読み方: イェィガー)

    • 分散トレーシング機能 ◦ OpenTracing API対応アプリからのトレース情報を受け付ける ◦ トレース情報を表示 ◦ Prometheusにメトリクスを提供 ◦ Zipkinと後方互換 (トレース情報を受け付ける )
  50. Jaeger OpenTracing APIで トレース記録 (Zipkin API可) トレース情報を保管 (CassandraやElasticsearch) https://www.jaegertracing.io/img/traces-ss.png

  51. Policy • Open Policy Agent

  52. Open Policy Agent (OPA) • https://github.com/open-policy-agent/opa • https://www.openpolicyagent.org • ポリシーベースでクラウドネイティブ環境を制御

    ◦ 軽量で汎用ポリシーエンジン ◦ サイドカー,ホストレベルのデーモン,またはライブラリとして OPAを統合可能 ◦ API呼び出し可能 ◦ ポリシーは,Rego (DSL)で記載 • 使われ方 ◦ Docker,Kubernetes,Istio,Terraformなど各種オープンソース製品と統合し,各種リソースへ のポリシー制御を行うことが可能 • Open Policy Agent is 何? • Kengo Suzuki @ken5scal (Twitter) • https://speakerdeck.com/ken5scal/introduction-to-open-policy-agent
  53. Open Policy Agent • 例: ポリシー ==> 「Bob は自分の給料を確認できるが,他人は不可」 https://www.openpolicyagent.org/docs/how-does-opa-work.html#overview

  54. Software Update Spec & Security • TUF / Notary

  55. TUF/Notary • https://github.com/theupdateframework/specification • https://github.com/theupdateframework/notary • クロスプラットフォームで信頼性の高いコンテンツ配信を実現 ◦ 公開鍵暗号によるコンテンツの内容を保証 ◦

    安全な署名付きイメージの公開 • TUF (The Update Framework) ◦ 大規模ソフトウェア配布のフレームワークを提供 • Notary ◦ TUFをベースにした強力な暗号署名を使用したコンテナイメージなどのデジタルコンテンツの信 頼性を提供するようにデザイン ◦ Docker Content Trust機能に実装され,ユーザーは追加コマンド等が不要で今まで通り “docker pull/push/run等” の操作が可能 • Update とは何かそして何であるべきか • チェシャ猫 @y_taka_23 (Twitter) • https://speakerdeck.com/ytaka23/cloud-native-meetup-tokyo-2nd
  56. TUF/Notary https://github.com/theupdateframework/notary/blob/master/docs/service_architecture.md

  57. Service Discovery • CoreDNS

  58. CoreDNS • https://github.com/coredns/coredns • https://coredns.io/ • 高速かつ柔軟なDNSサーバー ◦ Go言語で書かれており,軽量 ◦

    DNS機能を実行するための多数のプラグインが用意されている ◦ サービスディスカバリーとしての活用も可能 ▪ SkyDNSと互換があり,etcdをバックエンドとした DNSサーバーとして動作 • Kubernetesで利用 ◦ 1.11から KubernetesにおけるDNSのデフォルトに!! ◦ Kube-DNSからの移行は下記手順を参照 ▪ https://kubernetes.io/docs/tasks/administer-cluster/coredns/
  59. CoreDNS https://www.cncf.io/wp-content/uploads/2017/11/Introduction-to-CoreDNS-1.pdf

  60. Registry • Harbar

  61. Harbor • https://github.com/goharbor/harbor • https://goharbor.io/ • オープンソースのクラウドネイティブ・レジストリー ◦ Dockerイメージ/Helmチャートに対するプライベート・レジストリー ◦

    Dockerイメージの脆弱性スキャン,署名検証機能 ◦ LDAP/AD連携とロールベースのアクセス制御によるコンテンツ保護 ◦ ポリシーベースのイメージレプリケーション ◦ Web UIも提供 (視覚的なDockerイメージ管理) • Kubernetes へのデプロイ ◦ Helmで簡単導入が可能 ▪ https://github.com/goharbor/harbor-helm
  62. Harbar https://www.cncf.io/category/blog/page/5/

  63. そのほか ここまで 32 個 ここから 499 個 行きます!

  64. None
  65. We will provide presentation opportunity. 技術検証などが好きな方をお待ちしております。 下記のページからぜひお申し込みください。 https://docs.google.com/forms/d/e/1FAIpQLSeWEAWMlDxs_8yxcMc0pBwENjR6sy53j VCeGK_ctGsUmeg7A/viewform