kubernetes POD IP何时更改?

时间:2018-09-17 07:12:02

标签: kubernetes

我正在尝试将单片应用程序移植到k8s pods。从理论上讲,吊舱被认为是短暂的,建议使用服务概念来提供静态IP。但是到目前为止,在我的测试中,我还没有看到POD IP被更改。那么现在的问题是,k8s何时将新IP分配给我的POD?

我用固定的主机名创建了POD(不使用任何控制器),并且它们绑定到单个节点。因此,节点和主机名将永远不会更改,POD将永远不会被删除吗?因此,在这种独特情况下,POD IP何时可以更改。我看了一下文档,这对我来说还不清楚。

3 个答案:

答案 0 :(得分:2)

只要Pod正在运行,IP就不会更改,但是不能保证Pod将继续运行。最接近稳定网络名称的是StatefulSet。这将创建一个一致的pod名称,这意味着kubedns / coredns中的DNS名称一致。尽管在技术上取决于您的CNI网络插件,但Kubernetes并没有一种通用方法可以在Pod上获得长期的静态IP(或在此服务上)获得长期静态IP,所以也许其中一些具有特殊情况?

答案 1 :(得分:1)

如果在部署中启动Pod的多个副本,则Pod IP地址将更改。如果您更改基本容器并重新启动容器,则新容器可能会具有不同的IP地址。

您声称“ pod将永远不会被删除”,但这在Kubernetes中是非常强烈且不寻常的说法。更新应用程序或其下的基本OS容器的典型方法是构建一个新的Docker映像并重新部署它,这将导致删除pod并更改其IP地址。

无论如何,您都应该创建一个引用Pod的Kubernetes服务。该服务将在群集内提供一个DNS名称,该名称将是稳定的并在您的控制之下。在群集中运行的其他应用程序中,您可以引用servicename.namespacename.svc.cluster.local作为主机名。

答案 2 :(得分:0)

正如coderanger所述,您不应依赖吊舱本身,因为吊舱是短暂且可更换的。由于Pod是Kubernetes中最小的可部署对象,并且被认为易于更换,因此我们应避免与Pod本身直接交互;相反,我们应该与负责Pod的控制器交互。 David Maze提到您应该使用该服务来管理广告连播。我的前任的意思是,对Pod进行任何更改后,可能会导致Pod的删除,失败后它将停止工作,并且如果您与带有控制器的Pod进行交互,则会导致重新创建。 因此,更明确地说-您的问题是“如果我不使用最佳实践以及与群集进行交互的建议方式,将会发生什么”。答案是-许多事情可能出错,其中之一就是错误和许多不必要的故障排除方法。因此,我们建议您遵守Kubernetes社区和文档提供的一组规则: 如here所述:

  

通常来说,荚只有在有人摧毁它们后才会消失。这个   可能是人还是控制器。该规则的唯一例外是   phase成功或失败的豆荚比其他更多   持续时间(由主机中的terminated-pod-gc-threshold确定)   将过期并自动销毁。

即使在单例情况下,也应该几乎始终使用控制器;控制器提供了很多优点,例如自我修复或复制等。正如coderanger所述,StatefullSets还可以为有状态的Pod提供支持。有关Pod here的耐用性的更多信息。

更进一步,我们使用不同类型的controllers,因此您可以避免直接与广告连播互动: -Job用于预期会终止的Pod -ReplicationControllerReplicaSetDeployment用于预期不会终止的Pod -DaemonSet个Pod,因为它们提供了特定于计算机的系统服务,因此需要每台计算机运行一个容器

之所以这样,是因为控制器具有弹性,并且可以承受Pod不会出现的机器故障。豆荚不是耐久的实体,不应像那样对待。他们将not survive调度错误,节点故障(缺少资源驱逐)等。

直接讨论问题的实质,由于Kubernetes的性质,您不能为Pod分配静态IP。硬编码主机名不是一个好主意,您最接近解决方案的方法是按照@coderanger的建议创建StatefullSet,它或多或少会为您的Pod提供一个静态主机名。