0

当我用来构建 Hypervisor(即 VMWare、Hyper-V 等)集群时,所有的硬件和软件都必须完全相同。否则,如果其中一个节点出现故障,我可能会认为工作负载可能会发生“冲突”(即,由于硬件或操作系统不同,VM 将无法运行)。

如果您正在使用服务器机房周围的杂项(即遗留)硬件(即不同的供应商 [Dell、HPE 等]、不同的 CPU 类型 [即 AMD、Intel 等]、不同的 BIOS 版本、内存)构建 kubernetes 集群大小等)。Kubernetes 工作节点是否必须具有完全相同的硬件才能使工作负载在集群之间正确平衡(即跨节点分配工作负载)。

我猜从操作系统(即发行版/内核、库、模块和服务)开始的所有内容都必须相同。我只是想找到一个我没有看到好的答案的问题的一般答案?

4

2 回答 2

3

一般来说,在 Kubernetes 中运行异构硬件是可以的。如果你们所有的机器都是 X86 机器,那就没什么好担心的,因为你的 docker 镜像应该可以在任何地方运行。例如,在云中混合不同类型的 Spot 实例是很常见的,而且效果很好。

但是,如果您正在混合架构(即 arm 和 x86)或操作系统(即 windows 和 linux),通常添加一个标签来表明这一点是有意义的。这些是 Kubernetes 1.15+ 中的典型标签:

$ kubectl describe node xxxxx
Name:               xxxxx
Roles:              node
Labels:             beta.kubernetes.io/arch=amd64
                    beta.kubernetes.io/instance-type=dell_xyz
                    beta.kubernetes.io/os=linux
[...]

然后,您可以在 pod 的节点选择器中使用这些标签:

apiVersion: v1
kind: Pod
metadata:
  name: x86-pod
spec:
  containers:
    - name: x86-test
      image: "yourrepo.io/test_repo"
  nodeSelector:
    beta.kubernetes.io/arch: amd64
于 2020-04-27T10:38:46.300 回答
2

从硬件和软件的角度来看,Kubernetes 工作节点可以是异构的。只有 Kubernetes 相关服务(kubelet、容器运行时、CNI)必须与控制平面版本兼容。

您甚至可以混合运行windows 和 linux 节点

于 2020-04-26T21:53:54.653 回答