Skip to content

Commit a323abc

Browse files
committed
Update server Pod template
Signed-off-by: Wenqi Qiu <wenqiq@vmware.com>
1 parent 14946d3 commit a323abc

File tree

16 files changed

+156
-295
lines changed

16 files changed

+156
-295
lines changed

test/performance/assets/service/server_pod.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ spec:
99
- -f
1010
image: busybox
1111
imagePullPolicy: IfNotPresent
12-
name: antrea-scale-test-client
12+
name: antrea-scale-test-server
1313
resources:
1414
limits:
1515
cpu: 20m
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,7 @@ func RestartController(ctx context.Context, ch chan time.Duration, data *ScaleDa
124124
prober := fmt.Sprintf("%s:%d", "", antreaapis.AntreaControllerAPIPort)
125125

126126
var clientPod *corev1.Pod
127-
clientPod, err = client_pod.CreatePod(ctx, data.kubernetesClientSet, []string{prober}, client_pod.ScaleClientPodControllerProbeContainer)
127+
clientPod, err = client_pod.CreatePod(ctx, data.kubernetesClientSet, []string{prober}, client_pod.ScaleClientPodControllerProbeContainer, client_pod.ClientPodsNamespace)
128128
if err != nil {
129129
klog.ErrorS(err, "Create client test Pod failed")
130130
return

test/performance/framework/client_pod/create.go

Lines changed: 77 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,12 +33,12 @@ const (
3333
ScaleClientPodServerContainer = "client-pod-server"
3434
ScaleClientPodProbeContainer = "networkpolicy-client-probe"
3535
ScaleClientPodControllerProbeContainer = "controller-client-probe"
36+
ScaleTestPodProbeContainerName = "antrea-scale-client-pod-probe"
3637
)
3738

38-
func CreatePod(ctx context.Context, kClient kubernetes.Interface, probes []string, containerName string) (*corev1.Pod, error) {
39+
func CreatePod(ctx context.Context, kClient kubernetes.Interface, probes []string, containerName, namespace string) (*corev1.Pod, error) {
3940
var err error
4041
var newPod *corev1.Pod
41-
namespace := ClientPodsNamespace
4242
podName := ScaleTestClientPodNamePrefix + uuid.New().String()[:6]
4343
err = retry.RetryOnConflict(retry.DefaultRetry, func() error {
4444
newPod = &corev1.Pod{
@@ -110,3 +110,78 @@ func CreatePod(ctx context.Context, kClient kubernetes.Interface, probes []strin
110110
klog.InfoS("Create Client Pod successfully!")
111111
return newPod, nil
112112
}
113+
114+
//
115+
// func CreateClientPod(ctx context.Context, kClient kubernetes.Interface, namespace, podName string, probes []string, containerName string) (*corev1.Pod, error) {
116+
// var err error
117+
// expectContainerNum := 0
118+
// var newPod *corev1.Pod
119+
// err = retry.RetryOnConflict(retry.DefaultRetry, func() error {
120+
// pod, err := kClient.CoreV1().Pods(namespace).Get(ctx, podName, metav1.GetOptions{})
121+
// if err != nil {
122+
// return err
123+
// }
124+
// var containers []corev1.Container
125+
// for _, probe := range probes {
126+
// l := strings.Split(probe, ":")
127+
// server, port := l[0], l[1]
128+
// if server == "" {
129+
// server = "$NODE_IP"
130+
// }
131+
//
132+
// containers = append(containers, corev1.Container{
133+
// Name: containerName,
134+
// Image: "busybox",
135+
// // read up rest </proc/uptime; t1="${up%.*}${up#*.}"
136+
// Command: []string{"/bin/sh", "-c", fmt.Sprintf("server=%s; output_file=\"ping_log.txt\"; if [ ! -e \"$output_file\" ]; then touch \"$output_file\"; fi; last_status=\"unknown\"; last_change_time=$(adjtimex | awk '/(time.tv_sec|time.tv_usec):/ { printf(\"%%06d\", $2) }' && printf \"\\n\"); while true; do current_time=$(adjtimex | awk '/(time.tv_sec|time.tv_usec):/ { printf(\"%%06d\", $2) }' && printf \"\\n\"); status=$(nc -vz -w 1 \"$server\" %s > /dev/null && echo \"up\" || echo \"down\"); time_diff=$((current_time - last_change_time)); if [ \"$status\" != \"$last_status\" ]; then echo \"$current_time Status changed from $last_status to $status after ${time_diff} nanoseconds\"; echo \"$current_time Status changed from $last_status to $status after ${time_diff} nanoseconds\" >> \"$output_file\"; last_change_time=$current_time; last_status=$status; fi; sleep 0.1; done\n", server, port)},
137+
// ImagePullPolicy: corev1.PullIfNotPresent,
138+
// Env: []corev1.EnvVar{
139+
// {
140+
// Name: "NODE_IP",
141+
// ValueFrom: &corev1.EnvVarSource{
142+
// FieldRef: &corev1.ObjectFieldSelector{
143+
// FieldPath: "status.hostIP",
144+
// },
145+
// },
146+
// },
147+
// },
148+
// })
149+
// }
150+
//
151+
// pod.Spec.Containers = append(pod.Spec.Containers, containers...)
152+
// expectContainerNum = len(pod.Spec.Containers)
153+
//
154+
// newPod = &corev1.Pod{
155+
// ObjectMeta: metav1.ObjectMeta{
156+
// Name: strings.Replace(pod.Name, "server", "client", 1),
157+
// Namespace: pod.Namespace,
158+
// Labels: pod.Labels,
159+
// },
160+
// Spec: pod.Spec,
161+
// }
162+
//
163+
// _, err = kClient.CoreV1().Pods(namespace).Create(ctx, newPod, metav1.CreateOptions{})
164+
// return err
165+
// })
166+
// if err != nil {
167+
// return nil, err
168+
// }
169+
//
170+
// err = wait.PollWithContext(ctx, 3*time.Second, 60*time.Second, func(ctx context.Context) (bool, error) {
171+
// pod, err := kClient.CoreV1().Pods(namespace).Get(ctx, newPod.Name, metav1.GetOptions{})
172+
// if err != nil {
173+
// return false, err
174+
// }
175+
//
176+
// if expectContainerNum == len(pod.Spec.Containers) && pod.Status.Phase == corev1.PodRunning {
177+
// return true, nil
178+
// }
179+
// return false, nil
180+
// })
181+
//
182+
// if err != nil {
183+
// return nil, err
184+
// }
185+
// klog.InfoS("Create Client Pod successfully!")
186+
// return newPod, nil
187+
// }

test/performance/framework/component/agent/scale_down.go

Lines changed: 0 additions & 15 deletions
This file was deleted.

test/performance/framework/component/agent/scale_up.go

Lines changed: 0 additions & 15 deletions
This file was deleted.

test/performance/framework/component/controller/scale_down.go

Lines changed: 0 additions & 15 deletions
This file was deleted.

test/performance/framework/component/controller/scale_up.go

Lines changed: 0 additions & 15 deletions
This file was deleted.

test/performance/framework/networkpolicy/scale_up.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@ func ScaleUp(ctx context.Context, cs kubernetes.Interface, nss []string, numPerN
112112
klog.ErrorS(err, "selectServerPod")
113113
return 0, fmt.Errorf("select server Pod error: %+v", err)
114114
}
115-
clientPod, err = client_pod.CreatePod(ctx, cs, []string{fmt.Sprintf("%s:%d", serverIP, 80)}, client_pod.ScaleClientPodProbeContainer)
115+
clientPod, err = client_pod.CreatePod(ctx, cs, []string{fmt.Sprintf("%s:%d", serverIP, 80)}, client_pod.ScaleClientPodProbeContainer, client_pod.ClientPodsNamespace)
116116
if err != nil {
117117
klog.ErrorS(err, "Create client test Pod failed")
118118
return 0, fmt.Errorf("create client test Pod failed: %+v", err)
Lines changed: 48 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -15,14 +15,17 @@
1515
package framework
1616

1717
import (
18+
"bytes"
1819
"context"
1920
"fmt"
21+
yamlutil "k8s.io/apimachinery/pkg/util/yaml"
22+
"os"
23+
"path"
2024
"time"
2125

2226
"github.com/google/uuid"
2327
"golang.org/x/sync/errgroup"
2428
corev1 "k8s.io/api/core/v1"
25-
"k8s.io/apimachinery/pkg/api/resource"
2629
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
2730
"k8s.io/apimachinery/pkg/util/wait"
2831
"k8s.io/klog/v2"
@@ -41,62 +44,48 @@ const (
4144
workloadPodLabelValue = ""
4245
)
4346

44-
var (
45-
workloadPodContainer = corev1.Container{
46-
Name: client_pod.ScaleClientContainerName,
47-
Image: "busybox",
48-
ImagePullPolicy: corev1.PullIfNotPresent,
49-
Command: []string{"httpd", "-f"},
50-
Resources: corev1.ResourceRequirements{
51-
Limits: corev1.ResourceList{
52-
corev1.ResourceMemory: resource.MustParse("64Mi"),
53-
corev1.ResourceCPU: resource.MustParse("20m"),
54-
},
55-
Requests: corev1.ResourceList{
56-
corev1.ResourceMemory: resource.MustParse("32Mi"),
57-
corev1.ResourceCPU: resource.MustParse("10m"),
58-
},
59-
},
47+
func unmarshallServerPod(yamlFile string) (*corev1.Pod, error) {
48+
klog.InfoS("ReadYamlFile", "yamlFile", yamlFile)
49+
podBytes, err := os.ReadFile(yamlFile)
50+
if err != nil {
51+
return nil, fmt.Errorf("error reading YAML file: %+v", err)
6052
}
61-
)
53+
pod := &corev1.Pod{}
6254

63-
func workloadPodTemplate(podName, ns string, labels map[string]string, onRealNode bool) *corev1.Pod {
64-
var affinity *corev1.Affinity
65-
var tolerations []corev1.Toleration
66-
if onRealNode {
67-
affinity = &client_pod.RealNodeAffinity
68-
tolerations = append(tolerations, client_pod.MasterToleration)
69-
} else {
70-
affinity = &client_pod.SimulateAffinity
71-
tolerations = append(tolerations, client_pod.SimulateToleration)
72-
}
73-
labels[workloadPodLabelKey] = workloadPodLabelValue
74-
labels["name"] = podName
75-
return &corev1.Pod{
76-
ObjectMeta: metav1.ObjectMeta{
77-
Name: podName,
78-
Namespace: ns,
79-
Labels: labels,
80-
},
81-
Spec: corev1.PodSpec{
82-
Affinity: affinity,
83-
Containers: []corev1.Container{workloadPodContainer},
84-
RestartPolicy: corev1.RestartPolicyNever,
85-
Tolerations: tolerations,
86-
},
55+
decoder := yamlutil.NewYAMLOrJSONDecoder(bytes.NewReader(podBytes), 100)
56+
57+
if err := decoder.Decode(pod); err != nil {
58+
return nil, fmt.Errorf("error decoding YAML file: %+v", err)
8759
}
60+
return pod, nil
8861
}
8962

90-
func newWorkloadPod(podName, ns string, onRealNode bool, labelNum int) *corev1.Pod {
91-
labels := map[string]string{
92-
client_pod.AppLabelKey: client_pod.AppLabelValue,
93-
"namespace": ns,
94-
fmt.Sprintf("%s%d", utils.SelectorLabelKeySuffix, labelNum): fmt.Sprintf("%s%d", utils.SelectorLabelValueSuffix, labelNum),
63+
func renderServerPods(templatePath string, ns string, num, serviceNum int) (serverPods []*corev1.Pod, err error) {
64+
yamlFile := path.Join(templatePath, "service/server_pod.yaml")
65+
podTemplate, err := unmarshallServerPod(yamlFile)
66+
if err != nil {
67+
err = fmt.Errorf("error reading Service template: %+v", err)
68+
return
9569
}
96-
if onRealNode {
97-
labels[utils.PodOnRealNodeLabelKey] = ""
70+
71+
for i := 0; i < num; i++ {
72+
labelNum := i % serviceNum
73+
podName := fmt.Sprintf("antrea-scale-test-pod-server-%s", uuid.New().String()[:8])
74+
serverPod := &corev1.Pod{Spec: podTemplate.Spec}
75+
serverPod.Name = podName
76+
serverPod.Namespace = ns
77+
serverPod.Labels = map[string]string{
78+
"name": podName,
79+
utils.PodOnRealNodeLabelKey: "",
80+
client_pod.AppLabelKey: client_pod.AppLabelValue,
81+
workloadPodLabelKey: workloadPodLabelValue,
82+
fmt.Sprintf("%s%d", utils.SelectorLabelKeySuffix, labelNum): fmt.Sprintf("%s%d", utils.SelectorLabelValueSuffix, labelNum),
83+
}
84+
serverPod.Spec.Affinity = &client_pod.RealNodeAffinity
85+
serverPods = append(serverPods, serverPod)
9886
}
99-
return workloadPodTemplate(podName, ns, labels, onRealNode)
87+
88+
return
10089
}
10190

10291
func ScaleUpWorkloadPods(ctx context.Context, ch chan time.Duration, data *ScaleData) (res ScaleResult) {
@@ -112,27 +101,24 @@ func ScaleUpWorkloadPods(ctx context.Context, ch chan time.Duration, data *Scale
112101
start := time.Now()
113102
podNum := data.Specification.PodsNumPerNs
114103
res.scaleNum = len(data.namespaces) * podNum
104+
serviceNumPerNs := data.Specification.SvcNumPerNs
115105
count := 0
116106
for _, ns := range data.namespaces {
117107
gErr, _ := errgroup.WithContext(context.Background())
118-
for i := 0; i < podNum; i++ {
119-
// index := i
120-
time.Sleep(time.Duration(utils.GenRandInt()%100) * time.Millisecond)
121-
labelNum := i/2 + 1
108+
var pods []*corev1.Pod
109+
pods, err = renderServerPods(data.templateFilesPath, ns, podNum, serviceNumPerNs)
110+
if err != nil {
111+
return
112+
}
113+
for i, _ := range pods {
122114
gErr.Go(func() error {
123-
podName := fmt.Sprintf("antrea-scale-test-pod-server-%s", uuid.New().String()[:8])
124-
pod := newWorkloadPod(podName, ns, true, labelNum)
125-
// if !data.Specification.RealNode {
126-
// onRealNode := (index % data.nodesNum) >= data.simulateNodesNum
127-
// pod = newWorkloadPod(podName, ns, onRealNode, labelNum)
128-
// }
129-
if _, err := data.kubernetesClientSet.CoreV1().Pods(ns).Create(ctx, pod, metav1.CreateOptions{}); err != nil {
115+
if _, err := data.kubernetesClientSet.CoreV1().Pods(ns).Create(ctx, pods[i], metav1.CreateOptions{}); err != nil {
130116
return err
131117
}
132118
return nil
133119
})
134120
}
135-
klog.V(2).InfoS("Create workload Pods", "PodNum", podNum, "Namespace", ns)
121+
klog.V(2).InfoS("Create workload Pods", "PodNum", podNum, "Namespace", ns, "Pods", pods)
136122
if err = gErr.Wait(); err != nil {
137123
return
138124
}

0 commit comments

Comments
 (0)