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
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 にアクセス
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 が実行
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
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 にアクセス
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
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 も使える)