@@ -52,6 +52,7 @@ import (
5252type Server struct {
5353 SecretClient corev1.SecretInterface
5454 PodClient corev1.PodInterface
55+ NodeClient corev1.NodeInterface
5556 SharedPath string
5657 FSBaseURL string
5758 FileTransferImage string
@@ -475,19 +476,22 @@ func (b *Server) runPodDefinition(runContainer v1.Container, runMetadata *runMet
475476 Controller : & boolTrue ,
476477 }
477478
478- affinity := & v1.Affinity {
479- PodAffinity : & v1.PodAffinity {
480- RequiredDuringSchedulingIgnoredDuringExecution : []v1.PodAffinityTerm {
481- {
482- LabelSelector : & metav1.LabelSelector {
483- MatchLabels : map [string ]string {
484- "app" : b .PeerID ,
479+ var affinity * v1.Affinity = nil
480+ if b .hasZoneLabels () {
481+ affinity = & v1.Affinity {
482+ PodAffinity : & v1.PodAffinity {
483+ RequiredDuringSchedulingIgnoredDuringExecution : []v1.PodAffinityTerm {
484+ {
485+ LabelSelector : & metav1.LabelSelector {
486+ MatchLabels : map [string ]string {
487+ "app" : b .PeerID ,
488+ },
485489 },
490+ TopologyKey : "topology.kubernetes.io/zone" ,
486491 },
487- TopologyKey : "topology.kubernetes.io/zone" ,
488492 },
489493 },
490- },
494+ }
491495 }
492496
493497 return & v1.Pod {
@@ -547,6 +551,20 @@ func (b *Server) runPodDefinition(runContainer v1.Container, runMetadata *runMet
547551 }
548552}
549553
554+ func (b * Server ) hasZoneLabels () bool {
555+ nodes , err := b .NodeClient .List (context .TODO (), metav1.ListOptions {})
556+ if err != nil {
557+ // If API call fails, better to assume zone labels are absent
558+ return false
559+ }
560+ for _ , node := range nodes .Items {
561+ if _ , ok := node .Labels ["topology.kubernetes.io/zone" ]; ok {
562+ return true
563+ }
564+ }
565+ return false
566+ }
567+
550568func (b * Server ) runContainerDefinition (ccType string , rmd * runMetadata ) (v1.Container , error ) {
551569 switch strings .ToLower (ccType ) {
552570 case "golang" :
0 commit comments