我是一个初学者,了解库伯内特斯。
根据我的理解,命名空间是一个由同一个物理集群支持的虚拟集群。
在哪种用法中,我们应该选择单独的物理Kubernetes集群?
选择命名空间而不是物理Kubernetes集群可以节省哪些主要资源?(存在于物理集群的一个名称空间中的Kubernetes对象可以由所有其他名称空间共享,比如kube-system中的命名空间?)物理Kubernetes集群中的节点是否为所有名称空间所共享,但不可能在多个物理Kubernetes集群之间共享节点?)
发布于 2020-06-28 11:31:13
名称空间不是任何有意义的“虚拟集群”;它只是将资源组合在一起的一种方式。例如,这些服务是不同的,因为它们位于不同的名称空间中:
kubectl describe service --namespace n1 foo
kubectl describe service --namespace n2 foo但是,n1中的服务可以调用foo.n2.svc.cluster.local,而无需执行任何特殊设置。
名称空间是Kubernetes RBAC设置的自然边界。如果一个对象直接引用另一个对象(例如,一个pod挂载一个持久的卷声明或从一个配置映射获取环境变量),那么它们通常必须位于同一个名称空间中。
在实际的集群中,节点是共享的。给定的节点可以从任何名称空间运行任何pod (除非在pod级别上进行了具体配置);kubectl describe node将显示这一点。如果一个pod非常大量地使用某些资源(CPU、内存、磁盘I/O),这可能会影响在同一节点上运行的其他吊舱。完全忽略名称空间边界。
当您希望实际分离事物时,您需要不同的集群:当一个环境中的服务不能在不同的环境中调用一个服务时,当集群级别的资源(如NodePort服务)需要分离时,如果围绕诸如PersistentVolume分配之类的事情有不同的策略的话。
共享集群意味着您需要更少的集群全局进程( Kubernetes核心、服务网格(如Istio) )的副本,并且您可以共享节点。这可能导致更好地利用大型节点。
例如,您可以将您的测试环境和生产环境分离到不同的集群中。它们将具有不同的外部DNS设置、独立的入口控制器和单独的节点池。您不可能意外地从外部向测试环境发送请求,测试环境上的负载测试不会影响生产环境。
发布于 2020-06-28 08:55:58
通常,一个单独的物理集群是必要的。
许多租户使用自己的命名空间共享多租户集群,这对于节省成本非常有用。名称空间分离是逻辑的,所有名称空间的资源仍然驻留在相同的ETCD存储中,但具有不同的键。在单独的专用物理集群中,这不是一个问题,因为在这种情况下,集群也会有单独的ETCD。
跨名称空间对资源的访问由RBAC通过kubernetes API Server控制。但是,如果您可以直接绕过API访问ETCD,则可以从所有名称空间访问所有内容。
您需要在多租户集群中添加大量的最佳实践和保护,这样不同名称空间的租户就不会踩到彼此的脚跟。在一个单独的专用物理集群中,这并不是很有必要。
https://stackoverflow.com/questions/62620183
复制相似问题