我有一个docker镜像,它在启动时需要一个挂载的JSON凭证文件。容器是通过如下命令启动的:
docker run -v [CREDENTIALS_FILE]:/credentials.json image_name
此图像位于Google Container Registry中,我想使用KubernetesPodOperator在Cloud Composer dag中启动它。
有没有办法通过KubernetesPodOperator挂载单个文件?理想情况下,此文件将托管在云存储位置。我读到有一个volume/volume_mount选项,但是传递一个文件似乎很麻烦--希望还有另一个我忽略了的选项。
KubernetesPodOperator(namespace='default',
image="gcr.io/image_name,
name="start-container-image",
task_id="start-container-image",
volume=[?],
volume_mounts=[?],
dag=dag)发布于 2019-09-12 04:29:56
我使用Patrick W的建议并通过一个configMap解决了这个问题。我可能会更新它以使用一个秘密,但到目前为止,以下是实现:
首先,我创建了configMap:kubectl create configmap credentials-configmap --from-file=./credentials.json
接下来,在我的DAG中,我设置了音量选项。请注意,我必须将配置修改为子目录“/ mount_path /”,因为它在挂载到"/“时出错。
volume_mount = VolumeMount('creds-volume',
mount_path='/config/',
sub_path=None,
read_only=False)
volume_config = {
'configMap': {
'name': 'creds-volume'
}
}
volume = Volume(name='creds-volume', configs=volume_config)这将传递给KuberenetesPodOperator:
KubernetesPodOperator(
volumes=[volume],
volume_mounts=[volume_mount],
...excluding other options for brevity
)最后,容器在启动脚本期间使用它:gcloud auth activate-service-account --key-file=/config/credentials.json
发布于 2019-09-11 20:15:34
k8s允许您装载卷(静态数据的configMap就可以,而且不是很繁重的工作)。否则,如果您需要从不支持PV的远程存储(如GCS)远程拉取数据,则需要直接拉取数据。
您可能希望考虑使用仅用于从远程存储下载数据并将其保存在本地的initContainer,以便您的主应用程序可以在本地使用这些数据运行。
发布于 2021-04-16 15:57:13
根据David的回答,要修复已挂载卷的权限问题,请使用以下命令:
volume_config = {
"configMap": {
"name": "foobar",
"defaultMode": 0o744
}
}请注意,Python3中的默认模式写为0o744,而YAML中的默认模式为0744。
https://stackoverflow.com/questions/57877849
复制相似问题