|
|
|
@@ -377,12 +377,48 @@ public class K8sClientUtil { |
|
|
|
|
|
|
|
// 创建配置好的Pod |
|
|
|
public Integer createConfiguredPod(String podName, String namespace, Integer port, String mountPath, V1PersistentVolumeClaim pvc, String image, String dataPvcName, String datasetPath, String modelPath) { |
|
|
|
Map<String, String> selector = new LinkedHashMap<>(); |
|
|
|
selector.put("k8s-jupyter", podName); |
|
|
|
|
|
|
|
//设置选择节点,pod反亲和性 |
|
|
|
Map<String, String> selector = new LinkedHashMap<>(); |
|
|
|
selector.put("k8s-jupyter", "CPU-GPU"); |
|
|
|
Map<String, String> nodeSelector = new LinkedHashMap<>(); |
|
|
|
nodeSelector.put("resource-type", "CPU-GPU"); |
|
|
|
|
|
|
|
V1LabelSelectorRequirement labelSelectorRequirement = new V1LabelSelectorRequirement() |
|
|
|
.key("k8s-jupyter").operator("NotIn").values(Collections.singletonList("CPU-GPU")); |
|
|
|
|
|
|
|
V1LabelSelector labelSelector = new V1LabelSelector() |
|
|
|
.matchExpressions(Collections.singletonList(labelSelectorRequirement)); |
|
|
|
|
|
|
|
V1PodAffinityTerm podAffinityTerm = new V1PodAffinityTerm() |
|
|
|
.labelSelector(labelSelector) |
|
|
|
.namespaces(Collections.singletonList(namespace)) |
|
|
|
.topologyKey("kubernetes.io/hostname"); |
|
|
|
|
|
|
|
V1PodAffinity podAffinity = new V1PodAffinity() |
|
|
|
.requiredDuringSchedulingIgnoredDuringExecution(Collections.singletonList(podAffinityTerm)); |
|
|
|
|
|
|
|
V1LabelSelectorRequirement antiLabelSelectorRequirement = new V1LabelSelectorRequirement() |
|
|
|
.key("k8s-jupyter").operator("In").values(Collections.singletonList("CPU-GPU")); |
|
|
|
|
|
|
|
V1LabelSelector antiLabelSelector = new V1LabelSelector() |
|
|
|
.matchExpressions(Collections.singletonList(antiLabelSelectorRequirement)); |
|
|
|
|
|
|
|
V1PodAffinityTerm antiPodAffinityTerm = new V1PodAffinityTerm() |
|
|
|
.labelSelector(antiLabelSelector) |
|
|
|
.namespaces(Collections.singletonList(namespace)) |
|
|
|
.topologyKey("kubernetes.io/hostname"); |
|
|
|
|
|
|
|
// V1WeightedPodAffinityTerm weightedPodAffinityTerm = new V1WeightedPodAffinityTerm().weight(100).podAffinityTerm(podAffinityTerm); |
|
|
|
|
|
|
|
V1PodAntiAffinity podAntiAffinity = new V1PodAntiAffinity() |
|
|
|
.requiredDuringSchedulingIgnoredDuringExecution(Collections.singletonList(antiPodAffinityTerm)); |
|
|
|
|
|
|
|
V1Affinity v1Affinity = new V1Affinity() |
|
|
|
.podAffinity(podAffinity) |
|
|
|
.podAntiAffinity(podAntiAffinity); |
|
|
|
|
|
|
|
// 创建Pod |
|
|
|
CoreV1Api api = new CoreV1Api(apiClient); |
|
|
|
V1PodList v1PodList = null; |
|
|
|
try { |
|
|
|
@@ -427,6 +463,7 @@ public class K8sClientUtil { |
|
|
|
.endContainer() |
|
|
|
.withVolumes(volumes) |
|
|
|
.withNodeSelector(nodeSelector) |
|
|
|
.withAffinity(v1Affinity) |
|
|
|
.endSpec() |
|
|
|
.build(); |
|
|
|
|
|
|
|
|