kubernetes 如何获得文件和文件名持久化在k8s卷来自SFTP服务器?

zaqlnxep  于 2023-04-05  发布在  Kubernetes
关注(0)|答案(1)|浏览(155)

我在一个Pod中部署了一个SFTP服务器,其中数据被持久化在一个持久卷中。
这些文件是sql转储文件。
我想在Kubernetes中做以下事情:
1.在Python中设置Kafka生产者和消费者
1.编写一个Python脚本来监视持久卷中的新转储文件
1.将Python脚本与Kafka生产者连接,以便在检测到新文件时发送消息
1.设置一个Kafka消费者来监听这些消息并触发impdp进程
我被第2点卡住了。“写一个Python脚本来监视持久卷中的新转储文件”
我尝试了以下K8S API for Python:

from kubernetes import client, config 

# Load Kubernetes configuration
config.load_kube_config()

# Create Kubernetes API client 
api_client = client.CoreV1Api()
 
# Retrieve data from persistent volume claim 
data = api_client.read_namespaced_persistent_volume_claim(name='01-claim1', namespace='dev-01')

但它不会列出SFTP或持久卷中的文件。
什么是最好的方法来知道当一个新的文件从SFTP到达持久卷,得到这个文件在另一个pod将执行sql命令导入转储数据库?
也许有其他方法比使用Python脚本(我认为我不能直接访问持久卷(PV)中的文件使用Kubernetes API,因为Kubernetes API不是为阅读或写入文件而设计的),或者也许这是不可能的,我必须找到其他东西。

lbsnaicq

lbsnaicq1#

你需要找到kubelet上的目录,并直接连接到它,而不仅仅是列出PVC。然后,你可能需要使用paramiko或其他SFTP特定的python库。我相信k8s客户端不会给予你直接访问任何未挂载的PVC。
或者,Kafka Connect有一个SFTP连接器。或者有Apache Nifi,以及其他可以与SFTP和Kafka一起工作的工具。
否则,在SFTP服务器本身上运行一些fswatch脚本,并完全绕过k8s资源。

相关问题