Docker 容器端口在 Kubernetes 中发生冲突
Docker container ports are clashing in Kubernetes
我正在使用 2 个节点在 kubernetes 集群上部署 docker 容器。 docker 容器需要打开端口 50052。我的理解是我只需要定义一个 containerPort (50052) 并有一个指向它的服务。
但是当我部署它时,只有前 2 个 pods 会成功启动。之后,我收到以下消息,大概是因为新 pods 正在尝试打开已被使用的端口 50052。
0/2 nodes are available: 2 node(s) didn't have free ports for the requested pod ports.
我认为具有相同请求端口的多个 pods 可以调度在同一个节点上?或者这不对?
你说得对,一个集群中可以存在多个具有相同端口的pods。它们必须具有以下类型:ClusterIP
ClusterIP:在集群内部 IP 上公开服务。选择此值会使服务只能从集群内访问。这是默认的服务类型。
为避免端口冲突,您不应使用 NodePort 作为端口类型。因为如果你有 2 个节点和 4 个 pods,那么每个节点上都会存在一个 pod,从而导致端口冲突。
根据您想要到达集群的方式,您有不同的选择...
谢谢,我想通了——我在我的 kubernetes 部署中将主机网络设置为 true。将其改回 false 解决了我的问题。
我正在使用 2 个节点在 kubernetes 集群上部署 docker 容器。 docker 容器需要打开端口 50052。我的理解是我只需要定义一个 containerPort (50052) 并有一个指向它的服务。
但是当我部署它时,只有前 2 个 pods 会成功启动。之后,我收到以下消息,大概是因为新 pods 正在尝试打开已被使用的端口 50052。
0/2 nodes are available: 2 node(s) didn't have free ports for the requested pod ports.
我认为具有相同请求端口的多个 pods 可以调度在同一个节点上?或者这不对?
你说得对,一个集群中可以存在多个具有相同端口的pods。它们必须具有以下类型:ClusterIP
ClusterIP:在集群内部 IP 上公开服务。选择此值会使服务只能从集群内访问。这是默认的服务类型。
为避免端口冲突,您不应使用 NodePort 作为端口类型。因为如果你有 2 个节点和 4 个 pods,那么每个节点上都会存在一个 pod,从而导致端口冲突。
根据您想要到达集群的方式,您有不同的选择...
谢谢,我想通了——我在我的 kubernetes 部署中将主机网络设置为 true。将其改回 false 解决了我的问题。