0

我正在尝试运行 kubeflow 管道设置,并且我有几个环境(dev、staging、prod)。

在我的管道中,我kfp.components.func_to_container_op用来获取管道任务实例 (ContainerOp),然后使用允许它与我的 s3 存储桶集成的适当参数执行它:

from utils.test import test

test_op = comp.func_to_container_op(test, base_image='my_image')

read_data_task = read_data_op(
    bucket,
    aws_key,
    aws_pass,
)

arguments = {
    'bucket': 's3',
    'aws_key': 'key',
    'aws_pass': 'pass',
}
kfp.Client().create_run_from_pipeline_func(pipeline, arguments=arguments)

每个环境都使用不同的凭据连接到它,并且这些凭据正在函数中传递:

def test(s3_bucket: str, aws_key: str, aws_pass: str):
....
s3_client = boto3.client('s3', aws_access_key_id=aws_key, aws_secret_access_key=aws_pass)
s3_client.upload_file(from_filename, bucket_name, to_filename)

因此,对于每个环境,我都需要更新参数以包含正确的凭据,这使得维护变得非常困难,因为每次我想从 dev 更新到 stg 再到 prod 时,我都不能简单地复制代码。

我的问题是通过这些凭据的最佳方法是什么?

4

1 回答 1

0

理想情况下,您应该将任何特定于环境的配置推送到尽可能靠近集群的位置(远离组件)。

您可以使用不同的凭据在每个环境中创建 Kubernetes 密钥。然后在每个任务中使用该 AWS 密钥:

from kfp import aws

def my_pipeline():
   ...

   conf = kfp.dsl.get_pipeline_conf()
   conf.add_op_transformer(aws.use_aws_secret('aws-secret', 'AWS_ACCESS_KEY_ID', 'AWS_SECRET_ACCESS_KEY'))

也许 boto3 可以使用秘密文件和环境变量自动加载凭据。

至少所有 GCP 库和实用程序都使用 GCP 凭据执行此操作。

PS 最好在官方 repo 中创建问题:https ://github.com/kubeflow/pipelines/issues

于 2020-06-20T02:44:47.560 回答