Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Cloud Composer在外部集群中调度Kubernetes工作负载_Kubernetes_Google Kubernetes Engine_Airflow_Google Cloud Composer - Fatal编程技术网

如何使用Cloud Composer在外部集群中调度Kubernetes工作负载

如何使用Cloud Composer在外部集群中调度Kubernetes工作负载,kubernetes,google-kubernetes-engine,airflow,google-cloud-composer,Kubernetes,Google Kubernetes Engine,Airflow,Google Cloud Composer,我计划使用Google Cloud Composer(Apache Airflow)来管理我们的数据管道。某些处理步骤是在Docker映像中定义的,我希望触发该映像以在Google Kubernetes引擎上运行。这些处理步骤通常是资源密集型作业,我想知道安排它们的最佳方法是什么 我调查了Kubernetes操作员,以构建一个托管在Google容器注册中心上的Docker映像。然而,据我所知,这个工作负载将在现有的CloudComposer Kubernetes集群中创建。因此,可用于运行工作负

我计划使用Google Cloud Composer(Apache Airflow)来管理我们的数据管道。某些处理步骤是在Docker映像中定义的,我希望触发该映像以在Google Kubernetes引擎上运行。这些处理步骤通常是资源密集型作业,我想知道安排它们的最佳方法是什么

我调查了Kubernetes操作员,以构建一个托管在Google容器注册中心上的Docker映像。然而,据我所知,这个工作负载将在现有的CloudComposer Kubernetes集群中创建。因此,可用于运行工作负载的资源受到分配给Cloud Composer集群的资源量的限制。将大量资源分配给Cloud Composer集群,使其仅在该特定任务运行时可用,这似乎是浪费。在Cloud Composer集群级别是否有任何类型的自动缩放可以处理此问题

作为替代方案,我认为Cloud Composer可以有一个DAG,该DAG使用适当的资源创建外部Kubernetes集群来运行此步骤,然后在完成后将其拆除。这听起来像是一种有效的方法吗?实现这一点的最佳方式是什么?我正在考虑将bash操作符与gcloud命令一起用于kubectl


TLDR:使用Cloud Composer管理外部Kubernetes群集作为处理资源密集型处理步骤的一种方式是否有效?

我认为将您自己的吊舱与现有的气流吊舱(在Cloud Composer Kubernetes群集的默认节点池上执行)分离在不同的节点上是一种很好的做法。这样做,您将不会以任何方式干扰现有的气流吊舱

如果不想使用外部Kubernetes群集,可以直接在Cloud Composer Kubernetes群集内创建一个节点池,最少0个节点并启用自动缩放。当没有pod运行时,节点池中将没有节点(您将不付费)。启动pod(使用节点关联)时,节点将自动启动。另一个优点是,您可以根据需要选择节点池的节点机器类型

要在特定节点池上调度pod,请使用
KubernetesPodOperator
affinity
参数:

KubernetesPodOperator(
    task_id=task_id,
    namespace='default',
    image=image,
    arguments=arguments,
    name=task_id.replace('_', '-'),
    affinity={
        'nodeAffinity': {
            'requiredDuringSchedulingIgnoredDuringExecution': {
                'nodeSelectorTerms': [{
                    'matchExpressions': [{
                        'key': 'cloud.google.com/gke-nodepool',
                        'operator': 'In',
                        'values': [
                            '<name_of_your_node_pool>',
                        ]
                    }]
                }]
            }
        }
    },
    is_delete_operator_pod=True,
    hostnetwork=False,
)
KubernetesPodOperator(
任务id=任务id,
namespace='default',
图像=图像,
参数=参数,
名称=任务id.replace(“”,“-”),
亲和力={
“nodeAffinity”:{
“所需的日程安排忽略执行”:{
“nodeSelectorTerms”:[{
“匹配表达式”:[{
“key”:“cloud.google.com/gke nodepool”,
“operator”:“In”,
“价值观”:[
'',
]
}]
}]
}
}
},
删除运算符是否为真,
hostnetwork=False,
)
我在生产中使用它,它工作正常