我有一个应用程序在多线程中运行,在单个实例上需要多个内核。只是想知道如何将多个pod(即容器)合并到一个大节点中,以便应用程序可以在这个大节点上运行。例如:64个pod合并为一个(即64核)。
这不是用于生产或HA服务,只是用于计算。应用程序不能重写。
有这个参考,有点过时了。
首先,在单个节点上运行多个pod不能被称为"合并",我想分配或调度是更好的动词。
你只需要标记你的节点,然后安排你的pod在带有该标签的节点上生成:
-
运行:
kubectl get nodes
,注意节点名 -
kubectl label nodes <node-name> bignode=yes
-
验证您的节点当前被标记:
kubectl get nodes --show-labels
-
那么在你的pod定义中,定义一个节点选择器:
apiVersion: v1
kind: Pod
metadata:
name: nginx
labels:
env: test
spec:
containers:
- name: nginx
image: nginx
imagePullPolicy: IfNotPresent
nodeSelector:
bignode: yes <-----------
Kubernetes文档中的更多信息:https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/
更新:另一种方法是根据需要将CPU请求设置得尽可能高,所以kubernetes会给你的pod安排足够的CPU内核。
可以是:
apiVersion: v1
kind: Pod
metadata:
name: nginx
labels:
env: test
spec:
containers:
- name: nginx
image: nginx
imagePullPolicy: IfNotPresent
resources:
requests:
memory: "2048Mi"
cpu: "60"
更多信息:https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
如果你关心的只是CPU内核的数量,第二个解决方案更可靠,如果将所有pod放在单个节点上很重要,您也可以阅读有关亲和性规则的内容。
仅使用Kubernetes是无法做到这一点的。K8s不能将节点合并为单个计算单元。
如果您有一个节点,有60个CPU内核,您可以为您的应用程序分配60个内核。
如果您有2个节点,每个节点有30个CPU内核,那么您只能在每个节点上为您的应用程序分配30个CPU内核。
您链接的帖子中的解决方案是您的情况。