Slide 1

Slide 1 text

Cloud Native プロダクト 1000本ノック Cloud Native Meetup Tokyo  青山 真也(@amsy810)  高石 諒(@r_takaishi)  斎藤 和史 (@capsmalt)

Slide 2

Slide 2 text

No content

Slide 3

Slide 3 text

What is ? CNCF Cloud Native Defenition v1.0, CNCF, 2018-11-28 (https://github.com/cncf/toc/blob/master/DEFINITION.md) Cloud Native に近しい技術 や CNCF がホストするプロジェクト について共有し合う会です! 昨今はコンテナ関係のエコシステムが大量に増えてきましたが、 それらの技術検証結果などを発表しあう場として利用していきたいと思っており、 仲間を募集しております。

Slide 4

Slide 4 text

CNCF の公式 Meetup に認定されました http://bit.ly/cncfmeetupjp から メンバー登録お願いいたします。

Slide 5

Slide 5 text

Special Thanks to speakers Kawamitsu Hayahito Mizuno Seiya @tnir @hhiroshell @watawuwu @bgpat_ @y_taka_23 @jyoshise @takaz @ken5scal @Ladicle @lizan

Slide 6

Slide 6 text

Special Thanks to video distributor https://crash.academy/community/cloudnativemeetup

Slide 7

Slide 7 text

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.

Slide 8

Slide 8 text

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なシステムを実現

Slide 9

Slide 9 text

データストア系 ● Vitess ● NATS ● Rook ● TiKV X as a Service

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

Service Mesh ● Istio ● Linkerd ● Linkerd v2 (Conduit) for microservice architecture

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

Linkerd & Conduit ● CNCFがホストするプロダクト ● Conduit > Linkerd v2 に名前を変えた ● Conduitは現状ではモニタリングツール ○ トラフィックの制御などはできない ● Twitter、PagerDuty、Pinterest、Tumblr などが Linkerd v1をプロダクションで利用

Slide 20

Slide 20 text

CI/CD ● Istio ● Linkerd ● Linkerd v2 (Conduit) X as a Service

Slide 21

Slide 21 text

Spinnaker ● https://github.com/spinnaker/spinnaker ● Netflixが開発した継続的デリバリツール(CD) ● Kubernetes Provider ○ v1: UIなどで設定した値を元に CD ○ v2: Manifestを元にCDが可能 ● ● 詳しく showKs のブースに来て見てください

Slide 22

Slide 22 text

Weave Flux ● https://github.com/weaveworks/flux ● GitOpsを実現するためのソフトウェア

Slide 23

Slide 23 text

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/

Slide 24

Slide 24 text

Machine Learning ● Kubeflow X as a Service

Slide 25

Slide 25 text

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/

Slide 26

Slide 26 text

開発サポート ● Telepresence (Sandbox) ● Skaffold

Slide 27

Slide 27 text

Telepresence ● https://www.telepresence.io/ ● 2018年5月にSandbox入り ● Kubernetes上で動かすサービスを高速に開発するためのツール ● あるコードが様々なサービスに依存する時、依存サービスはKubernetesで動か し、コードはローカルで開発・動かして動作確認できる ● IDEやデバッガなど、ローカルにあるツールを利用できる ● 利用例 ○ Rails開発 ○ MySQLなどミドルウェアはKubernetesで動かし、Rails自体はローカルで動かす

Slide 28

Slide 28 text

Telepresence svc: mysql pod: mysql pod: telepresence proxy Kubernetes local machine local process source code ビルド&実行 IDEやデバッガで開発 クラスタ内のサービスにクラスタ内DNS で名前解決してアクセス可能 TCP接続、環境変数、ボリュームなどを ローカルプロセスへプロキシ DNSコールとTCP接続がクラスタへ ルーティング telepresence client

Slide 29

Slide 29 text

skaffold ● https://github.com/GoogleContainerTools/skaffold ● Kubernetes上の開発を簡単に継続して行うためのツール ● イメージのビルド・プッシュ・デプロイを自動化する ● CI/CDパイプラインに組み込むこともできる ● SkaffoldでKubernetesネイティブな開発環境を作ってみた ● 早川 博 @ hhiroshell ● https://speakerdeck.com/hhiroshell/skaffolddekubernetesneiteibunakai-fa-huan-jing-wozuo-tutemita

Slide 30

Slide 30 text

パッケージ・マニ フェスト管理 ● Helm (Incubating) ● Kssonet ● Kustomize

Slide 31

Slide 31 text

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もインストール可能

Slide 32

Slide 32 text

ksonnet ● https://ksonnet.io/ ● jsonnetを使ったマニフェストファイル生成フレームワーク ○ jsonnet:jsonを拡張したデータテンプレート言語 ● モジュールを用いた再利用性 ● 環境個別の設定や値を上書きできる ● パッケージの概念を持つ ○ v0.12以上はHelm Chartレジストリをサポート。パラメータも渡せる

Slide 33

Slide 33 text

Kustomize ● https://github.com/kubernetes-sigs/kustomize ● Kubetnetesのマニフェストをカスタマイズするためのツール ○ パッケージマネージャーとは少し違う ● kustomization.yaml + リソースファイル群 => マニフェストのyaml ○ deployment.yaml ○ service.yaml ○ configMapとして扱いたいファイル ● productionやstagingで異なる設定は上書きすることができる ○ CPU ○ レプリカ数

Slide 34

Slide 34 text

RPC ● gRPC (Incubating)

Slide 35

Slide 35 text

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

Slide 36

Slide 36 text

Logging ● Fluentd (Incubating) ● FluentBit

Slide 37

Slide 37 text

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

Slide 38

Slide 38 text

Monitoirng ● Prometheus(Graduated) ● Cortex(Sandbox) ● Thanos Prometheus Family

Slide 39

Slide 39 text

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

Slide 40

Slide 40 text

Cortex ● https://github.com/cortexproject/cortex ● 2018年9月にSandboxとしてCNCFにジョイン ● Prometheus as a Service ○ マルチテナント環境で Prometheusを簡単に扱う ○ 長期間のログ保存を実現する https://medium.com/weaveworks/what-is-cortex-2c30bcbd247d

Slide 41

Slide 41 text

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

Slide 42

Slide 42 text

Container Runtime ● containerd ● rkt

Slide 43

Slide 43 text

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)

Slide 44

Slide 44 text

https://schd.ws/hosted_files/kccncchina2018english/a8/intro-slides.pdf containerd

Slide 45

Slide 45 text

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モードも可能)

Slide 46

Slide 46 text

Distributed Tracing ● OpenTracing ● Jaeger

Slide 47

Slide 47 text

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#

Slide 48

Slide 48 text

OpenTracing ● 取得したSpan情報は対応トレーサーで表示 (例えば,Jaegerなど) ● Microserviceや複合サービスのトレースを一元表示 https://www.jaegertracing.io/img/traces-ss.png

Slide 49

Slide 49 text

Jaeger ● https://github.com/jaegertracing/jaeger ● https://www.jaegertracing.io/ ● OpenTracing API対応の分散トレーサー (読み方: イェィガー) ● 分散トレーシング機能 ○ OpenTracing API対応アプリからのトレース情報を受け付ける ○ トレース情報を表示 ○ Prometheusにメトリクスを提供 ○ Zipkinと後方互換 (トレース情報を受け付ける )

Slide 50

Slide 50 text

Jaeger OpenTracing APIで トレース記録 (Zipkin API可) トレース情報を保管 (CassandraやElasticsearch) https://www.jaegertracing.io/img/traces-ss.png

Slide 51

Slide 51 text

Policy ● Open Policy Agent

Slide 52

Slide 52 text

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

Slide 53

Slide 53 text

Open Policy Agent ● 例: ポリシー ==> 「Bob は自分の給料を確認できるが,他人は不可」 https://www.openpolicyagent.org/docs/how-does-opa-work.html#overview

Slide 54

Slide 54 text

Software Update Spec & Security ● TUF / Notary

Slide 55

Slide 55 text

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

Slide 56

Slide 56 text

TUF/Notary https://github.com/theupdateframework/notary/blob/master/docs/service_architecture.md

Slide 57

Slide 57 text

Service Discovery ● CoreDNS

Slide 58

Slide 58 text

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/

Slide 59

Slide 59 text

CoreDNS https://www.cncf.io/wp-content/uploads/2017/11/Introduction-to-CoreDNS-1.pdf

Slide 60

Slide 60 text

Registry ● Harbar

Slide 61

Slide 61 text

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

Slide 62

Slide 62 text

Harbar https://www.cncf.io/category/blog/page/5/

Slide 63

Slide 63 text

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

Slide 64

Slide 64 text

No content

Slide 65

Slide 65 text

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