apache-airflow-providers-cncf-kubernetes 8.0.0rc3__py3-none-any.whl → 8.0.1rc1__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- airflow/providers/cncf/kubernetes/__init__.py +1 -1
- airflow/providers/cncf/kubernetes/executors/kubernetes_executor.py +2 -3
- airflow/providers/cncf/kubernetes/executors/kubernetes_executor_utils.py +28 -0
- airflow/providers/cncf/kubernetes/get_provider_info.py +9 -1
- airflow/providers/cncf/kubernetes/kube_config.py +6 -0
- airflow/providers/cncf/kubernetes/operators/kubernetes_pod.py +1 -1
- airflow/providers/cncf/kubernetes/operators/pod.py +4 -2
- airflow/providers/cncf/kubernetes/triggers/kubernetes_pod.py +1 -1
- {apache_airflow_providers_cncf_kubernetes-8.0.0rc3.dist-info → apache_airflow_providers_cncf_kubernetes-8.0.1rc1.dist-info}/METADATA +6 -6
- {apache_airflow_providers_cncf_kubernetes-8.0.0rc3.dist-info → apache_airflow_providers_cncf_kubernetes-8.0.1rc1.dist-info}/RECORD +12 -12
- {apache_airflow_providers_cncf_kubernetes-8.0.0rc3.dist-info → apache_airflow_providers_cncf_kubernetes-8.0.1rc1.dist-info}/WHEEL +0 -0
- {apache_airflow_providers_cncf_kubernetes-8.0.0rc3.dist-info → apache_airflow_providers_cncf_kubernetes-8.0.1rc1.dist-info}/entry_points.txt +0 -0
|
@@ -19,7 +19,7 @@ KubernetesExecutor.
|
|
|
19
19
|
|
|
20
20
|
.. seealso::
|
|
21
21
|
For more information on how the KubernetesExecutor works, take a look at the guide:
|
|
22
|
-
:
|
|
22
|
+
:doc:`/kubernetes_executor`
|
|
23
23
|
"""
|
|
24
24
|
from __future__ import annotations
|
|
25
25
|
|
|
@@ -431,10 +431,9 @@ class KubernetesExecutor(BaseExecutor):
|
|
|
431
431
|
self.kube_scheduler.run_next(task)
|
|
432
432
|
self.task_publish_retries.pop(key, None)
|
|
433
433
|
except PodReconciliationError as e:
|
|
434
|
-
self.log.
|
|
434
|
+
self.log.exception(
|
|
435
435
|
"Pod reconciliation failed, likely due to kubernetes library upgrade. "
|
|
436
436
|
"Try clearing the task to re-run.",
|
|
437
|
-
exc_info=True,
|
|
438
437
|
)
|
|
439
438
|
self.fail(task[0], e)
|
|
440
439
|
except ApiException as e:
|
|
@@ -235,6 +235,34 @@ class KubernetesJobWatcher(multiprocessing.Process, LoggingMixin):
|
|
|
235
235
|
self.watcher_queue.put(
|
|
236
236
|
(pod_name, namespace, TaskInstanceState.FAILED, annotations, resource_version)
|
|
237
237
|
)
|
|
238
|
+
elif (
|
|
239
|
+
self.kube_config.worker_pod_pending_fatal_container_state_reasons
|
|
240
|
+
and "status" in event["raw_object"]
|
|
241
|
+
):
|
|
242
|
+
self.log.info("Event: %s Pending, annotations: %s", pod_name, annotations_string)
|
|
243
|
+
# Init containers and base container statuses to check.
|
|
244
|
+
# Skipping the other containers statuses check.
|
|
245
|
+
container_statuses_to_check = []
|
|
246
|
+
if "initContainerStatuses" in event["raw_object"]["status"]:
|
|
247
|
+
container_statuses_to_check.extend(event["raw_object"]["status"]["initContainerStatuses"])
|
|
248
|
+
if "containerStatuses" in event["raw_object"]["status"]:
|
|
249
|
+
container_statuses_to_check.append(event["raw_object"]["status"]["containerStatuses"][0])
|
|
250
|
+
for container_status in container_statuses_to_check:
|
|
251
|
+
container_status_state = container_status["state"]
|
|
252
|
+
if "waiting" in container_status_state:
|
|
253
|
+
if (
|
|
254
|
+
container_status_state["waiting"]["reason"]
|
|
255
|
+
in self.kube_config.worker_pod_pending_fatal_container_state_reasons
|
|
256
|
+
):
|
|
257
|
+
if (
|
|
258
|
+
container_status_state["waiting"]["reason"] == "ErrImagePull"
|
|
259
|
+
and container_status_state["waiting"]["message"] == "pull QPS exceeded"
|
|
260
|
+
):
|
|
261
|
+
continue
|
|
262
|
+
self.watcher_queue.put(
|
|
263
|
+
(pod_name, namespace, TaskInstanceState.FAILED, annotations, resource_version)
|
|
264
|
+
)
|
|
265
|
+
break
|
|
238
266
|
else:
|
|
239
267
|
self.log.debug("Event: %s Pending, annotations: %s", pod_name, annotations_string)
|
|
240
268
|
elif status == "Failed":
|
|
@@ -28,8 +28,9 @@ def get_provider_info():
|
|
|
28
28
|
"name": "Kubernetes",
|
|
29
29
|
"description": "`Kubernetes <https://kubernetes.io/>`__\n",
|
|
30
30
|
"state": "ready",
|
|
31
|
-
"source-date-epoch":
|
|
31
|
+
"source-date-epoch": 1709555165,
|
|
32
32
|
"versions": [
|
|
33
|
+
"8.0.1",
|
|
33
34
|
"8.0.0",
|
|
34
35
|
"7.14.0",
|
|
35
36
|
"7.13.0",
|
|
@@ -222,6 +223,13 @@ def get_provider_info():
|
|
|
222
223
|
"example": None,
|
|
223
224
|
"default": "False",
|
|
224
225
|
},
|
|
226
|
+
"worker_pod_pending_fatal_container_state_reasons": {
|
|
227
|
+
"description": "If the worker pods are in a pending state due to a fatal container\nstate reasons, then fail the task and delete the worker pod\nif delete_worker_pods is True and delete_worker_pods_on_failure is True.\n",
|
|
228
|
+
"version_added": "8.1.0",
|
|
229
|
+
"type": "string",
|
|
230
|
+
"example": None,
|
|
231
|
+
"default": "CreateContainerConfigError,ErrImagePull,CreateContainerError,ImageInspectError, InvalidImageName",
|
|
232
|
+
},
|
|
225
233
|
"worker_pods_creation_batch_size": {
|
|
226
234
|
"description": 'Number of Kubernetes Worker Pod creation calls per scheduler loop.\nNote that the current default of "1" will only launch a single pod\nper-heartbeat. It is HIGHLY recommended that users increase this\nnumber to match the tolerance of their kubernetes cluster for\nbetter performance.\n',
|
|
227
235
|
"version_added": None,
|
|
@@ -40,6 +40,12 @@ class KubeConfig:
|
|
|
40
40
|
self.delete_worker_pods_on_failure = conf.getboolean(
|
|
41
41
|
self.kubernetes_section, "delete_worker_pods_on_failure"
|
|
42
42
|
)
|
|
43
|
+
self.worker_pod_pending_fatal_container_state_reasons = []
|
|
44
|
+
if conf.get(self.kubernetes_section, "worker_pod_pending_fatal_container_state_reasons", fallback=""):
|
|
45
|
+
self.worker_pod_pending_fatal_container_state_reasons = conf.get(
|
|
46
|
+
self.kubernetes_section, "worker_pod_pending_fatal_container_state_reasons"
|
|
47
|
+
).split(",")
|
|
48
|
+
|
|
43
49
|
self.worker_pods_creation_batch_size = conf.getint(
|
|
44
50
|
self.kubernetes_section, "worker_pods_creation_batch_size"
|
|
45
51
|
)
|
|
@@ -21,7 +21,7 @@ from __future__ import annotations
|
|
|
21
21
|
import warnings
|
|
22
22
|
|
|
23
23
|
from airflow.exceptions import AirflowProviderDeprecationWarning
|
|
24
|
-
from airflow.providers.cncf.kubernetes.operators.pod import * # noqa
|
|
24
|
+
from airflow.providers.cncf.kubernetes.operators.pod import * # noqa: F403
|
|
25
25
|
|
|
26
26
|
warnings.warn(
|
|
27
27
|
"This module is deprecated. Please use `airflow.providers.cncf.kubernetes.operators.pod` instead.",
|
|
@@ -793,9 +793,11 @@ class KubernetesPodOperator(BaseOperator):
|
|
|
793
793
|
self.callbacks.on_pod_cleanup(pod=pod, client=self.client, mode=ExecutionMode.SYNC)
|
|
794
794
|
|
|
795
795
|
def cleanup(self, pod: k8s.V1Pod, remote_pod: k8s.V1Pod):
|
|
796
|
-
#
|
|
796
|
+
# Skip cleaning the pod in the following scenarios.
|
|
797
|
+
# 1. If a task got marked as failed, "on_kill" method would be called and the pod will be cleaned up
|
|
797
798
|
# there. Cleaning it up again will raise an exception (which might cause retry).
|
|
798
|
-
|
|
799
|
+
# 2. remote pod is null (ex: pod creation failed)
|
|
800
|
+
if self._killed or not remote_pod:
|
|
799
801
|
return
|
|
800
802
|
|
|
801
803
|
istio_enabled = self.is_istio_enabled(remote_pod)
|
|
@@ -21,7 +21,7 @@ from __future__ import annotations
|
|
|
21
21
|
import warnings
|
|
22
22
|
|
|
23
23
|
from airflow.exceptions import AirflowProviderDeprecationWarning
|
|
24
|
-
from airflow.providers.cncf.kubernetes.triggers.pod import * # noqa
|
|
24
|
+
from airflow.providers.cncf.kubernetes.triggers.pod import * # noqa: F403
|
|
25
25
|
|
|
26
26
|
warnings.warn(
|
|
27
27
|
"This module is deprecated. Please use `airflow.providers.cncf.kubernetes.triggers.pod` instead.",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: apache-airflow-providers-cncf-kubernetes
|
|
3
|
-
Version: 8.0.
|
|
3
|
+
Version: 8.0.1rc1
|
|
4
4
|
Summary: Provider package apache-airflow-providers-cncf-kubernetes for Apache Airflow
|
|
5
5
|
Keywords: airflow-provider,cncf.kubernetes,airflow,integration
|
|
6
6
|
Author-email: Apache Software Foundation <dev@airflow.apache.org>
|
|
@@ -28,8 +28,8 @@ Requires-Dist: google-re2>=1.0
|
|
|
28
28
|
Requires-Dist: kubernetes>=28.1.0,<=29.0.0
|
|
29
29
|
Requires-Dist: kubernetes_asyncio>=28.1.0,<=29.0.0
|
|
30
30
|
Project-URL: Bug Tracker, https://github.com/apache/airflow/issues
|
|
31
|
-
Project-URL: Changelog, https://airflow.apache.org/docs/apache-airflow-providers-cncf-kubernetes/8.0.
|
|
32
|
-
Project-URL: Documentation, https://airflow.apache.org/docs/apache-airflow-providers-cncf-kubernetes/8.0.
|
|
31
|
+
Project-URL: Changelog, https://airflow.apache.org/docs/apache-airflow-providers-cncf-kubernetes/8.0.1/changelog.html
|
|
32
|
+
Project-URL: Documentation, https://airflow.apache.org/docs/apache-airflow-providers-cncf-kubernetes/8.0.1
|
|
33
33
|
Project-URL: Slack Chat, https://s.apache.org/airflow-slack
|
|
34
34
|
Project-URL: Source Code, https://github.com/apache/airflow
|
|
35
35
|
Project-URL: Twitter, https://twitter.com/ApacheAirflow
|
|
@@ -79,7 +79,7 @@ Project-URL: YouTube, https://www.youtube.com/channel/UCSXwxpWZQ7XZ1WL3wqevChA/
|
|
|
79
79
|
|
|
80
80
|
Package ``apache-airflow-providers-cncf-kubernetes``
|
|
81
81
|
|
|
82
|
-
Release: ``8.0.
|
|
82
|
+
Release: ``8.0.1.rc1``
|
|
83
83
|
|
|
84
84
|
|
|
85
85
|
`Kubernetes <https://kubernetes.io/>`__
|
|
@@ -92,7 +92,7 @@ This is a provider package for ``cncf.kubernetes`` provider. All classes for thi
|
|
|
92
92
|
are in ``airflow.providers.cncf.kubernetes`` python package.
|
|
93
93
|
|
|
94
94
|
You can find package information and changelog for the provider
|
|
95
|
-
in the `documentation <https://airflow.apache.org/docs/apache-airflow-providers-cncf-kubernetes/8.0.
|
|
95
|
+
in the `documentation <https://airflow.apache.org/docs/apache-airflow-providers-cncf-kubernetes/8.0.1/>`_.
|
|
96
96
|
|
|
97
97
|
Installation
|
|
98
98
|
------------
|
|
@@ -119,4 +119,4 @@ PIP package Version required
|
|
|
119
119
|
====================== =====================
|
|
120
120
|
|
|
121
121
|
The changelog for the provider package can be found in the
|
|
122
|
-
`changelog <https://airflow.apache.org/docs/apache-airflow-providers-cncf-kubernetes/8.0.
|
|
122
|
+
`changelog <https://airflow.apache.org/docs/apache-airflow-providers-cncf-kubernetes/8.0.1/changelog.html>`_.
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
airflow/providers/cncf/kubernetes/LICENSE,sha256=ywUBpKZc7Jb96rVt5I3IDbg7dIJAbUSHkuoDcF3jbH4,13569
|
|
2
|
-
airflow/providers/cncf/kubernetes/__init__.py,sha256=
|
|
2
|
+
airflow/providers/cncf/kubernetes/__init__.py,sha256=MbaHKvRjf-mkddQNqXUpG9Vls7zKqd2oJ1jRKtQm_nA,1590
|
|
3
3
|
airflow/providers/cncf/kubernetes/callbacks.py,sha256=s3DRwNmQJSBlbeUwhSUJwfRFFMdJ9h_PnBzVl881r-8,4094
|
|
4
|
-
airflow/providers/cncf/kubernetes/get_provider_info.py,sha256=
|
|
4
|
+
airflow/providers/cncf/kubernetes/get_provider_info.py,sha256=IGN7VwH6p1wcxe2twbeg7lyHz6GnCuwEiedIEUMeO-s,17603
|
|
5
5
|
airflow/providers/cncf/kubernetes/k8s_model.py,sha256=JzpSjHdCBpajT5HohKhvYp4vZ9emf7A6AVmte8tI4T0,2100
|
|
6
6
|
airflow/providers/cncf/kubernetes/kube_client.py,sha256=nL9daGLElvX4f72rWvONRN-VUbrOPzjsElix6xfkcXU,5328
|
|
7
|
-
airflow/providers/cncf/kubernetes/kube_config.py,sha256=
|
|
7
|
+
airflow/providers/cncf/kubernetes/kube_config.py,sha256=FAmhZZ_Z2JtoVzL6wENSjcwrlwAenHttTX_Ild9aEms,5225
|
|
8
8
|
airflow/providers/cncf/kubernetes/kubernetes_helper_functions.py,sha256=NuLumd5JrNVadLKYoNw3LpMYT7Hp3n07ckcOqNv6qE4,6411
|
|
9
9
|
airflow/providers/cncf/kubernetes/pod_generator.py,sha256=WEFKm6xhoT7SV96bXGJTVrWkp2sOlkM4U6-iAdZa56k,24467
|
|
10
10
|
airflow/providers/cncf/kubernetes/pod_generator_deprecated.py,sha256=tOrFvE4MJxy94ecSLOxAGKjIeKztqOC81q_xXr17rRU,11993
|
|
@@ -18,9 +18,9 @@ airflow/providers/cncf/kubernetes/backcompat/backwards_compat_converters.py,sha2
|
|
|
18
18
|
airflow/providers/cncf/kubernetes/decorators/__init__.py,sha256=mlJxuZLkd5x-iq2SBwD3mvRQpt3YR7wjz_nceyF1IaI,787
|
|
19
19
|
airflow/providers/cncf/kubernetes/decorators/kubernetes.py,sha256=YGEdDNZhxeq8dpAaKpwMS2oGRvN1sN0xzf8mYotMk1E,5780
|
|
20
20
|
airflow/providers/cncf/kubernetes/executors/__init__.py,sha256=mlJxuZLkd5x-iq2SBwD3mvRQpt3YR7wjz_nceyF1IaI,787
|
|
21
|
-
airflow/providers/cncf/kubernetes/executors/kubernetes_executor.py,sha256=
|
|
21
|
+
airflow/providers/cncf/kubernetes/executors/kubernetes_executor.py,sha256=YbhPg3Jo20--slN_xLFrQO4qNYOyNySkH4Egy_l5Yoo,34131
|
|
22
22
|
airflow/providers/cncf/kubernetes/executors/kubernetes_executor_types.py,sha256=9rRhfRuujGtSE73Ax0kC12whZCgWF2m6j5w9G9e0F_I,1673
|
|
23
|
-
airflow/providers/cncf/kubernetes/executors/kubernetes_executor_utils.py,sha256=
|
|
23
|
+
airflow/providers/cncf/kubernetes/executors/kubernetes_executor_utils.py,sha256=JKcUwYsipj5oiX7fqcNx3lfnv4Fiogwh-B5fh4fF9Mg,23564
|
|
24
24
|
airflow/providers/cncf/kubernetes/executors/local_kubernetes_executor.py,sha256=r5cvhj9NUTreQScn3Y8NlPFoYIa_NaAVQ27WqtOrJvw,10014
|
|
25
25
|
airflow/providers/cncf/kubernetes/hooks/__init__.py,sha256=9hdXHABrVpkbpjZgUft39kOFL2xSGeG4GEua0Hmelus,785
|
|
26
26
|
airflow/providers/cncf/kubernetes/hooks/kubernetes.py,sha256=_FUOQVpxpahtuQcyiCfenJD7yUsDblmVEV6Ym0wgmE8,25701
|
|
@@ -29,8 +29,8 @@ airflow/providers/cncf/kubernetes/kubernetes_executor_templates/basic_template.y
|
|
|
29
29
|
airflow/providers/cncf/kubernetes/operators/__init__.py,sha256=mlJxuZLkd5x-iq2SBwD3mvRQpt3YR7wjz_nceyF1IaI,787
|
|
30
30
|
airflow/providers/cncf/kubernetes/operators/custom_object_launcher.py,sha256=Q_8iXGOyRpporI-ouhl9eKQSO30yauRdQ95x2pnkku0,15357
|
|
31
31
|
airflow/providers/cncf/kubernetes/operators/job.py,sha256=Z7G9iuNPH_qapodVEwvvGq17fk6xlMC0O6TwT-cWqsg,11614
|
|
32
|
-
airflow/providers/cncf/kubernetes/operators/kubernetes_pod.py,sha256=
|
|
33
|
-
airflow/providers/cncf/kubernetes/operators/pod.py,sha256=
|
|
32
|
+
airflow/providers/cncf/kubernetes/operators/kubernetes_pod.py,sha256=tj1JNZWcu65IGpyO6uZpS9-0Mtjyt52WP_36UZcftYQ,1268
|
|
33
|
+
airflow/providers/cncf/kubernetes/operators/pod.py,sha256=c9mz_PpTKuAUFbAMwn3Z2v-4EzGCQ92dDjNFkjwRDRk,49574
|
|
34
34
|
airflow/providers/cncf/kubernetes/operators/resource.py,sha256=t7JBj7Q-2f_y-vCdTMxrmjG8VYQj9k03u0rz1fbAFVQ,5457
|
|
35
35
|
airflow/providers/cncf/kubernetes/operators/spark_kubernetes.py,sha256=UcID25Shv0zLTx448HcJjeob_24v25q_nAljQ_d8jM0,12070
|
|
36
36
|
airflow/providers/cncf/kubernetes/pod_template_file_examples/__init__.py,sha256=9hdXHABrVpkbpjZgUft39kOFL2xSGeG4GEua0Hmelus,785
|
|
@@ -44,14 +44,14 @@ airflow/providers/cncf/kubernetes/resource_convert/secret.py,sha256=ElZCMbTWeTKo
|
|
|
44
44
|
airflow/providers/cncf/kubernetes/sensors/__init__.py,sha256=9hdXHABrVpkbpjZgUft39kOFL2xSGeG4GEua0Hmelus,785
|
|
45
45
|
airflow/providers/cncf/kubernetes/sensors/spark_kubernetes.py,sha256=AFml2CgXTV13G2VGrmNAIh-778FnRZdyLfverw92Uo0,5552
|
|
46
46
|
airflow/providers/cncf/kubernetes/triggers/__init__.py,sha256=9hdXHABrVpkbpjZgUft39kOFL2xSGeG4GEua0Hmelus,785
|
|
47
|
-
airflow/providers/cncf/kubernetes/triggers/kubernetes_pod.py,sha256
|
|
47
|
+
airflow/providers/cncf/kubernetes/triggers/kubernetes_pod.py,sha256=-SIU78sH6N2z9CFya3Id7OYoB-jmcnD8A_ovF8O0jFw,1265
|
|
48
48
|
airflow/providers/cncf/kubernetes/triggers/pod.py,sha256=eu_9tWOWMwlM6jaXr4QiQuvOsdyGFrMDCgNBPgl9IKE,13126
|
|
49
49
|
airflow/providers/cncf/kubernetes/utils/__init__.py,sha256=ClZN0VPjWySdVwS_ktH7rrgL9VLAcs3OSJSB9s3zaYw,863
|
|
50
50
|
airflow/providers/cncf/kubernetes/utils/delete_from.py,sha256=poObZSoEJwQyaYWilEURs8f4CDY2sn_pfwS31Lf579A,5195
|
|
51
51
|
airflow/providers/cncf/kubernetes/utils/k8s_resource_iterator.py,sha256=-Pgc5i2WEDl7ZBvtJZ4eWDqqlSj8WdULqwUyOWmsRp8,1928
|
|
52
52
|
airflow/providers/cncf/kubernetes/utils/pod_manager.py,sha256=dKCXMs0vNZrWuzsd65yiaVC834j4PFa-GJ0qr_Q0IT4,33328
|
|
53
53
|
airflow/providers/cncf/kubernetes/utils/xcom_sidecar.py,sha256=dCLPE-KyI3nVfawcuKMjhxuBuK9TgVZocc4eC82hAM4,2518
|
|
54
|
-
apache_airflow_providers_cncf_kubernetes-8.0.
|
|
55
|
-
apache_airflow_providers_cncf_kubernetes-8.0.
|
|
56
|
-
apache_airflow_providers_cncf_kubernetes-8.0.
|
|
57
|
-
apache_airflow_providers_cncf_kubernetes-8.0.
|
|
54
|
+
apache_airflow_providers_cncf_kubernetes-8.0.1rc1.dist-info/entry_points.txt,sha256=ByD3QJJyP9CfmTYtpNI1953akD38RUDgpGXLaq9vpOw,111
|
|
55
|
+
apache_airflow_providers_cncf_kubernetes-8.0.1rc1.dist-info/WHEEL,sha256=EZbGkh7Ie4PoZfRQ8I0ZuP9VklN_TvcZ6DSE5Uar4z4,81
|
|
56
|
+
apache_airflow_providers_cncf_kubernetes-8.0.1rc1.dist-info/METADATA,sha256=Ccgav2OBn6q2MaAnl7uiC_NzRUwaY8feGTzdYTd-Tbk,5214
|
|
57
|
+
apache_airflow_providers_cncf_kubernetes-8.0.1rc1.dist-info/RECORD,,
|
|
File without changes
|