Kubernetes-在节点中使用服务

时间:2018-12-16 16:29:06

标签: kubernetes

我正在使用群集(带有主节点,带有Pod的节点),但是如何也可以在节点中使用服务?将Internet暴露给节点环境(使用服务)而不是主环境。

我的情况(尚在测试中)是:

  • 具有一个主节点和另一个节点(两个环境)。我的Pod在节点环境中运行,您可以在下面看到(kubectl get pod -o width): enter image description here

我需要公开服务所在的节点,而不是主机。因为,如果我暴露了母版,而母版掉线了,则所有服务都会停止。

2 个答案:

答案 0 :(得分:1)

您似乎倾向于NodePort Services,所以我想您没有使用云提供商(就像使用云提供商一样,您可以使用LoadBalancer)。

由于您有多个节点,因此您需要选择在外部公开哪些节点以及如何公开。您可以放an external Load Balancer in front of the cluster so that load is balanced between nodes。那不会成为集群的一部分,因此必须单独配置以知道要路由到哪个IP /节点。

或者您可以考虑使用单个节点进行路由。该节点将仅使用kube-proxy发送流量,而无需进入应用程序内容(L4而非L7),因此它可以进行路由而无需进行大量处理,这有助于减轻其不可用的风险。但是它仍然仅仅是单个节点,并且根据其硬件,存在可能由于其他原因而崩溃的风险。因此,在决定哪种设置从外部进行公开最适合您的集群时,需要权衡取舍-您需要选择是否除了集群之外还需要维护负载均衡器,以及是否比使用节点更可靠。 / p>

答案 1 :(得分:0)

如果您希望从计划Pod中移除主机,并且您正在使用Kubernetes 1.7或更高版本,则可以使用以下命令。

<TreeView Margin="10" ItemsSource="{Binding ChainedCommandVMs}"> <TreeView.ItemContainerStyle> <Style TargetType="{x:Type TreeViewItem}"> <Setter Property="IsExpanded" Value="True" /> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="TreeViewItem"> <StackPanel> <ContentPresenter ContentSource="Header" /> <ItemsPresenter Name="ItemsHost" /> </StackPanel> </ControlTemplate> </Setter.Value> </Setter> </Style> </TreeView.ItemContainerStyle>...

您不能公开一个节点,它是一台已经具有ip地址并已公开的VM或裸机。您要做的是使用服务将Pod暴露在集群外部。您可以为此使用Kubernets Services。对于此测试方案,您可以使用NodePort将Pod暴露在外面。如果使用NodePort,则可以使用kubectl taint node yourMasterNode node-role.kubernetes.io/master:NoSchedule-从群集外部访问它。如果您想从互联网访问它,可能需要一个静态的公共IP。

但是,如果您担心Pod的可用性,则可以使用多节点群集,然后使用Pod的副本,以便可以在多个节点上调度它们。然后,只要在其他位置安排了新的Pod时,只要其他节点中的Pod可以继续服务即可。这就是您可以在Kubernetes中获得100%可用性的方式。

当您担心主机崩溃时。如果主服务器宕机,则应用程序将继续提供服务,并且节点将是临时节点,而不是群集。除非节点重新启动或应用程序失败,否则它将正常运行。但是群集将无法响应节点故障,创建新资源,将Pod移至新节点等。直到主节点重新联机。因此,如果主服务器极有可能失败,则可以在集群中使用multiple masters