我在一个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不是为阅读或写入文件而设计的),或者也许这是不可能的,我必须找到其他东西。
1条答案
按热度按时间lbsnaicq1#
你需要找到kubelet上的目录,并直接连接到它,而不仅仅是列出PVC。然后,你可能需要使用
paramiko
或其他SFTP特定的python库。我相信k8s客户端不会给予你直接访问任何未挂载的PVC。或者,Kafka Connect有一个SFTP连接器。或者有Apache Nifi,以及其他可以与SFTP和Kafka一起工作的工具。
否则,在SFTP服务器本身上运行一些fswatch脚本,并完全绕过k8s资源。