Подключитесь к службе gRPC в кластере GKE из Cloud Build
Мы используем управляемый экземпляр Kubeflow Pipelines (KFP), созданный с помощью GCP AI Platform Pipelines, с управляемым экземпляром MySQL, созданным с помощью Cloud SQL. Мы также используем Cloud Build для создания и запуска наших конвейеров KFP. Мы хотели бы добавить этап Cloud Build, который после завершения выполнения конвейера KFP запускает сценарий, использующий API MLMD для запроса метаданных этого выполнения конвейера. У нас есть сценарий MLMD, который может успешно запрашивать метаданные при запуске вручную на виртуальной машине GCP. Проблема заключалась в запуске этого скрипта в Cloud Build.
Первый подход заключался в создании объекта с использованием информации о соединении MySQL, например,
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)
Это нормально работает на виртуальной машине. Однако похоже, что прокси-сервер Cloud SQL необходим для работы в Cloud Build. Используя эту кодовую лабораторию Cloud Functions в качестве примера, я смог запустить сценарий в Cloud Build, который использовал sqlalchemy для подключения к MySQL через прокси. Однако метод подключения sqlalchemy к прокси-серверу кажется несовместимым с указанным выше API MLMD. Это выглядит примерно так:
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,
)
Второй подход использует службу MLMD gRPC, развернутую с KFP. Сначала я перенаправляю службу:
kubectl port-forward svc/metadata-grpc-service 8080:8080
затем создайте
mlmd.metadata_store.MetadataStore
используя MLMD gRPC API:
connection_config = metadata_store_pb2.MetadataStoreClientConfig(
host="127.0.0.1",
port=8080,
)
store = mlmd.metadata_store.MetadataStore(connection_config)
Опять же, это отлично работает на виртуальной машине. Однако я не уверен, как подключиться к службе gRPC из Cloud Build. Мой опыт работы с gRPC и Kubernetes ограничен, поэтому я не удивлюсь, если найдется простое решение.
Любой совет будет очень признателен!
1 ответ
По другим направлениям мне указали на эту статью , в которой содержится пример перенаправления сервиса ml-pipeline KFP в Cloud Build. Мне пришлось внести одну небольшую модификацию, которая заключалась в удалении
"-n"
и аргументы
kubectl port-forward
команда. Это указывает на
kubectl
использовать
"kubeflow"
пространство имен. Однако конвейеры платформы AI GCP, похоже, создают
"default"
пространство имен при развертывании вашего экземпляра KFP.