Upgrade to Pro — share decks privately, control downloads, hide ads and more …

KubernetesとCloud Nativeの現在と未来 / adtech develope...

KubernetesとCloud Nativeの現在と未来 / adtech developer conference 2018

KubernetesとCloud Nativeの現在と未来

@Adtech Developer Conference

Masaya Aoyama (@amsy810)

August 31, 2018
Tweet

More Decks by Masaya Aoyama (@amsy810)

Transcript

  1. 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
  2. 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
  3. KubeCon 2017 NA以降、5000名〜 日本からは 45 名〜が参加 (2016 EU 3 名〜、2017

    NA: 33 名〜) 日本交流会@コペンハーゲン現地 KubeCon China はKubernetes/* org に コントリビュートすればチケットはタダ!
  4. 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
  5. 複数のKubernetes Nodeの 管理 コンテナのスケジューリング ローリングアップデート スケーリング / オートスケーリング コンテナの死活監視 障害時のセルフヒーリング

    サービスディスカバリ ロードバランシング データの管理 ログの管理 Infrastructure as Code その他エコシステムとの連携や拡張
  6. 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の作成と管理
  7. 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
  8. 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
  9. 余談: “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) 誕⽣秘話とアーキテクチャ完全公開!」
  10. 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がよしなにステートフルなアプリケーションを管理
  11. 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
  12. 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環境があればどこでも可
  13. 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
  14. 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
  15. CNCF and Standardization 01. コンテナランタイム コンテナイメージフォーマット コンテナイメージの配布 OCI 02. オーケストレーションエンジンと

    コンテナランタイム間の インターフェース CRI 03. コンテナとストレージ間の インターフェース CSI 04. コンテナとネットワーク間の インターフェース CNI
  16. Micro Service マイクロサービス毎に技術選定可能 gRPC, REST 等でマイクロサービス間を繋ぐことで、 各サービスの技術選定の自由度が高い デプロイが容易 小さい機能単位でデプロイが可能なため、高速かつ影響範囲が少ない 大規模な開発を加速させる

    各部門が特定のマイクロサービスを開発することで全体が成り立つ 機能追加も比較的しやすい スケーリングが容易 特定の機能だけスケーリングさせるため効率が良い 障害が全体に波及しづらい 特定の機能に障害が起きた場合でも、 縮退した状態でサービス継続を行いやすい Golang Java Scala gRPC REST
  17. 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
  18. あ、あと 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