k8s_virtualcluster

E783e2d26dc6388730b73ced1348c638?s=47 vkbaba
October 22, 2020

 k8s_virtualcluster

E783e2d26dc6388730b73ced1348c638?s=128

vkbaba

October 22, 2020
Tweet

Transcript

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

    Dept.1
  2. 2 自己紹介 馬場 浩太(ばば こうた) • VMware で好きな製品 ESXi, vSAN,

    vSphere with Tanzu • 趣味でブログやってます。 https://blog.vpantry.net/ パートナーソリューションアーキテクトとして、 VMware パートナー様を技術的にご支援しております。 https://vexpert.vmware.com/directory/6322
  3. 3 マルチテナンシーとは https://www.wisconsincheese.com/the-cheese- life/article/26/perfect-pizza-party https://www.youtube.com/watch?v=oQ13MGDVezI 様々なユーザーに対してどのようにリソースを共有させるか 要件によって共有のさせ方は異なる ✓ リソース効率を優先させるのか? ✓

    セキュリティを優先させるのか?
  4. 4 単一のクラスタ上で実現可能 • リソース効率性に優れる • シンプルな運用 • 標準機能のためCRD 等の拡張も必要なし テナント間でコントロールプレーンを共有

    クラスタースコープのリソース(Storage Class な ど)のリソースを含められない マルチテナンシーを実現するためには割と考えるこ とがある 複数のクラスタを用意 • リソースを消費する • 運用管理の複雑性の増加 • 展開や管理のための拡張がほぼ必須 テナント間でコントロールプレーンを共有しない リソースはNamespaced でもクラスタスコープで もOK VM のレイヤでそもそも分かれているため比較的簡 単にリソースのリークを防ぐことができる Namespaces クラスタ分割 Kubernetes のマルチテナンシー
  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 の難しさ
  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
  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
  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
  9. 9 百聞は一見にしかず DEMO

  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 にアクセス
  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 が実行
  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
  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 にアクセス
  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
  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 も使える)
  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 リリースまでもう少し……?
  17. 17 マルチテナントの新しい取り組みとしてVirtualCluster というものがある ✓ テナントごとにコントロールプレーンを作成 ✓ 実際にクラスタを作成するよりリソース効率性に優れる VirtualCluster はTenant Master

    とSuper Master の概念で構成される ✓ ユーザーはSuper Master を意識しない ✓ etcd も別のためリソースの見え方自体も異なる VirtualCluster の考え方に興味を持たれた方は是非本資料のもととなっている下記セッションを 聴いてみてください。 ✓ https://www.youtube.com/watch?v=5RgF_dYyvEY (長々と語りましたが)本日お伝えしたかったポイント
  18. Thank You