This is an automated email from the ASF dual-hosted git repository.

jinsongzhou pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/amoro.git


The following commit(s) were added to refs/heads/master by this push:
     new 1aa37c1a3 [AMORO-3451] Fix kubernetes optimizer pod is frequently 
being killed (#3458)
1aa37c1a3 is described below

commit 1aa37c1a3f079f4eecaf40ed2b2d39cde93fdf57
Author: Marvel-Gu <[email protected]>
AuthorDate: Fri Mar 21 03:25:39 2025 +0000

    [AMORO-3451] Fix kubernetes optimizer pod is frequently being killed (#3458)
    
    * fix: Kubernetes optimizer pod is frequently being killed
    
    * fix: formatting code
    
    * Improvement: provide an external parameter jvm.heap.ratio
    
    * docs: improve documentation on jvm.heap.ratio parameter
    
    * fix: Kubernetes optimizer pod is frequently being killed
    
    * fix: formatting code
    
    * Improvement: provide an external parameter jvm.heap.ratio
    
    * docs: improve documentation on jvm.heap.ratio parameter
    
    * Improvement: Put jvm.heap.ratio into extra to make the configuration more 
flexible
    
    * Improvement: Put jvm.heap.ratio into extra to make the configuration more 
flexible
    
    * Feature: Use an additional map to maintain the parameters in extra
    
    * Docs: improve deployment-on-kubernetes.md and managing-optimizers.md
---
 .../server/manager/KubernetesOptimizerContainer.java | 20 +++++++++++++++++++-
 docs/admin-guides/deployment-on-kubernetes.md        |  2 ++
 docs/admin-guides/managing-optimizers.md             |  2 +-
 3 files changed, 22 insertions(+), 2 deletions(-)

diff --git 
a/amoro-ams/src/main/java/org/apache/amoro/server/manager/KubernetesOptimizerContainer.java
 
b/amoro-ams/src/main/java/org/apache/amoro/server/manager/KubernetesOptimizerContainer.java
index 0476c0f3a..5834e431f 100644
--- 
a/amoro-ams/src/main/java/org/apache/amoro/server/manager/KubernetesOptimizerContainer.java
+++ 
b/amoro-ams/src/main/java/org/apache/amoro/server/manager/KubernetesOptimizerContainer.java
@@ -73,6 +73,19 @@ public class KubernetesOptimizerContainer extends 
AbstractResourceContainer {
 
   private static final String KUBERNETES_NAME_PROPERTIES = "name";
 
+  private static final String EXTRA_PROPERTY_PREFIX = "extra.";
+
+  private static final Map<String, String> EXTRA_PROPERTY_DEFAULTS = new 
HashMap<>();
+
+  static {
+    EXTRA_PROPERTY_DEFAULTS.put("jvm.heap.ratio", "0.8");
+  }
+
+  private String getExtraProperty(Map<String, String> properties, String key) {
+    return properties.getOrDefault(
+        EXTRA_PROPERTY_PREFIX + key, EXTRA_PROPERTY_DEFAULTS.getOrDefault(key, 
null));
+  }
+
   private KubernetesClient client;
 
   @Override
@@ -148,6 +161,7 @@ public class KubernetesOptimizerContainer extends 
AbstractResourceContainer {
       Resource resource, Map<String, String> groupProperties) {
     long memoryPerThread;
     long memory;
+    long jvmHeapMemory;
 
     if (resource.getMemoryMb() > 0) {
       memory = resource.getMemoryMb();
@@ -155,11 +169,15 @@ public class KubernetesOptimizerContainer extends 
AbstractResourceContainer {
       memoryPerThread = Long.parseLong(checkAndGetProperty(groupProperties, 
MEMORY_PROPERTY));
       memory = memoryPerThread * resource.getThreadCount();
     }
+
+    double jvmHeapRatio = Double.parseDouble(getExtraProperty(groupProperties, 
"jvm.heap.ratio"));
+    jvmHeapMemory = (long) (memory * jvmHeapRatio);
+
     // point at amoro home in docker image
     String startUpArgs =
         String.format(
             "/entrypoint.sh optimizer %s %s",
-            memory, super.buildOptimizerStartupArgsString(resource));
+            jvmHeapMemory, super.buildOptimizerStartupArgsString(resource));
     LOG.info("Starting k8s optimizer using k8s client with start command : 
{}", startUpArgs);
 
     String namespace = groupProperties.getOrDefault(NAMESPACE, "default");
diff --git a/docs/admin-guides/deployment-on-kubernetes.md 
b/docs/admin-guides/deployment-on-kubernetes.md
index 1d7b4b00a..1211bdeb2 100644
--- a/docs/admin-guides/deployment-on-kubernetes.md
+++ b/docs/admin-guides/deployment-on-kubernetes.md
@@ -224,6 +224,8 @@ optimizer:
       kube-config-path: "~/.kube/config"
       image: "apache/amoro:latest"
       pullPolicy: "IfNotPresent"
+      # configure additional parameters by using the extra. prefix
+      # extra.jvm.heap.ratio: "0.8"
 ```
 
 To use PodTemplate, you need to copy and paste the following into the 
`kubernetes.properties`.
diff --git a/docs/admin-guides/managing-optimizers.md 
b/docs/admin-guides/managing-optimizers.md
index 71f4c313d..f168579c6 100644
--- a/docs/admin-guides/managing-optimizers.md
+++ b/docs/admin-guides/managing-optimizers.md
@@ -85,7 +85,7 @@ Kubernetes container support the following properties:
 | ams-optimizing-uri        | false    | N/A           | URI of AMS thrift 
self-optimizing endpoint. This could be used if the ams.server-expose-host is 
not available |
 | cpu.factor                | false    | "1.0"         | CPU factor when 
request kubernetes resource. Default 1 Cpu pre thread                           
              |
 | memory                    | true     | N/A           | Memory usage for pre 
thread                                                                          
         |
-
+| extra.jvm.heap.ratio      | false    | 0.8           | The ratio of JVM heap 
memory to total pod memory                                                      
        |
 
 ```yaml
 containers:

Reply via email to