airflow.providers.cncf.kubernetes.pod_generator

Pod 產生器。

此模組提供先前 Pod API 之間的介面,並輸出 kubernetes.client.models.V1Pod。優點是支援完整的 Kubernetes API,且無需編寫序列化。

模組內容

類別

PodGenerator

包含 Kubernetes Airflow Worker 組態邏輯。

函數

make_safe_label_value(string)

正規化提供的標籤,使其長度和字元有效。

datetime_to_label_safe_datestring(datetime_obj)

轉換日期時間字串以用作標籤。

label_safe_datestring_to_datetime(string)

將標籤轉換回日期時間物件。

merge_objects(base_obj, client_obj)

合併物件。

extend_object_field(base_obj, client_obj, field_name)

將欄位值新增至現有物件。

屬性

log

MAX_LABEL_LEN

airflow.providers.cncf.kubernetes.pod_generator.log[來源]
airflow.providers.cncf.kubernetes.pod_generator.MAX_LABEL_LEN = 63[來源]
exception airflow.providers.cncf.kubernetes.pod_generator.PodMutationHookException[來源]

Bases: airflow.exceptions.AirflowException

在 Pod Mutation Hook 執行期間發生例外狀況時引發。

exception airflow.providers.cncf.kubernetes.pod_generator.PodReconciliationError[來源]

Bases: airflow.exceptions.AirflowException

嘗試合併 pod 組態時遇到錯誤時引發。

airflow.providers.cncf.kubernetes.pod_generator.make_safe_label_value(string)[來源]

正規化提供的標籤,使其長度和字元有效。

有效的標籤值必須少於 63 個字元,且必須為空或以英數字元 ([a-z0-9A-Z]) 開頭和結尾,中間可使用破折號 (-)、底線 (_)、點 (.) 和英數字元。

如果標籤值在安全處理後大於 63 個字元,或與傳送至此函數的原始值有任何差異,則我們需要截斷為 53 個字元,並附加唯一的雜湊值。

airflow.providers.cncf.kubernetes.pod_generator.datetime_to_label_safe_datestring(datetime_obj)[來源]

轉換日期時間字串以用作標籤。

Kubernetes 不喜歡標籤中使用「:」,因為 ISO 日期時間格式使用「:」但不使用「_」,所以讓我們將「:」替換為「_」

參數

datetime_obj (datetime.datetime) – datetime.datetime 物件

傳回

代表日期時間的類 ISO 字串

傳回類型

str

airflow.providers.cncf.kubernetes.pod_generator.label_safe_datestring_to_datetime(string)[來源]

將標籤轉換回日期時間物件。

Kubernetes 不允許標籤中使用「:」。ISO 日期時間格式使用「:」但不使用「_」,讓我們將「:」替換為「_」

參數

string (str) – str

傳回

datetime.datetime 物件

傳回類型

datetime.datetime

class airflow.providers.cncf.kubernetes.pod_generator.PodGenerator(pod=None, pod_template_file=None, extract_xcom=True)[來源]

包含 Kubernetes Airflow Worker 組態邏輯。

代表 Kubernetes pod 並管理單個 pod 的執行。任何容器特定的組態都會套用至容器清單中的第一個容器。

參數
  • pod (kubernetes.client.models.V1Pod | None) – 完全指定的 pod。與 pod_template_file 互斥

  • pod_template_file (str | None) – YAML 檔案的路徑。與 pod 互斥

  • extract_xcom (bool) – 是否啟動容器以進行 xcom

static from_obj(obj)[來源]

從 obj 轉換為 pod。

static reconcile_pods(base_pod, client_pod)[來源]

合併 Kubernetes Pod 物件。

參數
  • base_pod (kubernetes.client.models.V1Pod) – 具有基本屬性,如果用戶端 pod 中存在這些屬性,則會覆寫這些屬性;如果用戶端 pod 中不存在這些屬性,則會保留這些屬性

  • client_pod (kubernetes.client.models.V1Pod | None) – 用戶端想要建立的 pod。

傳回

合併後的 pod

傳回類型

kubernetes.client.models.V1Pod

這不能以遞迴方式完成,因為某些欄位會被覆寫,而某些欄位會被串連。

static reconcile_metadata(base_meta, client_meta)[來源]

合併 Kubernetes Metadata 物件。

參數
  • base_meta – 具有基本屬性,如果用戶端 meta 中存在這些屬性,則會覆寫這些屬性;如果用戶端 meta 中不存在這些屬性,則會保留這些屬性

  • client_meta – 用戶端想要建立的規格。

傳回

合併後的規格

static reconcile_specs(base_spec, client_spec)[來源]

合併 Kubernetes PodSpec 物件。

參數
  • base_spec (kubernetes.client.models.V1PodSpec | None) – 具有基本屬性,如果用戶端 spec 中存在這些屬性,則會覆寫這些屬性;如果用戶端 spec 中不存在這些屬性,則會保留這些屬性

  • client_spec (kubernetes.client.models.V1PodSpec | None) – 用戶端想要建立的規格。

傳回

合併後的規格

傳回類型

kubernetes.client.models.V1PodSpec | None

static reconcile_containers(base_containers, client_containers)[來源]

合併 Kubernetes Container 物件。

參數
  • base_containers (list[kubernetes.client.models.V1Container]) – 具有基本屬性,如果用戶端 containers 中存在這些屬性,則會覆寫這些屬性;如果用戶端 containers 中不存在這些屬性,則會保留這些屬性

  • client_containers (list[kubernetes.client.models.V1Container]) – 用戶端想要建立的容器。

傳回

合併後的容器

傳回類型

list[kubernetes.client.models.V1Container]

遞迴執行容器清單。

classmethod construct_pod(dag_id, task_id, pod_id, try_number, kube_image, date, args, pod_override_object, base_worker_pod, namespace, scheduler_job_id, run_id=None, map_index=-1, *, with_mutation_hook=False)[來源]

建立 Pod。

透過從 3 個位置收集和整合組態來建構 pod
  • airflow.cfg

  • executor_config

  • 動態引數

static serialize_pod(pod)[來源]

將 k8s.V1Pod 轉換為 JSON 可序列化字典。

參數

pod (kubernetes.client.models.V1Pod) – k8s.V1Pod 物件

傳回

以 dict 形式傳回的 pod 序列化版本

傳回類型

dict

static deserialize_model_file(path)[來源]

從檔案產生 Pod。

參數

path (str) – 檔案的路徑

傳回

kubernetes.client.models.V1Pod

傳回類型

kubernetes.client.models.V1Pod

static deserialize_model_dict(pod_dict)[來源]

將 Python 字典還原序列化為 k8s.V1Pod。

不幸的是,我們需要存取 Kubernetes 用戶端的私有方法 _ApiClient__deserialize_model。此問題在此處追蹤;https://github.com/kubernetes-client/python/issues/977

參數

pod_dict (dict | None) – k8s.V1Pod 物件的序列化字典

傳回

還原序列化的 k8s.V1Pod

傳回類型

kubernetes.client.models.V1Pod

airflow.providers.cncf.kubernetes.pod_generator.merge_objects(base_obj, client_obj)[來源]

合併物件。

參數
  • base_obj – 具有基本屬性,如果用戶端 obj 中存在這些屬性,則會覆寫這些屬性;如果用戶端 obj 中不存在這些屬性,則會保留這些屬性

  • client_obj – 用戶端想要建立的物件。

傳回

合併後的物件

airflow.providers.cncf.kubernetes.pod_generator.extend_object_field(base_obj, client_obj, field_name)[來源]

將欄位值新增至現有物件。

參數
  • base_obj – 具有屬性 field_name(為清單)的物件

  • client_obj – 具有屬性 field_name(為清單)的物件。傳回此物件的副本,其中 field_name 已修改

  • field_name – 清單欄位的名稱

傳回

用戶端 obj,其屬性 field_name 是附加的兩個屬性

此條目是否有幫助?