Sling Academy
Home/DevOps/How to Create and Manage Pods in Kubernetes

How to Create and Manage Pods in Kubernetes

Last updated: January 31, 2024

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.

Next Article: Kubernetes: Configuring Health Checks in Pods (Examples & Best Practices)

Previous Article: Understanding Pod Lifecycle and States in Kubernetes

Series: Kubernetes Tutorials

DevOps

You May Also Like

  • How to reset Ubuntu to factory settings (4 approaches)
  • Making GET requests with cURL: A practical guide (with examples)
  • Git: What is .DS_Store and should you ignore it?
  • NGINX underscores_in_headers: Explained with examples
  • How to use Jenkins CI with private GitHub repositories
  • Terraform: Understanding State and State Files (with Examples)
  • SHA1, SHA256, and SHA512 in Terraform: A Practical Guide
  • CSRF Protection in Jenkins: An In-depth Guide (with examples)
  • Terraform: How to Merge 2 Maps
  • Terraform: How to extract filename/extension from a path
  • JSON encoding/decoding in Terraform: Explained with examples
  • Sorting Lists in Terraform: A Practical Guide
  • Terraform: How to trigger a Lambda function on resource creation
  • How to use Terraform templates
  • Understanding terraform_remote_state data source: Explained with examples
  • Jenkins Authorization: A Practical Guide (with examples)
  • Solving Jenkins Pipeline NotSerializableException: groovy.json.internal.LazyMap
  • Understanding Artifacts in Jenkins: A Practical Guide (with examples)
  • Using Jenkins with AWS EC2 and S3: A Practical Guide