为了账号安全,请及时绑定邮箱和手机立即绑定

如何在运行时覆盖 cassandra 映像 jvm.opts

如何在运行时覆盖 cassandra 映像 jvm.opts

湖上湖 2022-05-25 10:50:26
我们正在通过 k8s 作为 StatefullSet 部署 Cassandra docker 镜像 3.10。我尝试将 GC 设置为 G1GC 添加-XX:+UseG1GC到 JAVA_OPTS 环境变量,但 Cassandra 使用的是 jvm.opts 文件中设置的默认 CMS GC。从ps aux在 pod 中运行,我得到了 Cassandra 配置:USER         PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMANDcassand+       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,所以我不必为每一个小变化都构建图像?或者我必须将服装 jvm.opts 文件添加到我正在构建的 docker 映像中?
查看完整描述

3 回答

?
白猪掌柜的

TA贡献1893条经验 获得超10个赞

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

有关更多详细信息,请参阅: https ://kubernetes.io/docs/tasks/configure-pod-container/configure-pod-configmap/#create-configmaps-from-files


查看完整回答
反对 回复 2022-05-25
?
慕的地8271018

TA贡献1796条经验 获得超4个赞

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



查看完整回答
反对 回复 2022-05-25
?
ITMISS

TA贡献1871条经验 获得超8个赞

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

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

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

您可以为 initContainer 使用busybox映像,其中包含 linux 基本命令。

步骤如下:

  • 更改 configMap 上的参数(在 initContainer 中注入)

  • 滚动重启。


查看完整回答
反对 回复 2022-05-25
  • 3 回答
  • 0 关注
  • 134 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信