In this article we will look at pod concept in Kubernetes

What is pod in kubernetes?
The pod is the smallest execution unit in Kubernetes. It’s a single container or group of containers that serve a running process in the K8s cluster. Read what is container? if you are not familiar with containerization.
Each pod has a single IP address that is shared by all the containers within. Also, the port space is shared by all the containers inside.
You can view running pods in K8s by using below command –
$ kubectl get pods NAME READY STATUS RESTARTS AGE webserver 1/1 Running 0 10s
View pod details in K8s
To get more detailed information on each pod, you can run below command by supplying its pod name as argument –
$ kubectl describe pods webserver Name: webserver Namespace: default Priority: 0 Node: node01/172.17.0.9 Start Time: Sun, 05 Jul 2020 13:50:41 +0000 Labels: <none> Annotations: <none> Status: Running IP: 10.244.1.3 IPs: IP: 10.244.1.3 Containers: webserver: Container ID: docker://8b260effa4ada1ff80e106fb12cf6e2da90eb955321bbe3b9e302fdd33b6c0d8 Image: nginx Image ID: docker-pullable://nginx@sha256:21f32f6c08406306d822a0e6e8b7dc81f53f336570e852e25fbe1e3e3d0d0133 Port: 80/TCP Host Port: 0/TCP State: Running Started: Sun, 05 Jul 2020 13:50:50 +0000 Ready: True Restart Count: 0 Environment: <none> Mounts: /var/run/secrets/kubernetes.io/serviceaccount from default-token-bjcwg (ro) Conditions: Type Status Initialized True Ready True ContainersReady True PodScheduled True Volumes: default-token-bjcwg: Type: Secret (a volume populated by a Secret) SecretName: default-token-bjcwg Optional: false QoS Class: BestEffort Node-Selectors: <none> Tolerations: node.kubernetes.io/not-ready:NoExecute for 300s node.kubernetes.io/unreachable:NoExecute for 300s Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal Scheduled 25s default-scheduler Successfully assigned default/webserver to node01 Normal Pulling 23s kubelet, node01 Pulling image "nginx" Normal Pulled 17s kubelet, node01 Successfully pulled image "nginx" Normal Created 16s kubelet, node01 Created container webserver Normal Started 16s kubelet, node01 Started container webserver
pod configuration file
One can create a pod configuration file i.e. yml file which has all the details to start a pod. K8s can read this file and spin up your pod according to specifications. Sample file below –
$ cat my_webserver.yml echo "apiVersion: v1 kind: Pod metadata: name: webserver spec: containers: - name: webserver image: nginx ports: - containerPort: 80" >my_webserver.yml
Its a single container pod file since we specified specs for only one kind of container in it.
Single container pod
Single container pod can be run without using a yml file. Like using simple command –
$ kubectl run single-c-pod --image=nginx pod/single-c-pod created $ kubectl get pods NAME READY STATUS RESTARTS AGE single-c-pod 1/1 Running 0 35s webserver 1/1 Running 0 2m52s
You can spin the single container pod using simple yml file stated above.
Multiple container pod
For multiple container pods, let’s edit the above yml file to add another container specs as well.
$ cat << EOF >web-bash.yml apiVersion: v1 kind: Pod metadata: name: web-bash spec: containers: - name: apache image: httpd ports: - containerPort: 80 - name: linux image: ubuntu ports: command: ["/bin/bash", "-ec", "while true; do echo '.'; sleep 1 ; done"] EOF
In the above file, we are spinning up a pod that has 1 webserver container and another is Ubuntu Linux container.
$ kubectl create -f web-bash.yml pod/web-bash created $ kubectl get pods NAME READY STATUS RESTARTS AGE web-bash 2/2 Running 0 12s
How to delete pod
Its a simple delete pod command
$ kubectl delete pods web-bash pod "web-bash" deleted
How to view pod logs in Kubernetes
I am running a single container pod of Nginx. We will then check pod logs to confirm this messages.
$ kubectl run single-c-pod --image=nginx pod/single-c-pod created $ kubectl logs single-c-pod /docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration /docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/ /docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh 10-listen-on-ipv6-by-default.sh: Getting the checksum of /etc/nginx/conf.d/default.conf 10-listen-on-ipv6-by-default.sh: Enabled listen on IPv6 in /etc/nginx/conf.d/default.conf /docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh /docker-entrypoint.sh: Configuration complete; ready for start up
Share Your Comments & Feedback: