Pro Yearly is on sale from $80 to $50! »

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. ThirdPartyResource を使った Kubernetes as a Service の実装 Z Lab Corporation

    村⽥ 俊哉          稲津 和磨 1
  2. Z Lab Corporation • 次世代インフラ基盤を調査・研究開発 • Kubernetes, Docker • Yahoo!

    JAPAN の⼦会社 • https://zlab.co.jp 2
  3. Kubernetes as a Service • 開発者がセルフサービスでクラスタを作成できるサービス • 作成したクラスタはフルマネージド • ⾃動アップデート

    • ダウンタイムゼロ • ローリングアップデート • セルフヒーリング • ノード障害時に別のノードを作成して復旧 • ノードのオートスケール 3
  4. Kubernetes as a Service 要件 • スケール性能 • 数万台規模まで利⽤できるようにしたい •

    ⾮同期 • サーバの構築などは時間がかかるため⾮同期にせざる負えない • 堅牢性 • フェイルオーバー • 処理を中断しても再開できること 4
  5. 実装⽅式検討 • 実装が複雑になりそうな分散システムが必要 • ノードの状態などを監視しながら、ノードの状態の変更に対応して 処理をする必要がある • 各リソースの状態を監視し、そのイベントに対応して処理を⾏うアー キテクチャが良さそう 5

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

    Queue Status の同期 Resource 4QFD 4UBUVT API Server Controller Manager Other Resource Spec :あるべき状態 Status : 現在の状態
  8. Kubernetes をフレームワークのように利⽤ • ThirdPartyResource • Informer Framework • RateLimitingQueue 8

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

    RateLimitingQueue Status の同期 ThirdParty Resource Spec Status API Server Controller Other Resource InformerFramework アプリケーションの 実装に専念できる SyncLoop
  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
  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 へのアクセスを削減
  12. RateLimitingQueue • RateLimiter を持つ Queue • 同じ key のオブジェクトのユニーク性を保証 •

    エラーの場合 Delay を持たせて enqueue (retry) などが簡単にで きる 12 Informer Framework cache OnAdd OnUpdate OnDelete Sync loop エラーなら Delay して retry RateLimitingQueue
  13. SyncLoop • Spec と Status の差分を確認し、Status を Spec へ近づけていく 処理を⾏う

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

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

  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
  18. ThirdPartyResource • KubernetesClusters • クラスタそのものを表す。Kubernetes リソースを管理する • Kubernetes • Master,Worker

    の初期化スクリプトを⽣成し MachineDeployments を 管理する • MachineDeployments • MachineSets を管理しローリングアップデートを⾏う • MachineSets • Machines を指定数に保つように管理する • Machines • IaaS のマシンを管理する 18
  19. デモ内容 • Kubernetes クラスタの作成 • Kubernetes のバージョンアップ • ローリングアップデート •

    Worker Node のスケールアウト 19
  20. まとめ • ThirdPartyResource を利⽤したアプリケーションの実装例として Kubernetes as a Service の紹介しました •

    Kubernetes Like なアプリケーションが ThirdPartyResource, InformerFramework, RateLimitingQueue などを利⽤することで 簡単に実装できます 20
  21. 技術で新しい世界へシフトする。 WE ARE HIRING!

  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