我在我的项目中使用Google平台。
现在,我有了一个具有4个节点池的集群:
现在,我需要的是我的CPU进程永远不会在GPU机器上工作,因为它们花费了太多的时间,而在GPU机器上这样做只是在白白花钱。
我使用
kubectl run dc-1 --image={image-name} --replicas=1 --restart=Never --limits="nvidia.com/gpu=0,cpu=4000m,memory=2Gi" -- bash -c "command to execute"
现在,如果没有从以前的GPU运行中创建的“GPU-机器”,这是很好的。但是,如果有一个最近的GPU运行,这个命令将运行在那个实例上,因为它有最小的cpu和内存需求。我原以为--limits="nvidia.com/gpu=0能做到这一点,但很明显它没有做到。
我该怎么办?
发布于 2019-08-16 03:46:34
如果要在特定实例或节点上分配吊舱,可以使用kubernetes节点选择器。
例如:
apiVersion: v1
kind: Pod
metadata:
name: nginx
labels:
env: test
spec:
containers:
- name: nginx
image: nginx
imagePullPolicy: IfNotPresent
nodeSelector:
disktype: ssd在这里,它将根据节点选择器(即磁盘类型)分配pod。
您还可以查看这个url以获得更多的文档:https://kubernetes.io/docs/concepts/configuration/assign-pod-node
编辑1:
由于您在GCP上,您也可以使用这种方式:
nodeSelector:
#<labelname>:value
cloud.google.com/gke-nodepool: pool-highcpu8 (poolname)编辑2:
如果您了解affinity和anity-affinity,您也可以实现它。
spec:
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/node-type
operator: In
values:
- gpucpu:
spec:
affinity:
podAntiAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- weight: 100
podAffinityTerm:
labelSelector:
matchExpressions:
- key: resources
operator: In
values:
- cpu-only发布于 2019-08-16 04:40:24
这是污点和容忍的一个很好的用例。您可以使用NoSchedule污染GPU节点。这将防止在GPU节点上无法容忍这种污染的荚(甚至是系统荚)。
kubectl taint nodes gpuNode1 nodetype=gpu:NoSchedule然后,在您想要在这些节点上运行的吊舱上,您可以添加对污染的容忍:
tolerations:
- key: "nodetype"
operator: "Equal"
value: "gpu"
effect: "NoSchedule"我不确定GCP,但在Azure的AKS上,您可以在创建集群和节点池时配置污染。
编辑:
您将希望将其与Manvar对节点选择器和/或亲和力的建议结合起来。仅仅因为你的吊舱可以容忍污染,并不意味着它一定会被安排在GPU节点上,它只会确保其他事情不会。
https://stackoverflow.com/questions/57518631
复制相似问题