Kubernetes工作节点必须具有完全相同的硬件和操作系统吗?

dsh*_*eld 5 server-hardware kubernetes kubernetes-cluster

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

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

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

Sha*_*k V 5

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

您甚至可以混合运行Windows 和 Linux 节点


小智 5

一般来说,在 Kubernetes 中运行异构硬件是可以的。如果你们所有的机器都是 X86 机器,则无需担心,因为您的 docker 镜像应该可以在任何地方运行。例如,在云中混合不同类型的现货实例是很常见的,而且这种方法效果很好。

然而,如果您混合使用架构(即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
[...]
Run Code Online (Sandbox Code Playgroud)

然后,您可以在 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
Run Code Online (Sandbox Code Playgroud)