运行 Kubernetes/Openshift 具有容器用户 ID 的 cronjob
Run Kubernetes/Openshift cronjob with container user id
我正在使用 Openshift 部署一个使用 pyodbc 连接到外部数据库的 django 应用程序。
目前我想使用 yaml 文件在 openshift 中安排一个 cronjob。创建 cronjob 没有问题,但在 运行 时抛出此错误:
('IM004', "[IM004] [unixODBC][Driver Manager]驱动程序在 SQL_HANDLE_HENV 上的 SQLAllocHandle 失败 (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。 pyodbc.connect() 如果容器的 UID 没有写在 etc/passwd 中,这是由上面提到的入口点脚本完成的。
我正在使用 Openshift 部署一个使用 pyodbc 连接到外部数据库的 django 应用程序。 目前我想使用 yaml 文件在 openshift 中安排一个 cronjob。创建 cronjob 没有问题,但在 运行 时抛出此错误: ('IM004', "[IM004] [unixODBC][Driver Manager]驱动程序在 SQL_HANDLE_HENV 上的 SQLAllocHandle 失败 (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。 pyodbc.connect() 如果容器的 UID 没有写在 etc/passwd 中,这是由上面提到的入口点脚本完成的。