From 2d7e05959656385a0d1b31134417042fd6052ad2 Mon Sep 17 00:00:00 2001 From: Rahul Yadav Date: Mon, 17 Apr 2023 10:43:46 +0530 Subject: [PATCH 1/4] fix: JVM_ARGS should be parameterised and configured on jmeter pods --- .../com/google/cloud/machmeter/model/GKEConfig.java | 12 ++++++++++++ machmeter/src/main/resources/terraform/main.tf | 10 ++++++++++ .../sample-configs/setup.json | 3 ++- .../movies-database/sample-configs/setup.json | 3 ++- .../finance/ledger/sample-configs/setup.json | 3 ++- .../usecases/shopping/cart/sample-configs/setup.json | 3 ++- 6 files changed, 30 insertions(+), 4 deletions(-) diff --git a/machmeter/src/main/java/com/google/cloud/machmeter/model/GKEConfig.java b/machmeter/src/main/java/com/google/cloud/machmeter/model/GKEConfig.java index 4759deb..3a63e95 100644 --- a/machmeter/src/main/java/com/google/cloud/machmeter/model/GKEConfig.java +++ b/machmeter/src/main/java/com/google/cloud/machmeter/model/GKEConfig.java @@ -61,6 +61,10 @@ public class GKEConfig { @Expose private String nodeLocations; + @SerializedName(value = "jvm_args", alternate = "jvmArgs") + @Expose + private String jvmArgs; + @SerializedName(value = "min_count", alternate = "minCount") @Expose private int minCount; @@ -153,6 +157,14 @@ public void setNodeLocations(String nodeLocations) { this.nodeLocations = nodeLocations; } + public String getJvmArgs() { + return jvmArgs; + } + + public void setJvmArgs(String jvmArgs) { + this.jvmArgs = jvmArgs; + } + public int getMinCount() { return minCount; } diff --git a/machmeter/src/main/resources/terraform/main.tf b/machmeter/src/main/resources/terraform/main.tf index a31ef37..d7b96e1 100644 --- a/machmeter/src/main/resources/terraform/main.tf +++ b/machmeter/src/main/resources/terraform/main.tf @@ -28,6 +28,7 @@ variable "gke_config" { service_account_json = string machine_type = string node_locations = string + jvm_args = string min_count = number max_count = number initial_node_count = number @@ -303,6 +304,10 @@ resource "kubernetes_deployment" "jmeter-master" { name = "GOOGLE_APPLICATION_CREDENTIALS" value = "/var/secrets/google/key.json" } + env { + name = "JVM_ARGS" + value: var.gke_config.jvm_args + } } volume { name = "loadtest" @@ -380,6 +385,11 @@ resource "kubernetes_stateful_set" "jmeter-slave" { env { name = "GOOGLE_APPLICATION_CREDENTIALS" value = "/var/secrets/google/key.json" + + } + env { + name = "JVM_ARGS" + value: var.gke_config.jvm_args } } volume { diff --git a/machmeter/usecases/education/learning-management-system/sample-configs/setup.json b/machmeter/usecases/education/learning-management-system/sample-configs/setup.json index 876c272..ff34239 100644 --- a/machmeter/usecases/education/learning-management-system/sample-configs/setup.json +++ b/machmeter/usecases/education/learning-management-system/sample-configs/setup.json @@ -22,7 +22,8 @@ "nodeLocations": "us-central1-a,us-central1-b,us-central1-c", "minCount": 3, "maxCount": 3, - "initialNodeCount": 3 + "initialNodeCount": 3, + "jvmArgs": "-Xms1g -Xmx1g" } }, "ddlConfig" : { diff --git a/machmeter/usecases/entertainment/movies-database/sample-configs/setup.json b/machmeter/usecases/entertainment/movies-database/sample-configs/setup.json index 6595375..e63e8c1 100644 --- a/machmeter/usecases/entertainment/movies-database/sample-configs/setup.json +++ b/machmeter/usecases/entertainment/movies-database/sample-configs/setup.json @@ -22,7 +22,8 @@ "nodeLocations": "us-central1-a,us-central1-b,us-central1-c", "minCount": 3, "maxCount": 3, - "initialNodeCount": 3 + "initialNodeCount": 3, + "jvmArgs": "-Xms1g -Xmx1g" } }, "ddlConfig" : { diff --git a/machmeter/usecases/finance/ledger/sample-configs/setup.json b/machmeter/usecases/finance/ledger/sample-configs/setup.json index 222d0b2..229a69f 100644 --- a/machmeter/usecases/finance/ledger/sample-configs/setup.json +++ b/machmeter/usecases/finance/ledger/sample-configs/setup.json @@ -22,7 +22,8 @@ "nodeLocations": "us-central1-a,us-central1-b,us-central1-c", "minCount": 3, "maxCount": 3, - "initialNodeCount": 3 + "initialNodeCount": 3, + "jvmArgs": "-Xms1g -Xmx1g" } }, "ddlConfig" : { diff --git a/machmeter/usecases/shopping/cart/sample-configs/setup.json b/machmeter/usecases/shopping/cart/sample-configs/setup.json index cf5fd07..cbed735 100644 --- a/machmeter/usecases/shopping/cart/sample-configs/setup.json +++ b/machmeter/usecases/shopping/cart/sample-configs/setup.json @@ -22,7 +22,8 @@ "nodeLocations": "us-central1-a,us-central1-b,us-central1-c", "minCount": 3, "maxCount": 3, - "initialNodeCount": 3 + "initialNodeCount": 3, + "jvmArgs": "-Xms1g -Xmx1g" } }, "ddlConfig" : { From 671c931c3c0aae15c46502ccccfc52450606cac4 Mon Sep 17 00:00:00 2001 From: Rahul Yadav Date: Mon, 17 Apr 2023 12:13:18 +0530 Subject: [PATCH 2/4] remove resource limit declaration --- machmeter/src/main/resources/terraform/main.tf | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/machmeter/src/main/resources/terraform/main.tf b/machmeter/src/main/resources/terraform/main.tf index d7b96e1..5f01acd 100644 --- a/machmeter/src/main/resources/terraform/main.tf +++ b/machmeter/src/main/resources/terraform/main.tf @@ -372,16 +372,6 @@ resource "kubernetes_stateful_set" "jmeter-slave" { port { container_port = 50000 } - resources { - limits = { - cpu = "1000m" - memory = "2Gi" - } - requests = { - cpu = "1000m" - memory = "2Gi" - } - } env { name = "GOOGLE_APPLICATION_CREDENTIALS" value = "/var/secrets/google/key.json" From 647851a2a3899f79f825208e150c5503cb127a00 Mon Sep 17 00:00:00 2001 From: Rahul Yadav Date: Fri, 21 Apr 2023 11:11:18 +0530 Subject: [PATCH 3/4] remove default pool --- machmeter/src/main/resources/terraform/main.tf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/machmeter/src/main/resources/terraform/main.tf b/machmeter/src/main/resources/terraform/main.tf index 5f01acd..37a1b12 100644 --- a/machmeter/src/main/resources/terraform/main.tf +++ b/machmeter/src/main/resources/terraform/main.tf @@ -119,7 +119,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 = [ { From d0d4fc44f46b26798685ec79451d2efaeabb276a Mon Sep 17 00:00:00 2001 From: Rahul Yadav Date: Fri, 21 Apr 2023 11:58:37 +0530 Subject: [PATCH 4/4] incorporate requested changes --- .../cloud/machmeter/model/GKEConfig.java | 136 +++++++++++++++++- .../src/main/resources/terraform/main.tf | 26 +++- .../sample-configs/setup.json | 3 +- .../movies-database/sample-configs/setup.json | 3 +- .../finance/ledger/sample-configs/setup.json | 3 +- .../shopping/cart/sample-configs/setup.json | 3 +- 6 files changed, 156 insertions(+), 18 deletions(-) diff --git a/machmeter/src/main/java/com/google/cloud/machmeter/model/GKEConfig.java b/machmeter/src/main/java/com/google/cloud/machmeter/model/GKEConfig.java index 3a63e95..14d8c43 100644 --- a/machmeter/src/main/java/com/google/cloud/machmeter/model/GKEConfig.java +++ b/machmeter/src/main/java/com/google/cloud/machmeter/model/GKEConfig.java @@ -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; @@ -61,9 +66,33 @@ public class GKEConfig { @Expose private String nodeLocations; - @SerializedName(value = "jvm_args", alternate = "jvmArgs") + @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 jvmArgs; + 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 @@ -157,12 +186,107 @@ public void setNodeLocations(String nodeLocations) { this.nodeLocations = nodeLocations; } - public String getJvmArgs() { - return jvmArgs; + 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 setJvmArgs(String jvmArgs) { - this.jvmArgs = jvmArgs; + public void setSlaveReplicaCount(int slaveReplicaCount) { + if (slaveReplicaCount <= 0) { + this.slaveReplicaCount = DEFAULT_SLAVE_REPLICA_COUNT; + return; + } + ; + this.slaveReplicaCount = slaveReplicaCount; } public int getMinCount() { diff --git a/machmeter/src/main/resources/terraform/main.tf b/machmeter/src/main/resources/terraform/main.tf index 37a1b12..8c00396 100644 --- a/machmeter/src/main/resources/terraform/main.tf +++ b/machmeter/src/main/resources/terraform/main.tf @@ -28,7 +28,13 @@ variable "gke_config" { service_account_json = string machine_type = string node_locations = string - jvm_args = 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 @@ -300,13 +306,19 @@ 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.jvm_args + value: var.gke_config.master_jvm_args } } volume { @@ -341,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" @@ -372,6 +384,12 @@ resource "kubernetes_stateful_set" "jmeter-slave" { port { container_port = 50000 } + resources { + requests = { + 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" @@ -379,7 +397,7 @@ resource "kubernetes_stateful_set" "jmeter-slave" { } env { name = "JVM_ARGS" - value: var.gke_config.jvm_args + value: var.gke_config.slave_jvm_args } } volume { diff --git a/machmeter/usecases/education/learning-management-system/sample-configs/setup.json b/machmeter/usecases/education/learning-management-system/sample-configs/setup.json index ff34239..876c272 100644 --- a/machmeter/usecases/education/learning-management-system/sample-configs/setup.json +++ b/machmeter/usecases/education/learning-management-system/sample-configs/setup.json @@ -22,8 +22,7 @@ "nodeLocations": "us-central1-a,us-central1-b,us-central1-c", "minCount": 3, "maxCount": 3, - "initialNodeCount": 3, - "jvmArgs": "-Xms1g -Xmx1g" + "initialNodeCount": 3 } }, "ddlConfig" : { diff --git a/machmeter/usecases/entertainment/movies-database/sample-configs/setup.json b/machmeter/usecases/entertainment/movies-database/sample-configs/setup.json index e63e8c1..6595375 100644 --- a/machmeter/usecases/entertainment/movies-database/sample-configs/setup.json +++ b/machmeter/usecases/entertainment/movies-database/sample-configs/setup.json @@ -22,8 +22,7 @@ "nodeLocations": "us-central1-a,us-central1-b,us-central1-c", "minCount": 3, "maxCount": 3, - "initialNodeCount": 3, - "jvmArgs": "-Xms1g -Xmx1g" + "initialNodeCount": 3 } }, "ddlConfig" : { diff --git a/machmeter/usecases/finance/ledger/sample-configs/setup.json b/machmeter/usecases/finance/ledger/sample-configs/setup.json index 229a69f..222d0b2 100644 --- a/machmeter/usecases/finance/ledger/sample-configs/setup.json +++ b/machmeter/usecases/finance/ledger/sample-configs/setup.json @@ -22,8 +22,7 @@ "nodeLocations": "us-central1-a,us-central1-b,us-central1-c", "minCount": 3, "maxCount": 3, - "initialNodeCount": 3, - "jvmArgs": "-Xms1g -Xmx1g" + "initialNodeCount": 3 } }, "ddlConfig" : { diff --git a/machmeter/usecases/shopping/cart/sample-configs/setup.json b/machmeter/usecases/shopping/cart/sample-configs/setup.json index cbed735..cf5fd07 100644 --- a/machmeter/usecases/shopping/cart/sample-configs/setup.json +++ b/machmeter/usecases/shopping/cart/sample-configs/setup.json @@ -22,8 +22,7 @@ "nodeLocations": "us-central1-a,us-central1-b,us-central1-c", "minCount": 3, "maxCount": 3, - "initialNodeCount": 3, - "jvmArgs": "-Xms1g -Xmx1g" + "initialNodeCount": 3 } }, "ddlConfig" : {