Запуск Kubernetes / Openshift cronjob с идентификатором пользователя контейнера

#docker #kubernetes #containers #openshift #pyodbc

#docker #kubernetes #контейнеры #openshift #pyodbc

Вопрос:

Я использую Openshift для развертывания приложения django, которое использует pyodbc для подключения к внешней базе данных. В настоящее время я хотел запланировать cronjob в openshift, используя файл yaml. Cronjob создается без проблем, но выдает эту ошибку при запуске: (‘IM004’, «[IM004] [unixODBC] [Диспетчер драйверов] Ошибка SQLAllocHandle драйвера в SQL_HANDLE_HENV (0) (SQLDriverConnect)»)

Эта ошибка возникала ранее, поскольку Openshift переопределяет uid при запуске контейнера. Я преодолел эту ошибку, следуя этому обходному пути:https://github.com/VeerMuchandi/mssql-openshift-tools/blob/master/mssql-client/uid_entrypoint.sh

Эта ошибка появляется снова при запуске cronjob, и это может быть связано с той же проблемой uid. Ниже приведен мой файл yaml для планирования cronjob:

 apiVersion: batch/v1beta1
kind: CronJob
metadata:
  name: samplecron
spec:
  securityContext:
    runAsUser: 1001
    runAsGroup: 0
  schedule: "*/5 * * * *"  
  concurrencyPolicy: "Forbid" 
  startingDeadlineSeconds: 60 
  suspend:            
  successfulJobsHistoryLimit: 3 
  failedJobsHistoryLimit: 3     
  jobTemplate:             
    spec:
      template:
        metadata:
          labels:          
            parent: "cronjobpi"
        spec:
          containers:
          - name: samplecron
            image: docker-registry.default.svc:5000/image-name
            volumeMounts:
            - mountPath: /path-to-mount
              name: "volume-name"
            command: [ "python3", "/script.py" ]
            

          volumes:
          - name: "vol-name"
          restartPolicy: Never 
  

Может кто-нибудь подсказать, как я могу предоставить ту же информацию об идентификаторе пользователя в файле yaml cronjob или любым другим способом решения этой проблемы?

Комментарии:

1. Вам удалось решить эту проблему? просто любопытно, как script.py похоже (таким образом, вы получаете эту ошибку)

2. @Nick смог решить проблему, используя скрипт точки входа, о котором я упоминал выше, и я включил команду для запуска скрипта python внутри . использовать скрипт точки входа и вместо команды: [ «python3», «/script.py » ] [«sh» , «/entrypoint.sh «].. Скрипт python используется для подключения к серверу БД с использованием pyodbc. pyodbc.connect() вызывает проблему, если UID контейнера не записан в etc / passwd, что выполняется скриптом entrypoint, упомянутым выше.

3. Я думаю, вы могли бы опубликовать это даже в качестве ответа 🙂

Ответ №1:

Удалось решить проблему с помощью скрипта entrypoint, о котором я упоминал выше, и я включил команду для запуска скрипта python внутри .использовать скрипт точки входа и вместо команды: [ «python3», «/script.py » ] [«sh» , «/entrypoint.sh «]..Скрипт python используется для подключения к серверу БД с использованием pyodbc. pyodbc.connect() вызывает проблему, если UID контейнера не записан в etc / passwd, что выполняется скриптом entrypoint, упомянутым выше.