Podman Kubernetes YAML Replica Behavior
A Deployment asking for three replicas gets a warning and one pod. Service and StatefulSet are refused by name. Memory limits, CPU and liveness probes, on the other hand, are honoured exactly.
Pods Guide 15 of 47 Advanced
- OSUbuntu 26.04 LTS (resolute)
- Podman5.7.0
- Runtimecrun 1.21
- Networknetavark 1.16.1
- TimeAbout 13 min
- Reviewed22 August 2026
Written against the versions above. Podman follows the distribution here rather than a vendor repository, so the version you get is the one Ubuntu shipped. The commands are stable across 5.x.
| Server Name | IP Address | OS | Roles | CPU | RAM | HDD |
|---|---|---|---|---|---|---|
| PODMAN01 | 192.168.0.24 | Ubuntu 26.04 LTS | Primary Container Host | 2 Core | 4 GB | 50 GB |
Before you start
- guide 23 - this guide is the boundary of what that one does.
-
A Deployment asking for three
A perfectly ordinary Deployment:
replicas: 3, a selector, a pod template. Play it.level=warning msg="Limiting replica count to 1, more than one replica is not supported by Podman"One pod, named
fanout-pod- the Deployment's name with-podappended.This is the most important limit on the whole path, and the warning states it plainly: Podman is not a scheduler. Replicas exist so a controller can spread copies across nodes and replace the ones that die. There is one node here and no controller, so the number has nowhere to go.
Note that it warns rather than refusing. Your manifest ran, and it did not do what it says. That is the failure mode to watch for - not an error you cannot miss, but a warning above output that otherwise looks like success.
bash Example session podman kube play dep.yamltime="2026-08-22T11:09:34Z" level=warning msg="Limiting replica count to 1, more than one replica is not supported by Podman"Pod:c01315c6a04eb89312c3d4f034f7d842df4f12eb26d0b9aa5c7447a0f5cfe1e0Container:bd394b71b07744a35a8bad14b7c7fd7f394804cd44e743cb588046b67c98bac0podman pod psPOD ID NAME STATUS CREATED INFRA ID # OF CONTAINERSc01315c6a04e fanout-pod Running 5 seconds ago 28c7cb9a0b0c 2podman kube down dep.yamltime="2026-08-22T11:09:40Z" level=warning msg="Limiting replica count to 1, more than one replica is not supported by Podman"time="2026-08-22T11:09:50Z" level=warning msg="StopSignal SIGTERM failed to stop container fanout-pod-app in 10 seconds, resorting to SIGKILL"Pods stopped:Error: stopping container 28c7cb9a0b0cae85158116ef0856226b8d54a9397afa81fcfbe68c2aab8630af: removing container 28c7cb9a0b0cae85158116ef0856226b8d54a9397afa81fcfbe68c2aab8630af network: 1 error occurred: * rootless netns: kill network process: permission deniedExpected resultThe replica warning, one pod named
fanout-podwith two containers.Success conditionYou have seen a manifest run successfully and quietly ignore a field.
-
Two kinds it will not pretend to support
A
Serviceof type LoadBalancer, and aStatefulSet. Both are valid Kubernetes. Both get the same answer:Error: YAML document does not contain any supported kube kindExit 125, nothing created.
This is the better failure mode, and the contrast with step 1 is the lesson. A Service is a cluster-wide virtual IP with a controller behind it; a StatefulSet is stable identity and ordered rollout across nodes. Podman cannot approximate either, so it declines rather than producing something that looks like it worked.
The supported set is small and worth memorising: Pod, Deployment, DaemonSet, Job, PersistentVolumeClaim, ConfigMap and Secret. Everything else is this error.
A practical consequence for anyone testing manifests locally: a file containing a Deployment *and* its Service will fail on the Service, so split it or accept that local play covers only half your deployment.
bash Example session podman kube play svc.yamlError: YAML document does not contain any supported kube kind[exit 125]podman kube play ss.yamlError: YAML document does not contain any supported kube kind[exit 125]Expected result
does not contain any supported kube kindand exit 125, twice.Success conditionYou can name what
kube playsupports without guessing. -
What it does honour, exactly
Now the other direction, because the limits above make it easy to underestimate this. A Pod with resource limits and a liveness probe:
mem=67108864 cpu=200000000 health=setmemory: "64Mi"became 67108864 bytes. That is 64 x 1024 x 1024 exactly - it parsed the Kubernetes suffix correctly rather than treating Mi as a megabyte.cpu: "200m"became 200000000 NanoCpus. 200 millicores, converted faithfully.- The
livenessProbebecame a Podman healthcheck, which is whypodman psreportsUp 1 second (starting)- a state that only exists because something is being checked.
So the boundary is not "Podman does the easy half". It is specifically about cluster-scoped behaviour: anything needing a scheduler, a virtual IP or coordination between nodes is out, and anything that is a property of one container on one host is in - and implemented properly.
That makes
kube playgenuinely useful for what it is good at: checking that a container starts, that its probe passes, that its limits are what you meant, and that the image and command line are right, before any of it reaches a cluster.bash Example session podman kube play probe.yamlPod:c0fceca7e8bc24e3c27a88bba2c2de45a4f12f74731920dd2af8c313aa3dc614Container:2d2f489672b349382dff3b55c673d4e00890aab805b92e2ff8bfef9946901e2epodman ps --format 'table {{.Names}} {{.Status}}'NAMES STATUSc0fceca7e8bc-infra Up 1 secondprobed-web Up 1 second (starting)podman inspect probed-web --format 'mem={{.HostConfig.Memory}} cpu={{.HostConfig.NanoCpus}} health={{if .Config.Healthcheck}}set{{else}}none{{end}}'mem=67108864 cpu=200000000 health=setpodman kube down probe.yamlPods stopped:Error: stopping container 78824f07de2676baf19fc43e9ffa465abeb2901eeeafdef926dc0af34c1ab987: removing container 78824f07de2676baf19fc43e9ffa465abeb2901eeeafdef926dc0af34c1ab987 network: 1 error occurred: * rootless netns: kill network process: permission denied Pods removed:Expected result
mem=67108864 cpu=200000000 health=set, and a container reported as(starting).Success conditionYou can state the rule for what survives the translation and what does not.
Troubleshooting
Error: YAML document does not contain any supported kube kindon a file you believe is supported.Why: Often a multi-document file where one document is an unsupported kind, or an
apiVersionthat does not match the kind.Fix:Split the file and play each document alone to find the offender. Check
apps/v1for Deployment and DaemonSet,v1for Pod, ConfigMap and Secret,batch/v1for Job.A Deployment played fine but only one copy of your app is running.
Why: The replica warning. It scrolled past above output that looked successful.
Fix:There is no fix on one host - this is what Podman does. If you need several copies locally, play the manifest several times with different pod names, or use a real cluster.
A
livenessProbeusingexecworks buthttpGetnever becomes healthy.Why: The probe runs from inside the container's network namespace and needs the port actually listening; a
hostPortis not involved.Fix:
podman healthcheck run <container>runs the check once and prints the result, which is faster than waiting for the interval.A PersistentVolumeClaim in the manifest produced something unexpected.
Why: PVCs are supported, but Podman satisfies them with a local named volume - there is no storage class and no provisioner.
Fix:
podman volume lsshows what it created. Treat it as a local volume with a Kubernetes-shaped name, not as cluster storage.