kubernetes - 如何确定 Kubernetes 集群的最佳实现
问题描述
我最近才开始走进 Kubernetes 的世界,信息量很大,很多时候我真的很困惑;然后我想问我如何选择更好的方式来管理基础设施,如下所示:
节点和 Kubernetes master 隔离在不同的 DMZ 中,如图所示打开端口和方向。
您将使用哪种方式让 Pod 在正确的节点上执行?(例如,Nginx pod 仅在 Web1 和/或 web2 上运行,而 pgSQL pod 仅在 DB1 和/或 DB2 上执行)使用服务器标签系统是否足够好或有更好的解决方案来管理这个?
我的第二个疑问是服务必须可以直接从节点的外部单词访问,所以如果我想使用副本,我想 Web1 和 Web2 应该侦听服务暴露的相同 IP 地址,或者可以这样通过 kube-proxy 管理?目前我正在考虑在节点之间配置一个分布式交换机,并将 pod 的外部 IP 地址设置为连接到分布式交换机的 IP 之一。
这也是一个很好的解决方案还是有更好的方法来做到这一点?
解决方案
您将使用哪种方式让 Pod 在正确的节点上执行?
nodeSelector,最简单的方法,因为您向节点添加了一个标签,该标签可以在您添加的pod 内部和内部kubectl label nodes k8s-node-1 disktype=ssd
进行验证:kubectl get nodes --show-labels
yaml
spec
nodeSelector:
disktype: ssd
节点亲和力,因为您不再局限于精确匹配,所以更加复杂和更具表现力。请记住,这仍然是一个测试版功能。
我的第二个疑问是服务必须可以直接从节点的外部单词访问,所以如果我想使用副本,我想 Web1 和 Web2 应该在服务暴露的相同 IP 地址上侦听,或者可以这样通过 kube-proxy 管理?
在这里,我认为您将需要使用Type LoadBalancer作为Service
,大多数云提供商都有自己的内部 LoadBalancer GCP、AWS、Azure。还有MetalLB,它是裸机 Kubernetes 集群的实现。
希望这对您有所帮助。
编辑:
OP 建议使用节点限制,在他的示例中这是一个更好的解决方案,可以让 pod 在集群中的节点子集上动态运行。
推荐阅读
- spring-boot - Spring Boot 批处理作业识别
- python - 在包含数组的python列表中查找重复项
- javascript - Angular 8/9 - Firebase CRUD - 更新
- c++ - 从 C 包装器创建 C++ 对象
- javascript - 如何在控制器中以 json 格式返回我的响应。(ASP.NET)
- python - AWS Security Hub BatchImportFindings API:AccessDeniedException,即使用户具有适当的策略和角色
- optaplanner - Optaplanner:使用 Drools 计算给定时间表的分数
- c# - 如何统一使用单例模式?
- python - 有没有办法在 Python 中使用两个变量来创建变量名?
- vaticle-typedb - 通过 Grakn Java API 定义规则时,尝试排除一元关系时出现错误