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

k8s_virtualcluster

vkbaba
October 22, 2020

 k8s_virtualcluster

vkbaba

October 22, 2020
Tweet

More Decks by vkbaba

Other Decks in Technology

Transcript

  1. Kubernetes の
    マルチテナンシー
    VirtualCluster のご紹介
    Kota Baba
    VMware K.K. Partner Dept.1

    View Slide

  2. 2
    自己紹介
    馬場 浩太(ばば こうた)
    • VMware で好きな製品
    ESXi, vSAN, vSphere with Tanzu
    • 趣味でブログやってます。
    https://blog.vpantry.net/
    パートナーソリューションアーキテクトとして、
    VMware パートナー様を技術的にご支援しております。
    https://vexpert.vmware.com/directory/6322

    View Slide

  3. 3
    マルチテナンシーとは
    https://www.wisconsincheese.com/the-cheese-
    life/article/26/perfect-pizza-party
    https://www.youtube.com/watch?v=oQ13MGDVezI
    様々なユーザーに対してどのようにリソースを共有させるか
    要件によって共有のさせ方は異なる
    ✓ リソース効率を優先させるのか?
    ✓ セキュリティを優先させるのか?

    View Slide

  4. 4
    単一のクラスタ上で実現可能
    • リソース効率性に優れる
    • シンプルな運用
    • 標準機能のためCRD 等の拡張も必要なし
    テナント間でコントロールプレーンを共有
    クラスタースコープのリソース(Storage Class な
    ど)のリソースを含められない
    マルチテナンシーを実現するためには割と考えるこ
    とがある
    複数のクラスタを用意
    • リソースを消費する
    • 運用管理の複雑性の増加
    • 展開や管理のための拡張がほぼ必須
    テナント間でコントロールプレーンを共有しない
    リソースはNamespaced でもクラスタスコープで
    もOK
    VM のレイヤでそもそも分かれているため比較的簡
    単にリソースのリークを防ぐことができる
    Namespaces クラスタ分割
    Kubernetes のマルチテナンシー

    View Slide

  5. 5
    Network Policy
    RBAC(Role Based Access Control)
    Pod Security Policy
    Affinity / Node Selector / Taint
    Resource Quota
    Admission Control / Dynamic Admission Control
    OS レベルでの制御
    ・・・・
    色々考えることがあります
    Namespaces の難しさ

    View Slide

  6. 6
    単一のKubernetes クラスタ上に、複数のKubernetes クラスタを論理的に構築
    メリット:
    • 実際にクラスタを作成するよりリソース効率性に優れ、展開・削除も高速
    • テナント間でコントロールプレーンを共有しないため他テナントへの影響は小さい
    • クラスタスコープのリソースを展開できる
    https://github.com/kubernetes-sigs/multi-tenancy/tree/master/incubator/virtualcluster
    VirtualCluster
    https://github.com/kubernetes-sigs/multi-tenancy/graphs/commit-activity

    View Slide

  7. 7
    VirtualCluster Custom
    Resource のライフライクル管

    マニフェストに従い、各テナン
    トにAPI Server、etcd、
    Controller Manager を作成
    Tenant Master とSuper
    Masterの状態を同期
    オブジェクトを定期的にスキャ
    ンしてTenant Master とSuper
    Master 間の状態が一致している
    ことを保証
    テナントに対するkubelet API
    リクエストを実際にノード内で
    実行されているkubelet プロセ
    スにプロキシ
    各テナントがアクセスできる
    Pod を制限
    VirtualCluster
    主要コンポーネント
    vc-manager syncer vn-agent

    View Slide

  8. 8
    Tenant Master A
    vNode
    kubelet
    vn-agent
    vc-manager
    syncer
    アーキテクチャ
    VirtualCluster
    Tenant Master B
    vNode
    Super Master
    etcd API
    Server
    etcd API
    Server
    etcd API
    Server
    Worker Node
    Master Node
    Namespaces for Tenant A Namespaces for Tenant B
    Pod Pod Pod Pod
    テナント作成
    Super Master と
    Tenant Master の同期
    kubectl kubectl
    テナントAPI
    リクエストのプロキシ
    テナント作成
    リクエスト
    Controller
    Manager
    Controller
    Manager
    Controller
    Manager

    View Slide

  9. 9
    百聞は一見にしかず
    DEMO

    View Slide

  10. 10
    Tenant Master A
    vNode
    kubelet
    vn-agent
    vc-manager
    syncer
    テナントの作成
    VirtualCluster
    Tenant Master B
    vNode
    Super Master
    etcd API
    Server
    etcd API
    Server
    etcd API
    Server
    Worker Node
    Master Node
    Namespaces for Tenant A Namespaces for Tenant B
    Pod Pod Pod Pod
    テナント作成
    Super Master と
    Tenant Master の同期
    kubectl kubectl
    Tenant API
    リクエストのプロキシ
    テナント作成
    リクエスト
    Controller
    Manager
    Controller
    Manager
    Controller
    Manager
    • 事前にClusterVersion オブジェクトを作成
    ✓ ClusterVersion にはテナントにデプロイされるAPI Server やetcd の情報がspec に定義
    • kubectl vc create コマンドでVirtualCluster オブジェクトを作成
    ✓ このタイミングでAPI Server などがデプロイされる
    ✓ ユーザーは出力されたkubeconfig ファイルを使ってテナントのAPI Server にアクセス

    View Slide

  11. 11
    Tenant Master A
    vNode
    kubelet
    vn-agent
    vc-manager
    syncer
    テナントの見え方
    VirtualCluster
    Tenant Master B
    vNode
    Super Master
    etcd API
    Server
    etcd API
    Server
    etcd API
    Server
    Worker Node
    Master Node
    Namespaces for Tenant A Namespaces for Tenant B
    Pod Pod Pod Pod
    テナント作成
    Super Master と
    Tenant Master の同期
    kubectl kubectl
    Tenant API
    リクエストのプロキシ
    テナント作成
    リクエスト
    Controller
    Manager
    Controller
    Manager
    Controller
    Manager
    テナント毎にNamespaces が作成される
    vc-manager, syncer, vn-agent が実行

    View Slide

  12. 12
    Tenant Master A
    vNode
    kubelet
    vn-agent
    vc-manager
    syncer
    テナントの見え方
    VirtualCluster
    Tenant Master B
    vNode
    Super Master
    etcd API
    Server
    etcd API
    Server
    etcd API
    Server
    Worker Node
    Master Node
    Namespaces for Tenant A Namespaces for Tenant B
    Pod Pod Pod Pod
    テナント作成
    Super Master と
    Tenant Master の同期
    kubectl kubectl
    Tenant API
    リクエストのプロキシ
    テナント作成
    リクエスト
    Controller
    Manager
    Controller
    Manager
    Controller
    Manager
    Tenant Master から見たPod
    Super Master から見たPod

    View Slide

  13. 13
    Tenant Master A
    vNode
    kubelet
    vn-agent
    vc-manager
    syncer
    リソースへのアクセス
    VirtualCluster
    Tenant Master B
    vNode
    Super Master
    etcd API
    Server
    etcd API
    Server
    etcd API
    Server
    Worker Node
    Master Node
    Namespaces for Tenant A Namespaces for Tenant B
    Pod Pod Pod Pod
    テナント作成
    Super Master と
    Tenant Master の同期
    kubectl kubectl
    Tenant API
    リクエストのプロキシ
    テナント作成
    リクエスト
    Controller
    Manager
    Controller
    Manager
    Controller
    Manager
    API
    Server
    • Master Node IP + NodePort でアクセス
    • コンテナNW の世界に入るためにDNAT
    • Tenant Master のAPI Server にアクセス

    View Slide

  14. 14
    Tenant Master A
    vNode
    kubelet
    vn-agent
    vc-manager
    syncer
    syncer
    VirtualCluster
    Tenant Master B
    vNode
    Super Master
    etcd API
    Server
    etcd API
    Server
    etcd API
    Server
    Worker Node
    Master Node
    Namespaces for Tenant A Namespaces for Tenant B
    Pod Pod Pod Pod
    テナント作成
    Super Master と
    Tenant Master の同期
    kubectl kubectl
    Tenant API
    リクエストのプロキシ
    テナント作成
    リクエスト
    Controller
    Manager
    Controller
    Manager
    Controller
    Manager
    • syncer はSuper Master とTenant Master を” 繋ぐ”
    ✓ 同期させつつも、例えばテナントで”default”
    Namespace に作成されたPod はSuper Master で
    は”default-xx” で実行される
    ✓ ユーザーはSuper Master を意識しないことに注意
    Super Master のetcd の中のPod Tenant Master のetcd の中のPod

    View Slide

  15. 15
    Tenant Master A
    vNode
    kubelet
    vn-agent
    vc-manager
    syncer
    vNode
    VirtualCluster
    Tenant Master B
    vNode
    Super Master
    etcd API
    Server
    etcd API
    Server
    etcd API
    Server
    Worker Node
    Master Node
    Namespaces for Tenant A Namespaces for Tenant B
    Pod Pod Pod Pod
    テナント作成
    Super Master と
    Tenant Master の同期
    kubectl kubectl
    Tenant API
    リクエストのプロキシ
    テナント作成
    リクエスト
    Controller
    Manager
    Controller
    Manager
    Controller
    Manager
    • vNode は実態がない仮想的なノード
    ✓ Pod が実行されたWorker Node のみvNode としてテナントからの
    kubectl get node で表示される
    ✓ Worker Node のIP アドレスを持つ(NodePort も使える)

    View Slide

  16. 16
    インストールガイドは下記をご参照ください。
    ✓ https://github.com/kubernetes-sigs/multi-
    tenancy/blob/master/incubator/virtualcluster/doc/demo.md
    KIND やminikube で動きました。
    ✓ kubernetes のバージョンは1.16 のみサポートしています(1.18 では不可でした)
    現状Node Port 必須のため、VCF with Tanzu のvSphere Pod は当然不可ですし、Tanzu
    Kubernetes Cluster もNSX-T のセグメント(LoadBalancer で構成するサンプルマニフェスト
    はありましたが動きませんでした)に接続されるのでアクセスが手間です。
    ✓ vSphere with Tanzu (NSX-T なし) であればいけると思います。
    テナント内の名前解決のためにcoredns を手動で建てないといけなかったり、API Server 内の
    証明書を取得してsecret を作成しなおしたりと、まだまだ発展途上感があるので、今後に期待
    です。
    試す場合
    VirtualCluster
    リリースまでもう少し……?

    View Slide

  17. 17
    マルチテナントの新しい取り組みとしてVirtualCluster というものがある
    ✓ テナントごとにコントロールプレーンを作成
    ✓ 実際にクラスタを作成するよりリソース効率性に優れる
    VirtualCluster はTenant Master とSuper Master の概念で構成される
    ✓ ユーザーはSuper Master を意識しない
    ✓ etcd も別のためリソースの見え方自体も異なる
    VirtualCluster の考え方に興味を持たれた方は是非本資料のもととなっている下記セッションを
    聴いてみてください。
    ✓ https://www.youtube.com/watch?v=5RgF_dYyvEY
    (長々と語りましたが)本日お伝えしたかったポイント

    View Slide

  18. Thank You

    View Slide