Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

9 百聞は一見にしかず DEMO

Slide 10

Slide 10 text

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 にアクセス

Slide 11

Slide 11 text

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 が実行

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

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 にアクセス

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

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 も使える)

Slide 16

Slide 16 text

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 リリースまでもう少し……?

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

Thank You