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

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

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

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

Shunya Murata

January 19, 2017
Tweet

More Decks by Shunya Murata

Other Decks in Programming

Transcript

  1. ThirdPartyResource を使った
    Kubernetes as a Service の実装
    Z Lab Corporation 村⽥ 俊哉
             稲津 和磨
    1

    View Slide

  2. Z Lab Corporation
    • 次世代インフラ基盤を調査・研究開発
    • Kubernetes, Docker
    • Yahoo! JAPAN の⼦会社
    • https://zlab.co.jp
    2

    View Slide

  3. Kubernetes as a Service
    • 開発者がセルフサービスでクラスタを作成できるサービス
    • 作成したクラスタはフルマネージド
    • ⾃動アップデート
    • ダウンタイムゼロ
    • ローリングアップデート
    • セルフヒーリング
    • ノード障害時に別のノードを作成して復旧
    • ノードのオートスケール
    3

    View Slide

  4. Kubernetes as a Service 要件
    • スケール性能
    • 数万台規模まで利⽤できるようにしたい
    • ⾮同期
    • サーバの構築などは時間がかかるため⾮同期にせざる負えない
    • 堅牢性
    • フェイルオーバー
    • 処理を中断しても再開できること
    4

    View Slide

  5. 実装⽅式検討
    • 実装が複雑になりそうな分散システムが必要
    • ノードの状態などを監視しながら、ノードの状態の変更に対応して
    処理をする必要がある
    • 各リソースの状態を監視し、そのイベントに対応して処理を⾏うアー
    キテクチャが良さそう
    5

    View Slide

  6. View Slide

  7. Kubernetes のアーキテクチャ
    7
    Spec と Status の
    差分の検知
    差分の反映
    差分の検知
    Queue
    Status の同期
    Resource
    4QFD
    4UBUVT
    API Server Controller Manager
    Other Resource
    Spec :あるべき状態
    Status : 現在の状態

    View Slide

  8. Kubernetes をフレームワークのように利⽤
    • ThirdPartyResource
    • Informer Framework
    • RateLimitingQueue
    8

    View Slide

  9. Kubernetes をフレームワークのように利⽤
    9
    Spec と Status の
    差分の検知
    差分の反映
    差分の検知
    RateLimitingQueue
    Status の同期
    ThirdParty
    Resource
    Spec
    Status
    API Server Controller
    Other Resource
    InformerFramework
    アプリケーションの
    実装に専念できる
    SyncLoop

    View Slide

  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

    View Slide

  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 へのアクセスを削減

    View Slide

  12. RateLimitingQueue
    • RateLimiter を持つ Queue
    • 同じ key のオブジェクトのユニーク性を保証
    • エラーの場合 Delay を持たせて enqueue (retry) などが簡単にで
    きる
    12
    Informer Framework
    cache
    OnAdd
    OnUpdate
    OnDelete
    Sync loop
    エラーなら Delay して retry
    RateLimitingQueue

    View Slide

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

    View Slide

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

    View Slide

  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

    View Slide

  16. DEMO

    View Slide

  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

    View Slide

  18. ThirdPartyResource
    • KubernetesClusters
    • クラスタそのものを表す。Kubernetes リソースを管理する
    • Kubernetes
    • Master,Worker の初期化スクリプトを⽣成し MachineDeployments を
    管理する
    • MachineDeployments
    • MachineSets を管理しローリングアップデートを⾏う
    • MachineSets
    • Machines を指定数に保つように管理する
    • Machines
    • IaaS のマシンを管理する
    18

    View Slide

  19. デモ内容
    • Kubernetes クラスタの作成
    • Kubernetes のバージョンアップ
    • ローリングアップデート
    • Worker Node のスケールアウト
    19

    View Slide

  20. まとめ
    • ThirdPartyResource を利⽤したアプリケーションの実装例として
    Kubernetes as a Service の紹介しました
    • Kubernetes Like なアプリケーションが ThirdPartyResource,
    InformerFramework, RateLimitingQueue などを利⽤することで
    簡単に実装できます
    20

    View Slide

  21. 技術で新しい世界へシフトする。
    WE ARE HIRING!

    View Slide

  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

    View Slide