簡體   English   中英

使用容器用戶 ID 運行 Kubernetes/Openshift cronjob

[英]Run Kubernetes/Openshift cronjob with container user id

我正在使用 Openshift 部署一個 django 應用程序,該應用程序使用 pyodbc 連接到外部數據庫。 目前我想使用 yaml 文件在 openshift 中安排一個 cronjob。 創建 cronjob 沒有問題,但在運行時拋出此錯誤:('IM004', "[IM004] [unixODBC][Driver Manager]Driver's SQLAllocHandle on SQL_HANDLE_HENV failed (0) (SQLDriverConnect)")

之前發生此錯誤,因為 Openshift 在運行容器時會覆蓋 uid。 我通過以下解決方法克服了這個錯誤: https : //github.com/VeerMuchandi/mssql-openshift-tools/blob/master/mssql-client/uid_entrypoint.sh

運行 cronjob 時再次彈出此錯誤,這可能是由於相同的 uid 問題。 以下是我用於調度 cronjob 的 yaml 文件:

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 

有人可以建議我如何在 cronjob 的 yaml 文件中提供相同的用戶 ID 信息或任何其他解決此問題的方法嗎?

能夠使用我上面提到的入口點腳本解決這個問題,我在 .sh 入口點腳本中包含了運行 python 腳本的命令,而不是命令:["python3", "/script.py" ] ["sh " , "/entrypoint.sh"] 被使用..python 腳本用於使用 pyodbc 連接到數據庫服務器。 如果容器的 UID 沒有寫在 etc/passwd 中,pyodbc.connect() 會導致問題,這是由上面提到的入口點腳本完成的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM