是否可以在kubernetes中运行多个嵌套的kubernetes集群(k-in-k)

时间:2018-11-09 05:42:06

标签: kubernetes

如果有人尝试过在kubernetes中嵌套嵌套的kubernetes集群,我想在运行的kubernetes集群中模拟沙盒中的一个小kubernetes集群,而不是一次又一次地将VM用于新集群。

我想用于测试和跟踪kubernetes各种功能的新集群,有人尝试过吗?

我尝试了各种解决方案。

我也尝试过https://github.com/kubernetes-sigs/kubeadm-dind-cluster,这对我有用,但是它使用docker容器启动了k8s集群,但是我希望这种解决方案能够在kubernetes内部工作,以便可以在我拥有的节点之间扩展。

如果有人尝试过或者可以指出人们尝试过的解决方案,那么它会很有帮助。

编辑1:

我知道k8s将工作负载作为容器运行,这是我的问题的一部分,“是否有可能使用容器或pod或任何其他k8s构造来运行k8s”。

我知道,我们可以在其周围创建名称空间和网络策略,但这将对系统进行监管,我希望人们像在minikube中一样不受限制地自由使用主服务器/ api服务器。想要自由地破坏主服务器/ API服务器,并清理混乱,可能只需要k8s delete cluster c1之类的东西。

沙盒群集中创建这些群集只是命令操作。只是不想再旋转vm并设置集群,如果有人想玩它,

2 个答案:

答案 0 :(得分:1)

我了解出于某种原因您不想要VM,但是如果您改变主意,可以使用https://github.com/Mirantis/virtlet/blob/master/examples/k8s.yaml,这是一个如何在kubernetes中启动kubernetes的示例,而嵌套节点将是pod (更准确地说-VM Pod,是使用Virtlet作为与CRI兼容的运行时开始的),基于此Yaml中描述的StatefulSet。

答案 1 :(得分:0)

我认为您对kubernetes的功能有基本的误解。 Kubernetes作为工作负载只能运行容器。如果要在现有集群中部署新的Kubernetes集群,则必须在容器中运行它。如果您不希望置备新的VM或在容器中运行,我不知道如何计划在第一个群集中运行第二个群集。您在哪里看到集群运行?我看到了一些选项:

用例1:   在升级生产集群之前测试新版本的kubernetes

解决方案:   您实际上应该在与生产环境类似/相同的硬件/ VM上对此进行测试。如果将其旋转到现有集群中,将无法完全验证

用户案例2:    测试新的容器版本,服务设置等。

解决方案:    在某些网络策略中使用新的名称空间,以使其免受群集的其余部分影响。您可以再进一步一步,并使用节点污点仅允许命名空间的pod在特定的工作程序节点上运行。

用例3:   您正在尝试让开发人员随心所欲,而不会搞乱生产。

解决方案:   我建议不要使用单独的沙盒群集。但是,如果您愿意承担风险,请参阅#2的解决方案

用例4:   您正在为CI / CD管道部署新的kubernetes集群

解决方案:   我建议将作业分开,然后再测试将要运行的工作负载,以分别测试kubernetes集群的创建。一项工作会测试集群创建自动化,如果通过,您可以将其提升到暂存集群。使用登台群集来测试您的工作负载作业。

用例5:   您真的只想在其中运行多个kubernetes集群。

解决方案:   这确实是一个hack,我不知道如何避免创建新的VM,但是您可以研究混合使用自定义自动化和virtual-kubelete来将第二个群集注册为第一个群集上的“节点” 。不过,这实际上只会让您部署Pod。主要是从网络角度来看,很难在相同的VM上运行重复的kubernetes进程。

如果这些都不适用,您能更好地描述您的用例吗?