当我使用构建虚拟机管理程序(即VMWare、Hyper-V等)时群集,所有硬件和软件都必须完全相同。否则,如果其中一个节点出现故障,我会运行工作负载进入“冲突”的可能性(即,VM将不会运行,因为硬件或操作系统不同)。
如果您正在使用服务器机房中的各种(即传统)硬件(即不同的供应商Dell、HPE等、不同的CPU类型如AMD、Intel等、不同的BIOS版本、内存大小等)构建kubernetes群集。kubernetes worker节点是否必须使用完全相同的硬件才能在集群中正确平衡工作负载(即跨节点分配工作负载)。
我想从操作系统(即发行版/内核、库、模块和服务)开始,所有的东西都必须是相同的。我只是试图找到一个问题的一般答案,我还没有看到一个好的答案?
发布于 2020-04-27 18:38:46
一般来说,在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-27 05:53:55
从硬件和软件的角度来看,Kubernetes工作节点都可以是异构的。只有与kubernetes相关的服务(kubelet、容器运行时、CNI)必须与控制平面版本兼容。
你甚至可以运行混合的windows and linux nodes。
https://stackoverflow.com/questions/61448237
复制相似问题