IaC与SDDC之间的调度冲突问题

77次阅读
没有评论

问题描述

想要了解在使用基础设施即代码(IaC)和软件定义数据中心(SDDC)时,是否会出现调度冲突的问题。用户提到了一些具体的技术和解决方案,并描述了一些可能的冲突情况。

解决方案

请注意以下操作注意版本差异及修改前做好备份。

方案1

首先,对于术语的定义,IaC是指使用诸如Docker Swarm、Kubernetes、OpenShift、OpenStack等新技术来交付的基础设施。你可以通过编写代码来定义基础设施。
而SDDC通常是指来自IBM、VMWare等企业和传统解决方案。你可以通过某种UI来定义基础设施。
根据这个定义,Kubernetes、OpenShift等技术应该被归类为SDDC,而Vagrant、Terraform、Cloudformation、VMware Cloud Management等技术则属于IaC。
在这种情况下,如果你想要高性能,这样的设置是否有意义呢?
SDDC解决方案通常会有一个调度器,而你的IaC中的CPU是实际CPU上的虚拟CPU。因此,在最悲观的情况下,你的Spark可能与企业邮件服务器或某个备份解决方案共享资源。它们之间可以设置优先级,因此共享并不是平等的。下面描述了一些可能的冲突情况,从随机冲突到拒绝服务(DOS)攻击的倾向。
冲突情况1:当Docker Swarm或Kubernetes调度器“看到”一台机器时,它可能会认为负载不重,所以它会选择使用它,但是它发现这台机器已经被SDDC系统调度器用于其他用途。
冲突情况2:就在IaC调度器决定计算某些内容的时候,SDDC调度器决定取消调度,这样会导致IaC进入缓慢运行模式。

方案2

这种设置是有意义的,但需要仔细设计各个层次,以避免竞争条件。当你在不同层次上叠加系统时,你必须合理规划它们的定义,以避免冲突。
例如,在vSphere基础设施上运行的Kubernetes集群:你有一个Kubernetes调度器在另一个vSphere调度器之上。这是一个SDDC在另一个SDDC之上的情况。
Kubernetes关注的是它的节点负载(即vSphere虚拟机),而vSphere关注的是它的节点负载(即ESXi主机)。
在这种情况下,Kubernetes会在其节点之间移动Pod(容器),而vSphere会在其主机之间移动Kubernetes节点。
这可能会导致Kubernetes节点在两者同时希望移动负载时出现峰值或冻结。解决方案是进行架构设计:在Kubernetes节点上禁用vSphere DRS,这样在它们已经移动容器时就不会再移动Kubernetes节点。
每当你在不同系统之间叠加具有相同行为的系统时,你必须仔细规划它们的定义,以避免竞争条件。
最糟糕的情况是在vSphere基础设施上运行Docker Swarm集群,该集群又运行在Kubernetes之上,Kubernetes又运行在Mesos之上,Mesos又运行在Nutanix分区之上。(这是完全可行的,但我认为除了演示目的外,没有人会这样做)
因此,这种设置是有意义的,但需要仔细设计各个层次,以实现最佳性能。

正文完