We are using minikube, podman
First step is to install podman
https://podman.io/docs/installation
Then install minikube
https://minikube.sigs.k8s.io/docs/start/?arch=%2Fmacos%2Farm64%2Fstable%2Fbinary+download
Also install kubectl
https://kubernetes.io/docs/tasks/tools/install-kubectl-macos/
After all things are installed, we can start minikube using podman as driver, minikube start --driver=podman --container-runtime=cri-o
We can check minikube pods under the namespace kube-system by running
kubectl get pods --namespace=kube-system
NAME READY STATUS RESTARTS AGE
coredns-66bc5c9577-pqxqm 1/1 Running 0 15m
etcd-minikube 1/1 Running 0 15m
kindnet-k5z9k 1/1 Running 0 15m
kube-apiserver-minikube 1/1 Running 0 15m
kube-controller-manager-minikube 1/1 Running 0 15m
kube-proxy-z6sph 1/1 Running 0 15m
kube-scheduler-minikube 1/1 Running 0 15m
storage-provisioner 1/1 Running 0 15m
To run a single pod kubectl run nginx --image=nginx
kubectl describe pod nginx
Name: nginx
Namespace: default
Priority: 0
Service Account: default
Node: minikube/192.168.49.2
Start Time: Wed, 17 Sep 2025 15:19:11 +0530
Labels: run=nginx
Annotations: <none>
Status: Pending
IP: 10.244.0.3
IPs:
IP: 10.244.0.3
Containers:
nginx:
Container ID:
Image: nginx
Image ID:
Port: <none>
Host Port: <none>
State: Waiting
Reason: ImagePullBackOff
Ready: False
Restart Count: 0
Environment: <none>
Mounts:
/var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-wxnl6 (ro)
Conditions:
Type Status
PodReadyToStartContainers True
Initialized True
Ready False
ContainersReady False
PodScheduled True
Volumes:
kube-api-access-wxnl6:
Type: Projected (a volume that contains injected data from multiple sources)
TokenExpirationSeconds: 3607
ConfigMapName: kube-root-ca.crt
Optional: false
DownwardAPI: true
QoS Class: BestEffort
Node-Selectors: <none>
Tolerations: node.kubernetes.io/not-ready:NoExecute op=Exists for 300s
node.kubernetes.io/unreachable:NoExecute op=Exists for 300s
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal BackOff 7h5m (x1717 over 19h) kubelet Back-off pulling image "nginx"
Warning Failed 7h5m (x1717 over 19h) kubelet Error: ImagePullBackOff
Normal Pulling 2m43s (x83 over 19h) kubelet Pulling image "nginx"
Warning Failed 2m43s (x83 over 19h) kubelet Failed to pull image "nginx": short-name "nginx:latest" did not resolve to an alias and no unqualified-search registries are defined in "/etc/containers/registries.conf"
kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
nginx 0/1 ImagePullBackOff 0 19h 10.244.0.3 minikube <none> <none>
YAML Pod

apiVersion: v1
kind: Pod
metadata:
name: myapp-pod
labels:
app: myapp
type: front-end
spec:
containers:
- name: nginx-container
image: docker.io/library/nginx:latest
kubectl create -f pod-definition.yaml
kubectl apply -f pod-definition.yaml
kubectl delete pod -l app=nginx
kubectl port-forward pod/myapp-pod 8080:80
-> 8080 is my laptop port, and 80 is port inside the pod
kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
myapp-pod 1/1 Running 1 (3m30s ago) 12m 10.244.0.5 minikube <none> <none>
minikube ssh
docker@minikube:~$ curl http://10.244.0.5:80
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
html { color-scheme: light dark; }
body { width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif; }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>
<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>
<p><em>Thank you for using nginx.</em></p>
</body>
</html>
docker@minikube:~$ curl http://10.244.0.5:8080
curl: (7) Failed to connect to 10.244.0.5 port 8080 after 0 ms: Connection refused
docker@minikube:~$ curl http://10.244.0.5:80
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
html { color-scheme: light dark; }
body { width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif; }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>
<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>
<p><em>Thank you for using nginx.</em></p>
</body>
</html>
docker@minikube:~$ exit
logout
Replica Sets
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: myapp-rc
labels:
app: myapp
type: front-end
spec:
template:
metadata:
name: myapp-pod
labels:
app: myapp
type: front-end
spec:
containers:
- name: nginx-container
image: docker.io/library/nginx:latest
replicas: 3
selector:
matchLabels:
type: front-end
kubectl create -f replicationset-definition.yaml
kubectl edit replicaset myapp-rc
kubectl scale replicaset myapp-rc --replicas=2
kubectl get rs myapp-rc -o yaml
apiVersion: apps/v1
kind: ReplicaSet
metadata:
creationTimestamp: "2025-09-18T06:22:01Z"
generation: 3
labels:
app: myapp
type: front-end
name: myapp-rc
namespace: default
resourceVersion: "24845"
uid: 4327a128-5e34-4718-b1e3-50bfefffbe7c
spec:
replicas: 2
selector:
matchLabels:
type: front-end
template:
metadata:
labels:
app: myapp
type: front-end
name: myapp-pod
spec:
containers:
- image: docker.io/library/nginx:latest
imagePullPolicy: Always
name: nginx-container
resources: {}
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: File
dnsPolicy: ClusterFirst
restartPolicy: Always
schedulerName: default-scheduler
securityContext: {}
terminationGracePeriodSeconds: 30
status:
availableReplicas: 2
fullyLabeledReplicas: 2
observedGeneration: 3
readyReplicas: 2
replicas: 2
Deployments
Created same way as replicaset
apiVersion: apps/v1
kind: Deployment
metadata:
name: myapp-rc
labels:
app: myapp
type: front-end
spec:
template:
metadata:
name: myapp-pod
labels:
app: myapp
type: front-end
spec:
containers:
- name: nginx-container
image: docker.io/library/nginx:latest
replicas: 3
selector:
matchLabels:
type: front-end
kubectl create deployment httpd-frontend --image=docker.io/library/httpd:2.4-alpine --replicas=3
kubectl get all
NAME READY STATUS RESTARTS AGE
pod/httpd-frontend-6fd8484fb8-4pxrh 1/1 Running 0 17s
pod/httpd-frontend-6fd8484fb8-mxp7p 1/1 Running 0 17s
pod/httpd-frontend-6fd8484fb8-snbjc 1/1 Running 0 17s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 22h
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/httpd-frontend 3/3 3 3 48s
NAME DESIRED CURRENT READY AGE
replicaset.apps/httpd-frontend-6fd8484fb8 3 3 3 17s

kubectl create -f deployment.yaml
deployment.apps/myapp-rc created
kubectl rollout status deployment/myapp-rc
Waiting for deployment "myapp-rc" rollout to finish: 3 of 10 updated replicas are available...
Waiting for deployment "myapp-rc" rollout to finish: 4 of 10 updated replicas are available...
Waiting for deployment "myapp-rc" rollout to finish: 5 of 10 updated replicas are available...
Waiting for deployment "myapp-rc" rollout to finish: 6 of 10 updated replicas are available...
Waiting for deployment "myapp-rc" rollout to finish: 7 of 10 updated replicas are available...
Waiting for deployment "myapp-rc" rollout to finish: 8 of 10 updated replicas are available...
Waiting for deployment "myapp-rc" rollout to finish: 9 of 10 updated replicas are available...
deployment "myapp-rc" successfully rolled out