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.
@@ -27,7 +27,7 @@ import packaging.version
27
27
 
28
28
  __all__ = ["__version__"]
29
29
 
30
- __version__ = "8.0.0"
30
+ __version__ = "8.0.1"
31
31
 
32
32
  try:
33
33
  from airflow import __version__ as airflow_version
@@ -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
- :ref:`executor:KubernetesExecutor`
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.error(
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": 1707637063,
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
- # If a task got marked as failed, "on_kill" method would be called and the pod will be cleaned up
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
- if self._killed:
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.0rc3
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.0/changelog.html
32
- Project-URL: Documentation, https://airflow.apache.org/docs/apache-airflow-providers-cncf-kubernetes/8.0.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.0.rc3``
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.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.0/changelog.html>`_.
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=hUe3RqR8lcisxD9LGi2zUo6uCq3a9e5xiJAgqZsQY7s,1590
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=jhhA8LvwfihkJDJ_TaQMDpMiMdDHn4iKux0cIq4S1Uo,16971
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=SZhMYmCJACkzxEFe0vcCW0m1XmoFpmDaIYf_Rl_uycA,4851
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=TNS3uRZaZn8c_xNrsi5eMljvIsSzKfUr2_NLIsyhHUI,34173
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=sG4AtsrMLqFRhaOYlWCj9AqLkT2NNu8hZMAlvX9XxpA,21787
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=XvJgehU-4ZubJZ2vsekHX4DlCLlzBttXuZQlpVZZ2Ro,1262
33
- airflow/providers/cncf/kubernetes/operators/pod.py,sha256=3dnMgOn3RriBNvN_0_7eUe9_f35m9Tt5o26EKORoL9Q,49435
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=yptsSm6PmdPKFLVZj9IU0zChZddom2mZcTXFteuZrjo,1259
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.0rc3.dist-info/entry_points.txt,sha256=ByD3QJJyP9CfmTYtpNI1953akD38RUDgpGXLaq9vpOw,111
55
- apache_airflow_providers_cncf_kubernetes-8.0.0rc3.dist-info/WHEEL,sha256=EZbGkh7Ie4PoZfRQ8I0ZuP9VklN_TvcZ6DSE5Uar4z4,81
56
- apache_airflow_providers_cncf_kubernetes-8.0.0rc3.dist-info/METADATA,sha256=E1WneQbgmPwuxgKPBYwOEkw3M-CMLg1bB9ErdBO08Ow,5214
57
- apache_airflow_providers_cncf_kubernetes-8.0.0rc3.dist-info/RECORD,,
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,,