Openshift - 在文件更改时创建作业

问题描述 投票:0回答:1

我想仅在已挂载为 PVC (PersistentVolumeClaim) 的 NAS 上创建特定文件后启动 pod/cronjob。

有没有办法“监视”文件夹并仅在确定文件存在后才触发 Pod 创建?

我们希望尽可能在最晚的时刻创建 Pod,以免在“等待”某些事情发生的 Pod 上保留集群的计算能力。

此外,由于公司政策,我们无法使用 Openshift pipeline(又名 Tekton)或其他需要集群范围权限的操作符。

kubernetes openshift
1个回答
0
投票

要在挂载为 PersistentVolumeClaim (PVC) 的 NAS 上创建特定文件时在 OpenShift 中触发 pod 或 cronjob,而不依赖于 OpenShift 管道或需要集群范围权限的其他操作员,您可以考虑自定义利用小型轻量级watcher容器的解决方案。
该容器将监视指定目录中的文件创建事件,并随后触发所需的作业。

+------------------+      +-----------------+      +-------------------+
|                  |      |                 |      |                   |
|  Watcher Pod     |----->|  NAS (PVC)      |      |  Triggered Pod    |
|  (Custom Image)  |      |  (File Check)   |      |  (Task Execution) |
|                  |      |                 |      |                   |
+------------------+      +-----------------+      +-------------------+

创建一个 Docker 镜像,其中包含一个脚本来监视 NAS 上的指定目录(作为 PVC 挂载)。该脚本

watcher.sh
可以使用
inotifywait
(适用于 Linux 环境)等工具来监视文件创建事件。

#!/bin/bash

WATCHED_DIR="/path/to/watched/directory"
FILE_NAME="trigger_file.txt"

echo "Watching for $FILE_NAME in $WATCHED_DIR"
while true; do
    inotifywait -e create "$WATCHED_DIR"
    if [ -f "$WATCHED_DIR/$FILE_NAME" ]; then
    echo "$FILE_NAME found, triggering the job..."
    # Trigger pod creation or cronjob here
    break
    fi
done

为观察者添加 Dockerfile:

FROM alpine
RUN apk add --no-cache inotify-tools bash
ADD watcher.sh /watcher.sh
RUN chmod +x /watcher.sh
ENTRYPOINT ["/watcher.sh"]

然后将此映像部署为 OpenShift 中的 Pod,确保 NAS 作为 PVC 挂载到脚本中指定的相同路径。

在脚本中注明

# Trigger pod creation or cronjob here
的部分,您可以使用 OpenShift CLI (
oc
)
触发 pod 或 cronjob。但是,这需要
oc
在您的映像中可用,并为观察者 Pod 所使用的服务帐户设置适当的权限,以便在 OpenShift 中创建作业。

oc run my-job --image=myjobimage:latest --restart=Never

或者要创建一个 cronjob,您可以有一个预定义的 cronjob 定义并使用以下命令创建它:

oc create -f my-cronjob.yaml

确保您的观察者 Pod 的服务帐户具有创建 Pod 或 cronjobs 所需的权限。

  • 为观察者 Pod 创建专用服务帐户,并具有创建 Pod 或 cronjob 所需的最低权限。
  • 为观察者 Pod 和触发的作业定义安全上下文,以便以最少的必要权限运行。
© www.soinside.com 2019 - 2024. All rights reserved.