我创建了一个kubernetes集群,并通过应用程序进行了部署。
首先,如果我使用firstapp.yaml进行了部署,该应用创建了一个pod和一个用于在外部公开Pod的服务。
如果我在集群中有两个节点,然后使用secondapp.yaml进行另一个部署。
我注意到,第二次部署转到了不同的节点。尽管这是逻辑分隔的理想行为。
是Kubernetes提供的东西吗?它如何管理使用不同文件进行的部署?他们是否将始终在单独的节点上运行(如果已配置节点)?
如果没有,那么如果我想在两个节点之间进行逻辑分隔(我希望将其作为两个环境),那么应该遵循什么实践,比如dev和qa环境。
答案 0 :(得分:1)
否,它们将不必去不同的节点。调度程序根据不同的条件确定将容器放置在何处。
最后一个问题-没有道理。您可以使用名称空间\网络策略来分隔环境,而不必在意您的Pod位于哪个节点上。那就是拥有集群的全部要点。
您可以使用放置约束来实现所需的功能,但这根本没有意义。
https://kubernetes.io/docs/concepts/configuration/assign-pod-node/
答案 1 :(得分:0)
同意@ 4c74356b41。 作为补充。您的Pod不在哪里,您可以将应用程序的多个副本划分为50个节点,它们仍可以彼此通信(服务,服务发现,network CNI)并共享资源等。
是的,这是Kubernetes的默认行为,您可能会受到污点,容忍度,资源,限制节点亲和力和反亲和力的影响(您可以在文档中找到很多有关每个信息的信息,或者只是对其进行谷歌搜索)。 Pod的调度位置也取决于节点capacity。您的Pod已设置为特定的Node,因为Scheduler计算得出的得分最高,首先要考虑到上述条件。您可以找到有关流程here的详细信息。
同样,如@ 4c74356b41所述,如果要将集群拆分为多个环境,请针对不同的团队说,或者针对开发环境和质量保证环境说,您可以使用namespaces。他们基本上是在您的集群中创建一个较小的集群(请注意,这更多是逻辑上的分离,而不是从安全角度上的分离,除非您添加其他组件,例如
例如角色)
您只需在部署YAML中添加一个namespace
字段即可指定要将Pod部署到哪个命名空间中-不管它们在哪个节点上都没有关系。取决于您的用例。
请注意,我写的内容过于简单,我在这之间没有提及太多,您可以在大多数Kubernetes教程中轻松找到。