Slide 1

Slide 1 text

Masaya Aoyama CyberAgent adtech studio KubernetesͱCloud Nativeͷ ݱࡏͱະདྷ @Adtech Developer Conference MasayaAoyama @amsy810

Slide 2

Slide 2 text

Japan Container Days v18.04 Keynote 登壇 Cloud Native Meetup Tokyo Organizer (+ KubeCon日本人会 + JKD) CKA #138、CKAD #2 連載「今こそ始めよう!Kubernetes 入門」 @ThinkIT OpenStack / Kubernetes Contributor Masaya Aoyama (@amsy810) Infrastructure Engineer

Slide 3

Slide 3 text

Promising Kubernetes

Slide 4

Slide 4 text

Public Cloud Kubernetes Platform with Cloud Provider 現状最も安定しているKubernetes環境 GPU Kubernetes なども提供している Google Kubernetes Engine (GKE) Google Cloud Platform …? Azure Container Service (AKS) Microsoft Azure AWS IAM Roleとの連携 AWS VPC とのネイティブな連携 Elastic Container Service for K8s (EKS) Amazon Web Service ベアメタルKubernetesが利用可能 IBM Cloud Container Service IBM Cloud

Slide 5

Slide 5 text

No content

Slide 6

Slide 6 text

KubeCon 2017 NA以降、5000名〜 日本からは 45 名〜が参加 (2016 EU 3 名〜、2017 NA: 33 名〜) 日本交流会@コペンハーゲン現地 KubeCon China はKubernetes/* org に コントリビュートすればチケットはタダ!

Slide 7

Slide 7 text

What is Kubernetes?

Slide 8

Slide 8 text

Cloud Native for the future w/ K8s アプリケーション基盤としてのKubernetes 従来どおりコンテナを載せて Scalableなアプリケーションの実行環境 フレームワークとしてのKubernetes Clustom Resource DefinitionとCustom Controllerによる API Resourceのライフサイクル管理 XaaSプラットフォームとしてのKubernetes マネージド・サービス基盤としてのKubernetes XaaS、Serverless platform w/ Kuebrnetes

Slide 9

Slide 9 text

Application Platform

Slide 10

Slide 10 text

今だと…(一番酷い場合) 何かするときはロードバランサからVMを外して、 アプリケーションのアップデートはJenkins叩いて (もちろんコードで管理とかされてなくて) 障害があったら自分で直して、 データはいい感じに渡してあげたり 永続化ボリュームも自分でアタッチしてあげたり スケーリングとスケジューリングも… あとはお手製スクリプトで…

Slide 11

Slide 11 text

複数のKubernetes Nodeの 管理 コンテナのスケジューリング ローリングアップデート スケーリング / オートスケーリング コンテナの死活監視 障害時のセルフヒーリング サービスディスカバリ ロードバランシング データの管理 ログの管理 Infrastructure as Code その他エコシステムとの連携や拡張

Slide 12

Slide 12 text

Framework for Kubernetes Native Application

Slide 13

Slide 13 text

Kubernetes feature リソースの管理 変更の検知 Controllerの冗長化 etc…

Slide 14

Slide 14 text

CustomResourceDefinition (CRD) 構造体のチェック バージョンコントロールの仕組み kubectl get 時のカラム制御 Custom Controller (Operator) ステートフルなアプリケーションを よしなに管理してくれるコントローラ CustormResourceDefinitionと Custom Controller(Operator)を 簡単に作るための枠組み Operator Framework apiVersion: db.io/v1 kind: MyDB metadata: name: sample-db spec: size: 10G type: mysql version: 5.6 … Kubernetes CRD(MyDB)作って DBの作成と管理

Slide 15

Slide 15 text

Nginx Ingress Controller Wrapper GKE-like Ingress Controller Create Ingress Resource GKE ingress controller Create Ingress Resource Create Ingress Controller Deployment Create HorizontalPodAutoscaler Create LoadBalancer Service Rewrite Ingress status for IP Addr nginx/nghttpx ingress controller 参考: https://adtech.cyberagent.io/techblog/archives/3758 「オンプレでも GKE Like な Ingress を使うために 自作 Ingress Controller を実装してみた」 Create Google Cloud Load Balancer Rewrite Ingress status for IP Addr Auto provisioning

Slide 16

Slide 16 text

Nginx Ingress Controller Wrapper GKE-like Ingress Controller Create Ingress Resource GKE ingress controller Create Ingress Resource Create Ingress Controller Deployment Create HorizontalPodAutoscaler Create LoadBalancer Service Rewrite Ingress status for IP Addr AKE ingress controller 参考: https://adtech.cyberagent.io/techblog/archives/3758 「オンプレでも GKE Like な Ingress を使うために 自作 Ingress Controller を実装してみた」 Auto provisioning Create Google Cloud Load Balancer Rewrite Ingress status for IP Addr Auto provisioning

Slide 17

Slide 17 text

余談: “type: LoadBalancer” Serviceの実装 “type: LoadBalancer” with HW Load Balancer Kubernetes CloudProviderが機能を提供 = GCP、AWS、Azure などの実装しか無い  (OpenStackはあるけどアドテクじゃ使い物にならないSoftware LB仕様) AKEではKubernetesのソースを改変して、 CloudProvider連携を独⾃実装  ・BIG-IPの操作 > HW LoadBalancerによる⾼速なL4 LB  ・Ingress(L7 LB)も実装できるんだけどな…   参考: https://developers.cyberagent.co.jp/blog/archives/12058/ 「GKE 互換のオンプレコンテナ基盤 AKE (Adtech Container Engine) 誕⽣秘話とアーキテクチャ完全公開!」

Slide 18

Slide 18 text

XaaS Platform

Slide 19

Slide 19 text

with CustomResourceDefinition and Operator Kubernetes Native XaaS Solution Ceph as a Service Rook MySQL as a Service Vitess Queue as a Service NATS ML as a Service Kubeflow 内部ではOperatorが使われており、Operatorがよしなにステートフルなアプリケーションを管理

Slide 20

Slide 20 text

apiVersion: "nats.io/v1alpha2" kind: "NatsCluster" metadata: name: "example-nats-cluster" spec: size: 3 version: "1.1.0” … Queue as a Service 開発者 Kubernetes NatsCluster リソースの登録 NATS Operator リソースの登録を検知 StetafulSetでQueueクラスタをデプロイ 変更要求 よしなにマネジメント リソースをWatch

Slide 21

Slide 21 text

apiVersion: "nats.io/v1alpha2" kind: "NatsCluster" metadata: name: "example-nats-cluster" spec: size: 3 version: "1.1.0” … Queue as a Service 開発者 Kubernetes NatsCluster リソースの登録 NATS Operator リソースの登録を検知 StetafulSetでQueueクラスタをデプロイ 変更要求 よしなにマネジメント リソースをWatch Kubernetes上でマネージド・サービス相当の機能  = Kubernetes環境があればどこでも可

Slide 22

Slide 22 text

GCP Service Broker Google Cloud SQL Google Cloud Pub/Sub Amazon RDS Amazon Kinesis AWS Service Broker Open Service Broker API マニフェストの登録 開発者 apiVersion: servicecatalog.k8s.io/v1beta1 kind: ServiceInstance metadata: name: db spec: clusterServiceClassExternalName: cloud-sql-mysql clusterServicePlanExternalName: beta parameters: instanceId: sample-cloudsql databaseVersion: MYSQL_5_7 region: asia-northeast1

Slide 23

Slide 23 text

Cloud Native for the future w/ K8s アプリケーション基盤としてのKubernetes 従来どおりコンテナを載せて Scalableなアプリケーションの実行環境 フレームワークとしてのKubernetes Clustom Resource DefinitionとCustom Controllerによる API Resourceのライフサイクル管理 XaaSプラットフォームとしてのKubernetes マネージド・サービス基盤としてのKubernetes XaaS、Serverless platform w/ Kuebrnetes

Slide 24

Slide 24 text

“Open” and “Community”

Slide 25

Slide 25 text

CNCF and Standardization 01. コンテナランタイム コンテナイメージフォーマット コンテナイメージの配布 OCI 02. オーケストレーションエンジンと コンテナランタイム間の インターフェース CRI 03. コンテナとストレージ間の インターフェース CSI 04. コンテナとネットワーク間の インターフェース CNI

Slide 26

Slide 26 text

Future

Slide 27

Slide 27 text

Micro Service マイクロサービス毎に技術選定可能 gRPC, REST 等でマイクロサービス間を繋ぐことで、 各サービスの技術選定の自由度が高い デプロイが容易 小さい機能単位でデプロイが可能なため、高速かつ影響範囲が少ない 大規模な開発を加速させる 各部門が特定のマイクロサービスを開発することで全体が成り立つ 機能追加も比較的しやすい スケーリングが容易 特定の機能だけスケーリングさせるため効率が良い 障害が全体に波及しづらい 特定の機能に障害が起きた場合でも、 縮退した状態でサービス継続を行いやすい Golang Java Scala gRPC REST

Slide 28

Slide 28 text

Already comes 既に来ている分野 Service Mesh Istio はK8s上でService Meshを実現するためのプロダクト Microservice間のObserbilityの確保、 トラフィックの柔軟な制御を可能にする 2018-08 v1.0リリース(9/11 にEnvoyメンテナ来るよ)

Slide 29

Slide 29 text

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

Slide 30

Slide 30 text

国内最大のコンテナカンファレンス Call for Presentaiton募集中 8/31まで

Slide 31

Slide 31 text

newcomer 今後に注目している分野 Serverless ML platform Kubeflow はK8s上でML Platformを 構築するためのプロダクト 様々なOSSを組み合わせて実現 Knative はK8s上でServerlessを 実現するためのプロダクト (まだ未リリース情報がある)

Slide 32

Slide 32 text

Conclusion

Slide 33

Slide 33 text

Cloud Native for the future w/ K8s アプリケーション基盤としてのKubernetes 従来どおりコンテナを載せて Scalableなアプリケーションの実行環境 フレームワークとしてのKubernetes Clustom Resource DefinitionとCustom Controllerによる API Resourceのライフサイクル管理 XaaSプラットフォームとしてのKubernetes マネージド・サービス基盤としてのKubernetes XaaS、Serverless platform w/ Kuebrnetes

Slide 34

Slide 34 text

あ、あと CI/CD (GitOps)とか書いてた… ソースコード Git リポジトリ マニフェスト Git リポジトリ 開発者 (2) 継続的インテグレーション   ・テストの実施   ・Dockerイメージのビルド   ・Docker Registryへのプッシュ CI ツール (1) ソースコードの変更 (3) マニフェストのイメージタグを変更した   Pull Requestを作成 Deploy Operator (5) マニフェストを取得 Application (6) 適用 (4) Pull Request のマージ # Pull Requestの例 < image: myapp:0.1 --- > image: myapp:0.2

Slide 35

Slide 35 text

Thank you for your attension follow me: @amsy810