我最近开始走进Kubernetes的世界,那里有很多信息,而且大多数时候我感到非常困惑。 然后我想问一下如何选择更好的方法来管理基础架构:
节点和Kubernetes主节点隔离在不同的DMZ中,如图所示,端口和方向将打开。
您将采用哪种方式让Pod在正确的节点上执行? (例如,仅在Web1和/或web2上运行Nginx容器,而仅在DB1和/或DB2上执行pgSQL容器)使用服务器标记系统是否足够好,或者有更好的解决方案来管理它?
我的第二个疑问是服务必须可以直接从节点从外部单词访问,因此,如果我想使用副本,Web1和Web2应该侦听该服务公开的相同IP地址,还是可以通过kube-proxy来管理?目前,我正在考虑在节点之间配置分布式交换机,并设置Pod的外部ip地址,该Pod是连接到分布式交换机的IP之一。
这还是一个很好的解决方案,或者有更好的方法吗?
答案 0 :(得分:2)
您将采用哪种方式让Pod在正确的节点上执行?
nodeSelector,这是最简单的方法,因为您在节点kubectl label nodes k8s-node-1 disktype=ssd
上添加了一个可由kubectl get nodes --show-labels
验证的标签,并在yaml
下的pod spec
内添加了标签:
nodeSelector:
disktype: ssd
Node affinity,由于您不再局限于完全匹配,因此更加复杂且更具表现力。 请记住,这仍然是测试版功能。
我的第二个疑问是服务必须可以直接从节点从外部单词访问,因此,如果我要使用副本,Web1和Web2应该侦听该服务公开的相同IP地址,还是可以通过kube-proxy来管理?
在这里,我认为您需要使用Type LoadBalancer作为Service
,大多数云提供商都拥有自己的内部LoadBalancer GCP,AWS,Azure 。还有MetalLB,它是针对裸机Kubernetes集群的实现。
希望这对您有所帮助。
编辑:
OP建议使用Node restriction,在他的示例中,这是一种更好的解决方案,可让Pod在集群中节点的子集上动态运行。