Skip to content
This repository was archived by the owner on Feb 16, 2026. It is now read-only.
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,11 @@

public class GKEConfig {

private static final String DEFAULT_JVM_ARGS = "-Xms1g -Xmx1g";
private static final int DEFAULT_SLAVE_REPLICA_COUNT = 2;
private static final String DEFAULT_CPU_REQUEST = "1000m";
private static final String DEFAULT_MEMORY_REQUEST = "1Gi";

@SerializedName(value = "cluster_name", alternate = "clusterName")
@Expose
private String clusterName;
Expand Down Expand Up @@ -61,6 +66,34 @@ public class GKEConfig {
@Expose
private String nodeLocations;

@SerializedName(value = "master_jvm_args", alternate = "masterJvmArgs")
@Expose
private String masterJvmArgs;

@SerializedName(value = "slave_jvm_args", alternate = "slaveJvmArgs")
@Expose
private String slaveJvmArgs;

@SerializedName(value = "master_cpu_request", alternate = "masterCPURequest")
@Expose
private String masterCPURequest;

@SerializedName(value = "master_memory_request", alternate = "masterMemoryRequest")
@Expose
private String masterMemoryRequest;

@SerializedName(value = "slave_cpu_request", alternate = "slaveCPURequest")
@Expose
private String slaveCPURequest;

@SerializedName(value = "slave_memory_request", alternate = "slaveMemoryRequest")
@Expose
private String slaveMemoryRequest;

@SerializedName(value = "slave_replica_count", alternate = "slaveReplicaCount")
@Expose
private int slaveReplicaCount;

@SerializedName(value = "min_count", alternate = "minCount")
@Expose
private int minCount;
Expand Down Expand Up @@ -153,6 +186,109 @@ public void setNodeLocations(String nodeLocations) {
this.nodeLocations = nodeLocations;
}

public String getMasterJvmArgs() {
if (masterJvmArgs == null) masterJvmArgs = DEFAULT_JVM_ARGS;
;
return masterJvmArgs;
}

public void setMasterJvmArgs(String masterJvmArgs) {
if (masterJvmArgs == null) {
this.masterJvmArgs = DEFAULT_JVM_ARGS;
return;
}
this.masterJvmArgs = masterJvmArgs;
}

public String getSlaveJvmArgs() {
if (slaveJvmArgs == null) slaveJvmArgs = DEFAULT_JVM_ARGS;
;
return slaveJvmArgs;
}

public void setSlaveJvmArgs(String slaveJvmArgs) {
if (slaveJvmArgs == null) {
this.slaveJvmArgs = DEFAULT_JVM_ARGS;
return;
}
this.slaveJvmArgs = slaveJvmArgs;
}

public String getMasterCPURequest() {
if (masterCPURequest == null) masterCPURequest = DEFAULT_CPU_REQUEST;
;
return masterCPURequest;
}

public void setMasterCPURequest(String masterCPURequest) {
if (masterCPURequest == null) {
this.masterCPURequest = DEFAULT_CPU_REQUEST;
return;
}
;
this.masterCPURequest = masterCPURequest;
}

public String getMasterMemoryRequest() {
if (masterMemoryRequest == null) masterMemoryRequest = DEFAULT_MEMORY_REQUEST;
;
return masterMemoryRequest;
}

public void setMasterMemoryRequest(String masterMemoryRequest) {
if (masterMemoryRequest == null) {
this.masterMemoryRequest = DEFAULT_MEMORY_REQUEST;
return;
}
;
this.masterMemoryRequest = masterMemoryRequest;
}

public String getSlaveCPURequest() {
if (slaveCPURequest == null) slaveCPURequest = DEFAULT_MEMORY_REQUEST;
;
return slaveCPURequest;
}

public void setSlaveCPURequest(String slaveCPURequest) {
if (slaveCPURequest == null) {
this.slaveCPURequest = DEFAULT_CPU_REQUEST;
return;
}
;
this.slaveCPURequest = slaveCPURequest;
}

public String getSlaveMemoryRequest() {
if (slaveMemoryRequest == null) slaveMemoryRequest = DEFAULT_MEMORY_REQUEST;
;
return slaveMemoryRequest;
}

public void setSlaveMemoryRequest(String slaveMemoryRequest) {
if (slaveMemoryRequest == null) {
this.slaveMemoryRequest = DEFAULT_MEMORY_REQUEST;
return;
}
;
this.slaveMemoryRequest = slaveMemoryRequest;
}

public int getSlaveReplicaCount() {
if (slaveReplicaCount <= 0) slaveReplicaCount = DEFAULT_SLAVE_REPLICA_COUNT;
;
return slaveReplicaCount;
}

public void setSlaveReplicaCount(int slaveReplicaCount) {
if (slaveReplicaCount <= 0) {
this.slaveReplicaCount = DEFAULT_SLAVE_REPLICA_COUNT;
return;
}
;
this.slaveReplicaCount = slaveReplicaCount;
}

public int getMinCount() {
return minCount;
}
Expand Down
34 changes: 26 additions & 8 deletions machmeter/src/main/resources/terraform/main.tf
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,13 @@ variable "gke_config" {
service_account_json = string
machine_type = string
node_locations = string
master_jvm_args = string
slave_jvm_args = string
master_cpu_request = string
master_memory_request = string
slave_cpu_request = string
slave_memory_request = string
slave_replica_count = number
min_count = number
max_count = number
initial_node_count = number
Expand Down Expand Up @@ -118,7 +125,7 @@ module "gke" {
ip_range_pods = var.gke_config.ip_range_pods_name
ip_range_services = var.gke_config.ip_range_services_name
grant_registry_access = true
remove_default_node_pool = false
remove_default_node_pool = true
create_service_account = false
node_pools = [
{
Expand Down Expand Up @@ -299,10 +306,20 @@ resource "kubernetes_deployment" "jmeter-master" {
port {
container_port = 60000
}
resources {
requests = {
cpu = var.gke_config.master_cpu_request
memory = var.gke_config.master_memory_request
}
}
env {
name = "GOOGLE_APPLICATION_CREDENTIALS"
value = "/var/secrets/google/key.json"
}
env {
name = "JVM_ARGS"
value: var.gke_config.master_jvm_args
}
}
volume {
name = "loadtest"
Expand Down Expand Up @@ -336,7 +353,7 @@ resource "kubernetes_stateful_set" "jmeter-slave" {
}
spec {
service_name = "jmeter-slaves"
replicas = 2
replicas = var.gke_config.slave_replica_count
selector {
match_labels = {
jmeter_mode = "slave"
Expand Down Expand Up @@ -368,18 +385,19 @@ resource "kubernetes_stateful_set" "jmeter-slave" {
container_port = 50000
}
resources {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why are we removing these resources, this would mean pod can take max availabe resources on a node. Instead we should have keep these values as default and have an option to override these from setup.json .

Copy link
Contributor Author

@rahul2393 rahul2393 Apr 17, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Recently we have seen people trying with lesser configuration node in which case if we go with the values as default Machmeter will through Unschedule errors, can you think of any scenario where we don't want the pods to use all the available resources on node?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In that case what we can do is have a smaller value for requests which can be the minimum requirement for running Jmeter and remove the limits section.

Keeping requests will make sure that when pod is getting scheduled it gets minimum resources to run Jmeter.

One can create 1000 slaves, but when they will try to run , it might fail.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Make sense, done

limits = {
cpu = "1000m"
memory = "2Gi"
}
requests = {
cpu = "1000m"
memory = "2Gi"
cpu = var.gke_config.slave_cpu_request
memory = var.gke_config.slave_memory_request
}
}
env {
name = "GOOGLE_APPLICATION_CREDENTIALS"
value = "/var/secrets/google/key.json"

}
env {
name = "JVM_ARGS"
value: var.gke_config.slave_jvm_args
}
}
volume {
Expand Down