Как переопределить изображение cassandra jvm.opts во время выполнения - PullRequest
0 голосов
/ 29 января 2019

Мы внедряем образ докера Cassandra 3.10 через k8s как StatefullSet.

Я пытался установить GC на G1GC, добавляя -XX:+UseG1GC к переменной среды JAVA_OPTS, но Cassandra использует GC по умолчанию CMS, как установлено в jvmФайл .opts.

из-за запуска 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 во время выполнения, чтобы мне не приходилось создавать образ для каждого небольшого изменения?или я должен добавить файл costume jvm.opts в образ докера, который я строю?

Ответы [ 3 ]

0 голосов
/ 29 января 2019

Используйте точку входа docker для запуска init-скрипта, который должен обновить опции jvm.Переменная окружения в cassandra-env.СценарийЗатем запустите службу базы данных Кассандра

0 голосов
/ 31 января 2019

Я думаю, что лучшим решением будет использование initContainer и configMap .

InitContainers выполняются до завершения до запуска основных контейнеров.Вы можете скопировать введенные значения, используя configMap, поверх значений, указанных в ваших файлах конфигурации, и выполнить перезапуск модуля.Это также хорошо, потому что вы можете выполнить повторный перезапуск на всех ваших узлах.

В initContainer вы будете вводить configMap, и после запуска initContainer вы можете сделать sed для заменыфактические значения в файлах конфигурации C *.

Вы можете использовать образ busybox для initContainer, в котором есть основные команды linux.

Шаги будут следующими::

  • изменить параметры в configMap (который вводится в initContainer)
  • выполнить повторный запуск.
0 голосов
/ 29 января 2019

Лучший и идеальный вариант - ConfigMap.Вы можете создать ConfigMap для этого файла, чтобы к файлу jvm.opts можно было обращаться и изменять его из-за пределов модуля.Поэтому, не создавая заново новый модуль или даже не касаясь его, вы можете изменять конфигурацию столько раз, сколько захотите.

Для получения более подробной информации см .: https://kubernetes.io/docs/tasks/configure-pod-container/configure-pod-configmap/#create-configmaps-from-files

...