Назад | Перейти на главную страницу

Выполнение скрипта в контейнере Docker в K8s

Я наблюдаю странное поведение при выполнении скрипта на этапе рабочего процесса k8s / Argo.

Для начала, где я запускаю серверы Metamap Tagger (см. Фрагмент кода ниже), вместо того, чтобы ждать, пока каждый из них завершится, перед выполнением следующей команды, все они сразу же запускаются (мое kludgey решение заключалось в том, чтобы поставить /bin/bash/sleep 120 команда между каждым).

Другая странность заключается в том, что если я запускаю скрипт из скрипта, который устанавливает кучу переменных среды (в данном случае source set_uima.sh делает это), переменная среды не устанавливается соответствующим образом. Я тестировал это вне рабочего процесса k8, и все работает как надо.

Есть ли что-то в k8, из-за чего этот скрипт не запускается в сеансе без TTY (k8) так же, как в сеансе TTY (с моей локальной рабочей станции)?

#!/bin/bash

export DATA_DIRECTORY=/data
export METAMAP_OUT=$DATA_DIRECTORY/metamap_out
export SAMPLE_FILE=$DATA_DIRECTORY/nlptab_manifest.txt
export DATA_IN=$DATA_DIRECTORY/in
export METAMAP_HOME=/usr/share/public_mm # /usr/share/public_mm

export JAVA_TOOL_OPTIONS=‘-Xms2G -Xmx6G -XX:MinHeapFreeRatio=25 -XX:+UseG1GC’

##### Start Metamap Tagger Servers #####
skrmedpostctl start

wsdserverctl start

mmserver &


##### Run UIMA against Metamap taggers #####
source ./setup_uima.sh

Неудивительно, что ваш скрипт работает в bash без TTY в вашем докер-контейнере в K8s.

Чтобы запустить модуль с TTY, вам нужно добавить tty: true в развертывании:

spec: 
  containers: 
    - name: test 
      tty: true 

а затем запустите сценарий.

Вы можете создать переменные env в своем развертывании: Развертывание будет выглядеть так:

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: envtest
spec:
  replicas: 1
  template:
    metadata:
      labels:
        name: envtest
    spec:
      containers:
      - name: envtest
        image: gcr.io/<PROJECT_ID>/envtest
        ports:
        - containerPort: 3000
        env:
        - name: DATA_DIRECTORY
          value: "/data"
        - name: METAMAP_OUT
          value: "/data/metamap_out"            
        - name: SAMPLE_FILE
          value: "/data/nlptab_manifest.txt"
        - name: DATA_IN
          value: "/data/in"            
        - name: METAMAP_HOME
          value: "/usr/share/public_mm"
        - name: JAVA_TOOL_OPTIONS
          value: " -Xms2G -Xmx6G -XX:MinHeapFreeRatio=25 -XX:+UseG1GC"

Но этот метод может быть громоздким.