World map

 

BM: Baca dalam Bahasa Melayu

World K9: Cluster Admin

Static pods and the manifests folder

You will learn: how the office runs from files, and how to bring a missing part back.

Checked with Kubernetes 1.37 on 1 Nov 2026

The problem

You are here: cluster kind-dev namespace default
The tray pod is Pending. In kube-system, no kube-scheduler pod is found. Terminal output: $ kubectl get pods NAME READY STATUS RESTARTS AGE tray 0/1 Pending 0 12s $ kubectl get pods -n kube-system -l component=kube-scheduler No resources found in kube-system namespace.

A new tray waits in Pending, with no events at all. The scheduler’s pod is gone too. Who hires the office staff back?

Try it

The office can’t hire itself. So the kubelet on its stall starts them from files: static pod: A tray the stall's supervisor starts by itself, from a file in /etc/kubernetes/manifests, without asking the office.. Type ssh dev-control-plane, then ls /etc/kubernetes/manifests.

You are here: cluster kind-dev namespace default
Stalls: 3. Trays: 0 (0 ready). Waiting for a stall: 0.
dev-control-planeOpenManager

No trays here.

dev-workerOpen

No trays here.

dev-worker2Open

No trays here.

Time: +0s (sped up)

Try it

The office shows each static pod as a mirror pod: The office's read-only photo of a static pod. Deleting the photo does not stop the real pod.: a read-only photo. Tap two lines: “from a file”, and its owner.

Tap the 2 lines that prove it is a static pod.

0 of 2 found

Predict

You delete that mirror pod with kubectl. What happens?

Pick one answer.

Watch

You are here: cluster kind-dev namespace default
The mirror pod is deleted. Three seconds later, kube-scheduler-dev-control-plane is listed again, Running, age 3s. Terminal output: $ kubectl delete pod kube-scheduler-dev-control-plane -n kube-system pod "kube-scheduler-dev-control-plane" deleted from kube-system namespace $ sleep 3 $ kubectl get pods -n kube-system -l component=kube-scheduler NAME READY STATUS RESTARTS AGE kube-scheduler-dev-control-plane 1/1 Running 0 3s

Gone, then back with a new age. The photo changed. The job card did not.

Try it

Someone moved the scheduler’s job card to /root. Put it back. Careful: this folder runs the office. Change only what you mean.

You are here: cluster kind-dev namespace default
Stalls: 3. Trays: 0 (0 ready). Waiting for a stall: 1.
dev-control-planeOpenManager

No trays here.

dev-workerOpen

No trays here.

dev-worker2Open

No trays here.

Waiting for a stall
  • trayPending
Time: +0s (sped up)

Check

Good habit in the manifests folder? Swipe right for good.

Swipe right for good, left for needs work. Or use the buttons.

1 / 4

Copy the file to /root before you change it

Copy the file to /root before you change it

Check

Static pod or normal pod? Look at the names.

Drag a card into a box. Or tap the card, then tap the box.

      You did it!

      You can now find static pods and bring a lost one back.

      Go deeper (optional)

      The folder comes from the kubelet’s settings: staticPodPath in /var/lib/kubelet/config.yaml. Workers have the folder too, only empty. Files starting with a dot are skipped. Keep backups outside, for example in /etc/kubernetes/backup/.

      Real mission

      1. kubectl config current-context
      2. docker exec dev-worker sh -c 'printf "apiVersion: v1\nkind: Pod\nmetadata:\n name: static-web\nspec:\n containers:\n - name: web\n image: nginx:1.29-alpine\n" > /etc/kubernetes/manifests/static-web.yaml'
      3. kubectl get pods -o wide
      4. kubectl delete pod static-web-dev-worker
      5. docker exec dev-worker rm /etc/kubernetes/manifests/static-web.yaml

      0 of 5 steps done · Your ticks are saved.