:py:mod:`airflow.providers.cncf.kubernetes.operators.kubernetes_pod`
====================================================================

.. py:module:: airflow.providers.cncf.kubernetes.operators.kubernetes_pod

.. autoapi-nested-parse::

   Executes task in a Kubernetes POD



Module Contents
---------------

Classes
~~~~~~~

.. autoapisummary::

   airflow.providers.cncf.kubernetes.operators.kubernetes_pod.KubernetesPodOperator




.. py:exception:: PodReattachFailure

   Bases: :py:obj:`airflow.exceptions.AirflowException`

   When we expect to be able to find a pod but cannot.


.. py:class:: KubernetesPodOperator(*, namespace = None, image = None, name = None, random_name_suffix = True, cmds = None, arguments = None, ports = None, volume_mounts = None, volumes = None, env_vars = None, env_from = None, secrets = None, in_cluster = None, cluster_context = None, labels = None, reattach_on_restart = True, startup_timeout_seconds = 120, get_logs = True, image_pull_policy = None, annotations = None, resources = None, affinity = None, config_file = None, node_selectors = None, node_selector = None, image_pull_secrets = None, service_account_name = None, is_delete_operator_pod = True, hostnetwork = False, tolerations = None, security_context = None, dnspolicy = None, schedulername = None, full_pod_spec = None, init_containers = None, log_events_on_failure = False, do_xcom_push = False, pod_template_file = None, priority_class_name = None, pod_runtime_info_envs = None, termination_grace_period = None, configmaps = None, **kwargs)

   Bases: :py:obj:`airflow.models.BaseOperator`

   Execute a task in a Kubernetes Pod

   .. seealso::
       For more information on how to use this operator, take a look at the guide:
       :ref:`howto/operator:KubernetesPodOperator`

   .. note::
       If you use `Google Kubernetes Engine <https://cloud.google.com/kubernetes-engine/>`__
       and Airflow is not running in the same cluster, consider using
       :class:`~airflow.providers.google.cloud.operators.kubernetes_engine.GKEStartPodOperator`, which
       simplifies the authorization process.

   :param namespace: the namespace to run within kubernetes.
   :param image: Docker image you wish to launch. Defaults to hub.docker.com,
       but fully qualified URLS will point to custom repositories. (templated)
   :param name: name of the pod in which the task will run, will be used (plus a random
       suffix if random_name_suffix is True) to generate a pod id (DNS-1123 subdomain,
       containing only [a-z0-9.-]).
   :param random_name_suffix: if True, will generate a random suffix.
   :param cmds: entrypoint of the container. (templated)
       The docker images's entrypoint is used if this is not provided.
   :param arguments: arguments of the entrypoint. (templated)
       The docker image's CMD is used if this is not provided.
   :param ports: ports for the launched pod.
   :param volume_mounts: volumeMounts for the launched pod.
   :param volumes: volumes for the launched pod. Includes ConfigMaps and PersistentVolumes.
   :param env_vars: Environment variables initialized in the container. (templated)
   :param secrets: Kubernetes secrets to inject in the container.
       They can be exposed as environment vars or files in a volume.
   :param in_cluster: run kubernetes client with in_cluster configuration.
   :param cluster_context: context that points to kubernetes cluster.
       Ignored when in_cluster is True. If None, current-context is used.
   :param reattach_on_restart: if the worker dies while the pod is running, reattach and monitor
       during the next try. If False, always create a new pod for each try.
   :param labels: labels to apply to the Pod. (templated)
   :param startup_timeout_seconds: timeout in seconds to startup the pod.
   :param get_logs: get the stdout of the container as logs of the tasks.
   :param image_pull_policy: Specify a policy to cache or always pull an image.
   :param annotations: non-identifying metadata you can attach to the Pod.
       Can be a large range of data, and can include characters
       that are not permitted by labels.
   :param resources: resources for the launched pod.
   :param affinity: affinity scheduling rules for the launched pod.
   :param config_file: The path to the Kubernetes config file. (templated)
       If not specified, default value is ``~/.kube/config``
   :param node_selector: A dict containing a group of scheduling rules.
   :param image_pull_secrets: Any image pull secrets to be given to the pod.
       If more than one secret is required, provide a
       comma separated list: secret_a,secret_b
   :param service_account_name: Name of the service account
   :param is_delete_operator_pod: What to do when the pod reaches its final
       state, or the execution is interrupted. If True (default), delete the
       pod; if False, leave the pod.
   :param hostnetwork: If True enable host networking on the pod.
   :param tolerations: A list of kubernetes tolerations.
   :param security_context: security options the pod should run with (PodSecurityContext).
   :param dnspolicy: dnspolicy for the pod.
   :param schedulername: Specify a schedulername for the pod
   :param full_pod_spec: The complete podSpec
   :param init_containers: init container for the launched Pod
   :param log_events_on_failure: Log the pod's events if a failure occurs
   :param do_xcom_push: If True, the content of the file
       /airflow/xcom/return.json in the container will also be pushed to an
       XCom when the container completes.
   :param pod_template_file: path to pod template file (templated)
   :param priority_class_name: priority class name for the launched Pod
   :param termination_grace_period: Termination grace period if task killed in UI,
       defaults to kubernetes default

   .. py:attribute:: BASE_CONTAINER_NAME
      :annotation: = base

      

   .. py:attribute:: POD_CHECKED_KEY
      :annotation: = already_checked

      

   .. py:attribute:: template_fields
      :annotation: :Sequence[str] = ['image', 'cmds', 'arguments', 'env_vars', 'labels', 'config_file', 'pod_template_file', 'namespace']

      

   .. py:method:: pod_manager(self)


   .. py:method:: client(self)


   .. py:method:: find_pod(self, namespace, context)

      Returns an already-running pod for this task instance if one exists.


   .. py:method:: get_or_create_pod(self, pod_request_obj, context)


   .. py:method:: await_pod_start(self, pod)


   .. py:method:: extract_xcom(self, pod)

      Retrieves xcom value and kills xcom sidecar container


   .. py:method:: execute(self, context)

      This is the main method to derive when creating an operator.
      Context is the same dictionary used as when rendering jinja templates.

      Refer to get_template_context for more context.


   .. py:method:: cleanup(self, pod, remote_pod)


   .. py:method:: process_pod_deletion(self, pod)


   .. py:method:: patch_already_checked(self, pod)

      Add an "already checked" annotation to ensure we don't reattach on retries


   .. py:method:: on_kill(self)

      Override this method to cleanup subprocesses when a task instance
      gets killed. Any use of the threading, subprocess or multiprocessing
      module within an operator needs to be cleaned up or it will leave
      ghost processes behind.


   .. py:method:: build_pod_request_obj(self, context=None)

      Returns V1Pod object based on pod template file, full pod spec, and other operator parameters.

      The V1Pod attributes are derived (in order of precedence) from operator params, full pod spec, pod
      template file.


   .. py:method:: dry_run(self)

      Prints out the pod definition that would be created by this operator.
      Does not include labels specific to the task instance (since there isn't
      one in a dry_run) and excludes all empty elements.



