Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/371.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在运行时覆盖cassandra image jvm.opts_Java_Docker_Cassandra_Kubernetes_Cassandra 3.0 - Fatal编程技术网

Java 如何在运行时覆盖cassandra image jvm.opts

Java 如何在运行时覆盖cassandra image jvm.opts,java,docker,cassandra,kubernetes,cassandra-3.0,Java,Docker,Cassandra,Kubernetes,Cassandra 3.0,我们正在通过k8s将Cassandra docker image 3.10部署为StatefullSet 我试图将GC设置为G1GC,并将-XX:+UseG1GC添加到JAVA_OPTS环境变量中,但Cassandra正在使用jvm.OPTS文件中设置的默认CMS GC 通过在pod中运行ps aux,我获得了Cassandra配置: USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND cassan

我们正在通过k8s将Cassandra docker image 3.10部署为StatefullSet

我试图将GC设置为G1GC,并将
-XX:+UseG1GC
添加到JAVA_OPTS环境变量中,但Cassandra正在使用jvm.OPTS文件中设置的默认CMS GC

通过在pod中运行
ps aux
,我获得了Cassandra配置:

USER         PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
cassand+       1 28.0 10.1 72547644 6248956 ?    Ssl  Jan28 418:43 
java -Xloggc:/var/log/cassandra/gc.log -ea -XX:+UseThreadPriorities -XX:ThreadPriorityPolicy=42 -XX:+HeapDumpOnOutOfMemoryError -Xss256k -XX:StringTableSize=1000003 -XX:+AlwaysPreTouch -XX:-UseBiasedLocking -XX:+UseTLAB -XX:+ResizeTLAB -XX:+UseNUMA -XX:+PerfDisableSharedMem -Djava.net.preferIPv4Stack=true -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled -XX:SurvivorRatio=8 -XX:MaxTenuringThreshold=1 -XX:CMSInitiatingOccupancyFraction=75 -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSWaitDuration=10000 -XX:+CMSParallelInitialMarkEnabled -XX:+CMSEdenChunksRecordAlways -XX:+CMSClassUnloadingEnabled -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintHeapAtGC -XX:+PrintTenuringDistribution -XX:+PrintGCApplicationStoppedTime -XX:+PrintPromotionFailure -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize=10M -Xms2G -Xmx2G -Xmn1G -XX:CompileCommandFile=/etc/cassandra/hotspot_compiler -javaagent:/usr/share/cassandra/lib/jamm-0.3.0.jar -Dcassandra.jmx.remote.port=7199 -Dcom.sun.management.jmxremote.rmi.port=7199 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.password.file=/etc/cassandra/jmxremote.password -Djava.library.path=/usr/share/cassandra/lib/sigar-bin -javaagent:/usr/share/cassandra/jmx_prometheus_javaagent-0.10.jar=7070:/etc/cassandra/jmx_prometheus_cassandra.yaml 
没有
-XX:+UseG1GC
属性


有没有办法在运行时覆盖jvm.opts,这样我就不必为每一个小的更改构建映像?或者我必须将costude jvm.opts文件添加到我正在构建的docker映像中?

最佳和理想的选项是ConfigMap。您可以为该文件创建ConfigMap,以便可以从pod外部访问和更改jvm.opts文件。所以,不需要重新创建新的pod,甚至不需要触摸pod,您可以根据需要多次更改配置

有关更多详细信息,请参阅:

使用docker entrypoint执行一个初始化脚本,该脚本应该从中更新jvm选项。cassandra env中的环境变量。sh脚本。然后启动cassandra数据库服务

我认为最好的解决方案是使用a和a

InitContainers在主容器启动之前执行到完成。您可以将使用configMap注入的值复制到配置文件中指定的值上,并执行pod重启。这也很好,因为您可以跨所有节点进行滚动重启

在initContainer中,您将注入configMap,从那里执行initContainer时,您可以执行
sed
来替换C*config文件中的实际值

您可以为包含linux基本命令的initContainer使用一个映像

步骤如下:

  • 更改configMap(注入initContainer中)上的参数
  • 进行滚动重启

您可以使用PV来保持配置,但需要重新配置部署的每个团队。最好的解决方案可能是在docker映像中添加一个自定义文件。您也可以使用initContainer来复制该文件。initContainers是在主容器启动之前运行的容器,并且总是执行到完成。我们使用的配置映射包含所有自定义jvm选项,但是,当Cassandra启动它时,运行从文件加载数据的Cassandra-envi.sh,我应该替换该文件吗?我确信有一种简单的方法可以做到这一点,但我似乎找不到相关的文档。