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