in network/benchmarks/netperf/lib/utilslib.go [130:229]
func createRCs(c *kubernetes.Clientset, testParams TestParams, primaryNode, secondaryNode api.Node) error {
// Create the orchestrator RC
name := "netperf-orch"
fmt.Println("Creating replication controller", name)
replicas := int32(1)
_, err := c.CoreV1().ReplicationControllers(testParams.TestNamespace).Create(context.Background(), &api.ReplicationController{
ObjectMeta: metav1.ObjectMeta{Name: name},
Spec: api.ReplicationControllerSpec{
Replicas: &replicas,
Selector: map[string]string{"app": name},
Template: &api.PodTemplateSpec{
ObjectMeta: metav1.ObjectMeta{
Labels: map[string]string{"app": name},
},
Spec: api.PodSpec{
NodeSelector: map[string]string{"kubernetes.io/os": "linux", "kubernetes.io/arch": "amd64"},
Containers: []api.Container{
{
Name: name,
Image: testParams.Image,
Ports: []api.ContainerPort{{ContainerPort: orchestratorPort}},
Args: []string{
"--mode=orchestrator",
fmt.Sprintf("--testFrom=%d", testParams.TestFrom),
fmt.Sprintf("--testTo=%d", testParams.TestTo),
},
ImagePullPolicy: "Always",
},
},
TerminationGracePeriodSeconds: new(int64),
},
},
},
}, metav1.CreateOptions{})
if err != nil {
return fmt.Errorf("error creating orchestrator replication controller %s: %v", name, err)
}
fmt.Println("Created orchestrator replication controller")
for i := 1; i <= 3; i++ {
// Bring up pods slowly
time.Sleep(3 * time.Second)
kubeNode := primaryNode.GetName()
if i == 3 {
kubeNode = secondaryNode.GetName()
}
name = fmt.Sprintf("netperf-w%d", i)
fmt.Println("Creating replication controller", name)
portSpec := []api.ContainerPort{}
if i > 1 {
// Worker W1 is a client-only pod - no ports are exposed
portSpec = append(portSpec, api.ContainerPort{ContainerPort: iperf3Port, Protocol: api.ProtocolTCP})
portSpec = append(portSpec, api.ContainerPort{ContainerPort: iperf3Port, Protocol: api.ProtocolSCTP})
}
workerEnv := []api.EnvVar{
{Name: "worker", Value: name},
{Name: "kubeNode", Value: kubeNode},
{Name: "podname", Value: name},
}
replicas := int32(1)
_, err := c.CoreV1().ReplicationControllers(testParams.TestNamespace).Create(context.Background(), &api.ReplicationController{
ObjectMeta: metav1.ObjectMeta{Name: name},
Spec: api.ReplicationControllerSpec{
Replicas: &replicas,
Selector: map[string]string{"app": name},
Template: &api.PodTemplateSpec{
ObjectMeta: metav1.ObjectMeta{
Labels: map[string]string{"app": name},
},
Spec: api.PodSpec{
NodeName: kubeNode,
Containers: []api.Container{
{
Name: name,
Image: testParams.Image,
Ports: portSpec,
Args: []string{
"--mode=worker",
fmt.Sprintf("--testFrom=%d", testParams.TestFrom),
fmt.Sprintf("--testTo=%d", testParams.TestTo),
},
Env: workerEnv,
ImagePullPolicy: "Always",
},
},
TerminationGracePeriodSeconds: new(int64),
},
},
},
}, metav1.CreateOptions{})
if err != nil {
return fmt.Errorf("error creating worker replication controller %s: %v", name, err)
}
}
return nil
}