
PodCreate
Create a pod on a Kubernetes cluster, wait until the pod stops and collect its logs.
Create a pod on a Kubernetes cluster, wait until the pod stops and collect its logs.
Create a pod on a Kubernetes cluster, wait until the pod stops and collect its logs.
type: "io.kestra.plugin.kubernetes.core.PodCreate"Examples
Launch a Pod
id: kubernetes_pod_create
namespace: company.team
tasks:
- id: pod_create
type: io.kestra.plugin.kubernetes.core.PodCreate
namespace: default
metadata:
labels:
my-label: my-value
spec:
containers:
- name: unittest
image: debian:stable-slim
command:
- 'bash'
- '-c'
- 'for i in {1..10}; do echo $i; sleep 0.1; done'
restartPolicy: Never
Launch a Pod with input files and gather its output files.
id: kubernetes_pod_create
namespace: company.team
inputs:
- id: file
type: FILE
tasks:
- id: pod_create
type: io.kestra.plugin.kubernetes.core.PodCreate
spec:
containers:
- name: unittest
image: centos
command:
- cp
- "{{workingDir}}/data.txt"
- "{{workingDir}}/out.txt"
restartPolicy: Never
waitUntilRunning: PT3M
inputFiles:
data.txt: "{{inputs.file}}"
outputFiles:
- out.txt
Launch a Pod with input files and gather its output files limiting resources for the init and sidecar containers.
id: kubernetes_pod_create
namespace: company.team
inputs:
- id: file
type: FILE
tasks:
- id: pod_create
type: io.kestra.plugin.kubernetes.core.PodCreate
fileSidecar:
resources:
limits:
cpu: "300m"
memory: "512Mi"
spec:
containers:
- name: unittest
image: centos
command:
- cp
- "{{workingDir}}/data.txt"
- "{{workingDir}}/out.txt"
restartPolicy: Never
waitUntilRunning: PT3M
inputFiles:
data.txt: "{{inputs.file}}"
outputFiles:
- out.txt
Launch a Pod with default container spec applied to all containers for restrictive environments.
id: kubernetes_pod_create_secure
namespace: company.team
inputs:
- id: file
type: FILE
tasks:
- id: pod_create
type: io.kestra.plugin.kubernetes.core.PodCreate
containerDefaultSpec:
securityContext:
allowPrivilegeEscalation: false
capabilities:
drop:
- ALL
readOnlyRootFilesystem: true
seccompProfile:
type: RuntimeDefault
volumeMounts:
- name: tmp
mountPath: /tmp
spec:
volumes:
- name: tmp
emptyDir: {}
containers:
- name: main
image: centos
command:
- cp
- "{{workingDir}}/data.txt"
- "{{workingDir}}/out.txt"
restartPolicy: Never
waitUntilRunning: PT3M
inputFiles:
data.txt: "{{inputs.file}}"
outputFiles:
- out.txt
Properties
spec*Requiredobject
The pod specification
Kubernetes pod specification defining containers, volumes, restart policy, and other pod settings. Must include at least one container. Supports dynamic template expressions including the special variable which resolves to '/kestra/working-dir' when inputFiles or outputFiles are used.
connectionNon-dynamic
The connection parameters to the Kubernetes cluster
If no connection is defined, we try to load the connection from the current context in the following order:
- System properties
- Environment variables
- Kube config file
- Service account token and a mounted CA certificate.
You can pass a full configuration with all options if needed.
io.kestra.plugin.kubernetes.models.Connection
v1RSAhttps://kubernetes.default.svcio.kestra.plugin.kubernetes.models.OAuthTokenProvider
containerDefaultSpecobject
Default container spec applied to all containers in the pod
When set, these container spec fields are merged into all containers including:
- User-defined containers in the spec
- Init and sidecar containers for file transfer (unless fileSidecar.defaultSpec is set)
This provides a convenient way to apply uniform container settings across all containers, which is especially useful in restrictive environments like GovCloud.
Supports any valid Kubernetes container spec fields such as:
- securityContext: Security settings for all containers
- volumeMounts: Volume mounts to add to all containers
- resources: Resource limits/requests for all containers
- env: Environment variables for all containers
Merge behavior:
- For nested objects (like securityContext): deep merge, container-specific values take precedence
- For lists (like volumeMounts, env): concatenated, with defaults added first
- Container-specific values always override defaults
Example configuration:
containerDefaultSpec:
securityContext:
allowPrivilegeEscalation: false
capabilities:
drop:
- ALL
readOnlyRootFilesystem: true
seccompProfile:
type: RuntimeDefault
volumeMounts:
- name: tmp
mountPath: /tmp
resources:
limits:
memory: "256Mi"
currentConnectionNon-dynamic
io.kestra.plugin.kubernetes.models.Connection
v1The API version
CA certificate as data
CA certificate as file path
Client certificate as data
Client certificate as a file path
RSAClient key encryption algorithm
default is RSA
Client key as data
Client key as a file path
Client key passphrase
Disable hostname verification
Key store file
Key store passphrase
https://kubernetes.default.svcThe URL to the Kubernetes API
The namespace used
Oauth token
Oauth token provider
io.kestra.plugin.kubernetes.models.OAuthTokenProvider
Password
Trust all certificates
Truststore file
Truststore passphrase
Username
currentNamespaceNon-dynamicstring
currentPodNameNon-dynamic
java.util.concurrent.atomic.AtomicReference
deletebooleanstring
trueWhether to delete the pod after task completion
When true (default), the pod is automatically deleted after successful completion or failure. Set to false to keep the pod for debugging purposes. Note that pods are always deleted when the task is killed.
fileSidecarNon-dynamic
{
"image": "busybox"
}The configuration of the file sidecar container that handles the download and upload of files
io.kestra.plugin.kubernetes.models.SideCar
Default container spec for the file sidecar and init containers
Default container spec fields applied to the init and sidecar containers used for file transfer. When set, this overrides containerDefaultSpec for file transfer containers only.
Supports the same fields as containerDefaultSpec:
- securityContext: Security settings for file transfer containers
- volumeMounts: Volume mounts to add to file transfer containers
- resources: Resource limits/requests (note: also available as top-level 'resources' property)
- env: Environment variables for file transfer containers
Example configuration:
fileSidecar:
defaultSpec:
securityContext:
allowPrivilegeEscalation: false
capabilities:
drop:
- ALL
readOnlyRootFilesystem: true
seccompProfile:
type: RuntimeDefault
volumeMounts:
- name: tmp
mountPath: /tmp
busyboxThe image used for the file sidecar container
The resource requirements applied to the file sidecar container
inputFilesobject
The files to create on the local filesystem – it can be a map or a JSON object.
The files will be available inside the kestra/working-dir directory of the container. You can use the special variable {{workingDir}} in your command to refer to it.
killedNon-dynamic
falsejava.util.concurrent.atomic.AtomicBoolean
metadataobject
The pod metadata configuration
Kubernetes metadata for the pod, including labels, annotations, and name. If name is not specified, it will be auto-generated based on the task execution context. Supports dynamic template expressions.
namespacestring
defaultThe namespace where the operation will be done
The Kubernetes namespace in which to execute the operation. Defaults to 'default' if not specified.
outputFilesarray
The files from the container filesystem to send to Kestra's internal storage
Only files created inside the kestra/working-dir directory of the container can be retrieved.
Must be a list of glob expressions relative to the current working directory, some examples: my-dir/**, my-dir/*/** or my-dir/my-file.txt..
resumebooleanstring
trueWhether to resume execution of an existing pod
When true (default), attempts to reconnect to an existing pod with matching taskrun ID and attempt count instead of creating a new pod. This enables recovery from interrupted executions. If no matching pod exists or multiple matching pods are found, a new pod is created.
waitForLogIntervalstring
PT30SdurationAdditional time to wait for late-arriving logs after pod completion
After the pod completes and initial log collection finishes, wait this duration to capture any remaining logs that may still be in transit. Defaults to 30 seconds. Useful as a safety net for high-throughput scenarios where logs may arrive slightly delayed.
waitRunningstring
PT1HdurationThe maximum duration to wait for pod completion
Maximum duration allowed for the pod to complete after reaching Running state. If the pod does not complete within this time, the task will fail and the pod will be deleted. Only used by PodCreate task.
waitUntilReadystring
PT0SdurationThe maximum duration to wait until the resource becomes ready
When set to a positive duration, waits for the resource to report Ready=True in its status conditions. Set to PT0S (zero, default) to skip waiting. Supports Pods, StatefulSets, and custom resources that use the Ready condition. Note: Deployments are not supported as they use the Available condition instead of Ready.
waitUntilRunningstring
PT10MdurationThe maximum duration to wait until the pod is running
Maximum time to wait for the pod to reach Running state, including scheduler assignment, image pull, and container startup. Only used by PodCreate task.
Outputs
metadata
The pod metadata
io.kestra.plugin.kubernetes.models.Metadata
List of all annotations of the resource
Name of the current cluster
date-timeCreation datetime
Deletetion grace period in seconds
date-timeDeletion datetime
List of finalizers
Generate name of the resource
Generation
List of labels
List of managed fields
io.fabric8.kubernetes.api.model.ManagedFieldsEntry
io.fabric8.kubernetes.api.model.FieldsV1
Name of the resource
Namespace of the resource
List of owner reference
io.fabric8.kubernetes.api.model.OwnerReference
Resource version
Direct link to the API of this resource
Generated UUID of this resource
outputFilesobject
The output files URI in Kestra's internal storage
status
The pod status
io.kestra.plugin.kubernetes.models.PodStatus
io.fabric8.kubernetes.api.model.PodCondition
io.fabric8.kubernetes.api.model.ContainerStatus
io.fabric8.kubernetes.api.model.Quantity
io.fabric8.kubernetes.api.model.ResourceStatus
io.fabric8.kubernetes.api.model.ContainerState
io.fabric8.kubernetes.api.model.ResourceRequirements
io.fabric8.kubernetes.api.model.ContainerState
io.fabric8.kubernetes.api.model.ContainerUser
io.fabric8.kubernetes.api.model.VolumeMountStatus
io.fabric8.kubernetes.api.model.ContainerStatus
io.fabric8.kubernetes.api.model.Quantity
io.fabric8.kubernetes.api.model.ResourceStatus
io.fabric8.kubernetes.api.model.ContainerState
io.fabric8.kubernetes.api.model.ResourceRequirements
io.fabric8.kubernetes.api.model.ContainerState
io.fabric8.kubernetes.api.model.ContainerUser
io.fabric8.kubernetes.api.model.VolumeMountStatus
io.fabric8.kubernetes.api.model.ContainerStatus
io.fabric8.kubernetes.api.model.Quantity
io.fabric8.kubernetes.api.model.ResourceStatus
io.fabric8.kubernetes.api.model.ContainerState
io.fabric8.kubernetes.api.model.ResourceRequirements
io.fabric8.kubernetes.api.model.ContainerState
io.fabric8.kubernetes.api.model.ContainerUser
io.fabric8.kubernetes.api.model.VolumeMountStatus
io.fabric8.kubernetes.api.model.PodIP
date-timevarsobject
The output variables extracted from the logs of the commands