配置气流中的卷GKEStartPodOperator操作符



我有一个谷歌云作曲环境。在我的DAG中,我想在GKE中创建一个pod。当我开始部署一个基于docker容器的简单应用程序时,它不需要任何卷配置或秘密,一切都很好,例如:

kubernetes_max = GKEStartPodOperator(
# The ID specified for the task.
task_id="python-simple-app",
# Name of task you want to run, used to generate Pod ID.
name="python-demo-app",
project_id=PROJECT_ID,
location=CLUSTER_REGION,
cluster_name=CLUSTER_NAME,
# Entrypoint of the container, if not specified the Docker container's
# entrypoint is used. The cmds parameter is templated.
cmds=["python", "app.py"],
namespace="production",
image="gcr.io/path/to/lab-python-job:latest",
)

但是当我有一个应用程序需要访问我的GKE集群卷时,我需要在我的pod中配置卷。问题是文档对此并不清楚。我发现的唯一的例子是:

volume = k8s.V1Volume(
name='test-volume',
persistent_volume_claim=k8s.V1PersistentVolumeClaimVolumeSource(claim_name='test-volume'),
)

虽然我的清单文件中的卷(我用它来部署我的应用程序从本地)看起来像这样:

volumes:
- name: volume-prod
secret:
secretName: volume-prod
items:
- key: config
path: config.json
- key: another_config
path: another_config.conf
- key: random-ca
path: random-ca.pem

因此,当我比较两个卷在控制台中的样子时(当我手动部署成功运行的清单文件时,以及当我使用失败的clod composer部署pod时):

  • 成功运行清单文件:

    volume-prod
    名称:volume-prod
    类型:secret
    源卷标识符:volume-prod

  • 运行失败- ComposerGKEStartPodOperator:

    volume-prod
    名称:volume-prod
    类型:emptyDir
    源卷标识符:Node的默认介质

如何从cloud composer配置pod,使其能够读取集群的容量?

KubernetesPodOperator/GKEStartOperator只是一个python Kubernetes sdk的包装-我同意它在Airflow/Cloud Composer文档中没有很好的文档,但是Kubernetes的python sdk本身有很好的文档。

从kubernetes python sdk文档开始:https://github.com/kubernetes-client/python/blob/master/kubernetes/docs/V1PodSpec.md

您将注意到KubernetesPodOperator/GKEStartOperator所采用的参数与此规范相匹配。如果您深入研究操作符的源代码,您将看到操作符只不过是创建kubernetes.client.models.V1Pod对象并使用API部署pod的构建器。

操作符接受volumes形参,该形参的类型应该是List[V1Volume],V1Volume的文档在这里。

所以在你的情况下,你需要提供:

from kubernetes.client import models as k8s
kubernetes_max = GKEStartPodOperator(
# The ID specified for the task.
task_id="python-simple-app",
# Name of task you want to run, used to generate Pod ID.
name="python-demo-app",
project_id=PROJECT_ID,
location=CLUSTER_REGION,
cluster_name=CLUSTER_NAME,
# Entrypoint of the container, if not specified the Docker container's
# entrypoint is used. The cmds parameter is templated.
cmds=["python", "app.py"],
namespace="production",
image="gcr.io/path/to/lab-python-job:latest",
volumes=[
k8s.V1Volume(
name="volume-prod",
secret=k8s.V1SecretVolumeSource(
secret_name="volume-prod",
items=[
k8s.V1KeyToPath(key="config", path="config.json"),
k8s.V1KeyToPath(key="another_config", path="another_config.conf"),
k8s.V1KeyToPath(key="random-ca", path="random-ca.pem"),
],
)
)
]
)

或者,您可以将您的清单提供给GKEStartPodOperator中的pod_template_file参数-这将需要对气流中的工人可用。

使用此操作符有3种方法在气流中创建吊舱:

  1. 使用操作符的参数指定您需要的内容,并让操作符为您构建V1Pod
  2. 通过传入pod_template_file参数提供清单。
  3. 使用Kubernetes sdk自己创建一个V1Pod对象,并将其传递给full_pod_spec参数。

相关内容

  • 没有找到相关文章