ThirdPartyResource を使った Kubernetes as a Service の実装

ThirdPartyResource を使った Kubernetes as a Service の実装

Kubernetes Meetup Tokyo #3で発表した ThirdPartyResource を使った Kubernetes as a Service の実装 の資料です。

6ee833afddca37209631fb25a0cec547?s=128

Shunya Murata

January 19, 2017
Tweet

Transcript

  1. 1.

    ThirdPartyResource を使った Kubernetes as a Service の実装 Z Lab Corporation

    村⽥ 俊哉          稲津 和磨 1
  2. 3.

    Kubernetes as a Service • 開発者がセルフサービスでクラスタを作成できるサービス • 作成したクラスタはフルマネージド • ⾃動アップデート

    • ダウンタイムゼロ • ローリングアップデート • セルフヒーリング • ノード障害時に別のノードを作成して復旧 • ノードのオートスケール 3
  3. 4.

    Kubernetes as a Service 要件 • スケール性能 • 数万台規模まで利⽤できるようにしたい •

    ⾮同期 • サーバの構築などは時間がかかるため⾮同期にせざる負えない • 堅牢性 • フェイルオーバー • 処理を中断しても再開できること 4
  4. 6.
  5. 7.

    Kubernetes のアーキテクチャ 7 Spec と Status の 差分の検知 差分の反映 差分の検知

    Queue Status の同期 Resource 4QFD 4UBUVT API Server Controller Manager Other Resource Spec :あるべき状態 Status : 現在の状態
  6. 9.

    Kubernetes をフレームワークのように利⽤ 9 Spec と Status の 差分の検知 差分の反映 差分の検知

    RateLimitingQueue Status の同期 ThirdParty Resource Spec Status API Server Controller Other Resource InformerFramework アプリケーションの 実装に専念できる SyncLoop
  7. 10.

    apiVersion: extensions/v1beta1 kind: ThirdPartyResource metadata: name: hello-world.example.com description: "hello world

    object" versions: - name: v1 • Kubernetes API にユーザ独⾃のリソースの API を追加するリソー ス • Kubernetes のリソースの⼀つ • 追加される API は CRUD の操作と watch をサポート ThirdPartyResource 10 API Server Pod Service Deployments HelloWorld
  8. 11.

    Informer Framework 11 Resource Spec Status API Server Informer Framework

    watch diff cache OnAdd OnUpdate OnDelete • Kubernetes の Controller (ControllerManager) で利⽤されている • Watch API を利⽤して変更を検知してイベントハンドラを実⾏する • OnAdd, OnUpdate, OnDelete • Watch と対応した Cache をもっていて無駄な API へのアクセスを削減
  9. 12.

    RateLimitingQueue • RateLimiter を持つ Queue • 同じ key のオブジェクトのユニーク性を保証 •

    エラーの場合 Delay を持たせて enqueue (retry) などが簡単にで きる 12 Informer Framework cache OnAdd OnUpdate OnDelete Sync loop エラーなら Delay して retry RateLimitingQueue
  10. 13.

    SyncLoop • Spec と Status の差分を確認し、Status を Spec へ近づけていく 処理を⾏う

    Loop • アプリケーション⾃体の処理を実装する部分 13 • 実装時の注意した点 • いつ中断しても再開できるように • レースコンディションが発⽣しないように Spec と Status の 差分の検知 Status の同期 差分の反映
  11. 14.

    Controller の動作環境 • 開発した Controller は Kubernetes の Pod としてデプロイ

    • Kubernetes API の 認証に ServiceAccount を利⽤できる • 標準の Client と同じものを⽤意すれば特に設定せずにデフォルト のアカウントを勝⼿に使⽤してくれる 14 Kubernetes Cluster API Server TPR TPR Controller Pod ServiceAccount
  12. 15.

    Kubernetes as a Service の ThirdPartyResource と Controller • ThirdPartyResources

    • Kuberneteses • KubernetesClusters • Etcds • LoadBlancers • Machines • MachineSets • MachineDeployments • MachineImages • MachinePools 15 • Controllers • KubernetesController • KubernetesClusterController • EtcdController • LoadBlancerController • MachineController • MachineSetController • MachineDeploymentController • MachineImageController
  13. 16.
  14. 17.

    CaaS Kubernetes Cluster Kubernetes as a Service(CaaS) • Kubernetesクラスタを⽣成・管理するシステム 17

    Create Read Update Delete API Server TPRs User Kubernetes Cluster Master Worker User Kubernetes Cluster Master Worker TPR Controllers Pods
  15. 18.

    ThirdPartyResource • KubernetesClusters • クラスタそのものを表す。Kubernetes リソースを管理する • Kubernetes • Master,Worker

    の初期化スクリプトを⽣成し MachineDeployments を 管理する • MachineDeployments • MachineSets を管理しローリングアップデートを⾏う • MachineSets • Machines を指定数に保つように管理する • Machines • IaaS のマシンを管理する 18
  16. 20.

    まとめ • ThirdPartyResource を利⽤したアプリケーションの実装例として Kubernetes as a Service の紹介しました •

    Kubernetes Like なアプリケーションが ThirdPartyResource, InformerFramework, RateLimitingQueue などを利⽤することで 簡単に実装できます 20
  17. 22.

    参考⽂献 • ThirdPartyResource • https://kubernetes.io/docs/user-guide/thirdpartyresources/ • Informer Framework • https://github.com/kubernetes/kubernetes/blob/v1.5.2/

    pkg/client/cache/controller.go • RateLimitingQueue • https://github.com/kubernetes/kubernetes/blob/v1.5.2/ pkg/util/workqueue/rate_limitting_queue.go 22