从Cloud Build连接GKE集群上的gRPC服务



我们正在使用一个托管的Kubeflow pipeline (KFP)实例,由GCP的AI Platform Pipelines创建,与一个托管的MySQL实例,由Cloud SQL创建。我们还使用Cloud Build来构建和运行我们的KFP管道。我们想添加一个Cloud Build步骤,在KFP管道运行完成后,运行一个脚本,该脚本使用MLMD API查询该管道运行的元数据。我们有一个MLMD脚本,可以在GCP VM上手动运行时成功查询元数据。问题是如何让这个脚本在Cloud Build中运行。

第一种方法是使用MySQL连接信息创建mlmd.metadata_store.MetadataStore对象,例如,
connection_config = metadata_store_pb2.ConnectionConfig()
connection_config.mysql.host = [IP address]
connection_config.mysql.port = 3306
connection_config.mysql.database = "kubeflow_experiments_metadata_metadata"
connection_config.mysql.user = [user]
connection_config.mysql.password = [password]
store = mlmd.metadata_store.MetadataStore(connection_config)

这在VM上运行良好。然而,云SQL代理似乎是在云构建中工作所必需的。以这个Cloud Functions代码库为例,我能够在Cloud Build中运行一个脚本,该脚本使用sqlalchemy通过代理连接到MySQL。然而,将sqlalchemy与代理连接起来的方法似乎与上述MLMD API不兼容。它看起来像这样:

driver_name = "mysql+pymysql"
query_string = dict({"unix_socket": "/cloudsql/{}".format(connection_name)})
db = sqlalchemy.create_engine(
sqlalchemy.engine.url.URL(drivername=driver_name, username=[user], password=[password], database="kubeflow_experiments_metadata_metadata", query=query_string),
pool_size=5,
max_overflow=2,
pool_timeout=30,
pool_recycle=1800,
)

第二种方法使用与KFP一起部署的MLMD gRPC服务。首先,我端口转发服务:

kubectl port-forward svc/metadata-grpc-service 8080:8080

然后使用MLMD gRPC API创建mlmd.metadata_store.MetadataStore:

connection_config = metadata_store_pb2.MetadataStoreClientConfig(
host="127.0.0.1",
port=8080,
)
store = mlmd.metadata_store.MetadataStore(connection_config)

同样,这在VM上工作得很好。然而,我不确定如何从Cloud Build连接到gRPC服务。我使用gRPC和Kubernetes的经验有限,所以如果有一个简单的解决方案,我不会感到惊讶。

任何建议将不胜感激!

通过其他途径,我看到了这篇文章,它包含了如何在Cloud Build中转发KFP的ml-pipeline服务的示例。我必须做一个小的修改,这是删除kubectl port-forward命令的"-n""kubeflow"参数。这指定kubectl使用"kubeflow"命名空间。然而,GCP的AI平台管道在部署KFP实例时似乎创建了一个"default"命名空间。

相关内容

  • 没有找到相关文章

最新更新