How can I keep a pod/container running on Kubernetes?

In this article, We will learn to keep a pod/container running for as long as we need
As a general rule container will perform the task assigned to them and exit on completion (either success or failure). To keep it running, we can use the “sleep” command to run for some specific time or open a shell session till the session complete
In Kubernetes, Containers are running inside a pod, So whenever the container exited on completion and its corresponding pod will be exited and we will discuss various other ways to achieve
How do I keep my container always running in Docker?
In the below docker command, Container will be created and exited as we did not specify any work or task
docker run -itd debian
Modified docker command, Now, the Container will be created and wait for 300 seconds before exiting
docker run -d debian sleep 300
So, Keeping a container live forever is not recommended and is an intended approach, But ideally, To troubleshoot an issue, we will keep the container running for sometime
How do I keep my container always running in Kubernetes?
In Kubernetes, We can keep the pod alive in 4 different ways
Create a shell session inside the container
Creating a shell session inside a container will keep the container alive till we close the session
Example
kubectl run -it --rm test_pod --image=busybox --restart=Never -- sh
Sleep Command
We can use the sleep command to keep the container awake for some seconds before it exits,
Example pod definition below
apiVersion: v1
kind: Pod
metadata:
name: busybox
labels:
app: busybox
spec:
containers:
- name: busybox
image: busybox
command: ["/bin/sh", "sleep 1000"]
Infinite Loop
Infinite loop is basically a hack to keep your container alive forever, until it gets killed, Which is not recommended 🙂
apiVersion: v1
kind: Pod
metadata:
name: busybox
labels:
app: busybox
spec:
containers:
- name: busybox
image: busybox
command: ["/bin/sh", "while :; do echo '.'; sleep 5 ; done"]
Create Your Own docker Image and use it to create a container in a pod
You can create your own docker image and provide commands like sleep or loop in the ENTRYPOINT, So that, Once the container is created it will start executing the entry point command and will be alive for the specified time.
Example:
FROM alpine
ENTRYPOINT ["sleep"]
CMD ["1000"]
The above example will run a sleep 1000 on starting of the container
How to monitor a pod that’s always running?
A liveness probe is a mechanism used in Kuberbeos to determine the container’s current status, it returns a success or failure status, indicating whether the container is still alive or not, and can perform some action based on the status or we can use a “kubectl” command to check the status manually
Liveness probe to monitor contianer
Example YAML file to create a liveness probe
apiVersion: apps/v1
kind: Deployment
metadata:
name: Web-App
spec:
replicas: 3
selector:
matchLabels:
app: Web-App
template:
metadata:
labels:
app: Web-App
spec:
containers:
- name: Web-App-container
image: Web-App-image
ports:
- containerPort: 80
livenessProbe:
httpGet:
path: /health
port: 80
initialDelaySeconds: 30
periodSeconds: 10
In the above example, When a container goes down, the liveness probe will continuously fail to determine the health of the container. As a result, Kubernetes will take restart the container
Kubectl command to monitor container
We can run the below command to see if the container is in a running state or not
kubectl get pod my-pod
Conclusion
In Summary, We have discussed the various method to keep a pod/container running instead of it getting exited on success or failure, Based on your use case you can choose a way to keep the container active
Click here to know more about Create Your Own Docker Image
Click here to know more about running commands inside a container
Personal experience and tips to pass CKA & CKAD exams
Good Luck with your leaning !!