How to Create and Manage Pods in Kubernetes

Updated: January 31, 2024 By: Guest Contributor Post a comment

Overview

Kubernetes is a powerful container orchestration system that automates the deployment, scaling, and operations of application containers across clusters of hosts. At the heart of Kubernetes is the pod, which is the smallest deployable unit and can contain one or more containers. Learning how to create and manage pods is fundamental to working with Kubernetes.

Prerequisites

  • Basic knowledge of containerization and Docker
  • A Kubernetes cluster setup (Minikube for local testing)
  • kubectl command-line tool installed and configured

Creating a Kubernetes Pod

To create a pod, you can write a YAML or JSON configuration file that describes the pod. Here is a basic example of a YAML file to create a pod with a single container:

apiVersion: v1
kind: Pod
metadata:
  name: my-pod
spec:
  containers:
  - name: my-container
    image: nginx

To create the pod using this YAML file (let’s name it my-pod.yaml), you would use the following kubectl command:

kubectl create -f my-pod.yaml

Once the pod is created, you can get its status with:

kubectl get pods

Understanding Pods and Containers

In Kubernetes, a pod can contain one or more containers. When you have multiple containers inside a pod, they share the same network space, and they can communicate with each other via localhost. However, Pods are ephemeral. If they fail or are deleted, Kubernetes can automatically create new ones to replace them. This feature is great for resilience but means that any data inside the pod can be lost. It’s crucial to use persistent storage for any data you want to persist.

Pods with Multiple Containers

Here’s an example of a pod configuration with multiple containers:

apiVersion: v1
kind: Pod
metadata:
  name: multi-container-pod
spec:
  containers:
  - name: front-end
    image: nginx
  - name: back-end
    image: nodejs

To create this pod, use:

kubectl create -f multi-container-pod.yaml

Managing Pods

You can check the status, logs, and details of the pods with the following commands:

  • kubectl get pods – Retrieves the list of pods
  • kubectl describe pod <podname> – Shows detailed information about a pod
  • kubectl logs <podname> – Displays logs of the pod

Additionally, you can execute commands inside a container within a pod:

kubectl exec <podname> -- <command>

Updating Pods

Once a pod is created, you can’t change its specification. To update a Pod, you must delete it and create a new one. However, you can use a Deployment, which manages the lifecycle of pods and can update them with a new pod template file:

apiVersion: apps/v1
do|nd: Deployment
metadata:
  name: my-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      app: myapp
  template:
    metadata:
      labels:
        app: myapp
    spec:
      containers:
      - name: myapp-container
        image: nginx

To apply the deployment and create pods:

kubectl apply -f deployment.yaml

To update the image used in the container, change the image in the pod template and re-apply the deployment:

kubectl apply -f deployment.yaml

Cleaning Up

To delete a Pod, use:

kubectl delete pod <podname>

For deployments:

kubectl delete deployment <deploymentname>

Remember that when you delete a deployment, it also deletes all the pods associated with it.

Best Practices

  • Keep each container as a single running process.
  • Group containers in the same pod only if they need to share resources closely.
  • Use Deployments instead of creating and managing pods directly.
  • Adopt a naming convention for pods and deployments to ease management.

Conclusion

In this tutorial, you’ve learned how to create, manage, and understand the lifecycle of a Kubernetes pod. These concepts are vital as they are the foundational elements upon which all higher-level abstractions in Kubernetes function. With this knowledge, you’re ready to delve deeper into the Kubernetes ecosystem and start deploying more complex applications.