How to use Kubernetes Sidecar Container

kubernetes
Reading Time: 3 minutes

Introduction:

Kubernetes Sidecar Containers are those containers that run parallel with the main container in the pod. Also, this sidecar container increases the functionality and provides the dependencies of the container without changing it.

Why use a Kubernetes sidecar container :

Although you have a pod with a single container working properly. You want to attach some functionality to the current container without changing it. But, how can you add the functionality to the current container? the sidecar container has filled in this type of situation.

Sidecar Container YML File:

Create two containers in a pod, one sidecar container and the main container. Therefore, here is my YML file to create a pod-

apiVersion: v1
kind: pod
metadata:
  name: sidecar
spec:
  volumes:
  - name: log
    emptyDir: {}

  containers:
  - image: busybox
    name: main-container
    args:
     - /bin/sh
     - -c
     - >
      while true: do
        echo "$(date) INFO hello from main-container" >> /var/log/myapp.log ;
        sleep 1;
      done
    volumeMounts:
    - name: log
      mountPath: /var/log

  - name: sidecar-container
    image: busybox
    args:
     - /bin/sh
     - -c
     - tail -fn+1 /var/log/myapp.log
    volumeMounts:
    - name: log
      mountPath: /var/log
Now Understand this YML file :
  • For easily understanding I have denoted my containers as main-container & sidecar-container.
  • main container in which our application (Nginx) is presented.
  • the shared path is mounted in both containers through the volume mounts.
Now create this pod:

Create the pod for the sidecar container.

kubectl apply -f sidecar.yml
Now check the status of the pod:

checks the pod status and shows that there are two containers and both are in a running state.

kubectl get pods
List the containers from the pod:

This command shows pod contain that have containers in it. Consequently, Now we have two containers in this sidecar pod – the first is the main container and the second is the sidecar container.

kubectl get pods sidecar -o jsonpath=' {.spec.containers[*].name}'
Check the sidecar container logs:

This command checks the communication between the main and sidecar container. Thus, the output of the sidecar container should show the logs coming from the main container.

kubectl logs -f sidecar -c sidecar-container
Check the IPs of the sidecar pod:

All the containers inside the pod share the same network namespace. Hence, this command checks the IP of the sidecar pod.

kubectl get pod sidecar -o wide
Check the IP for both containers:

our sidecar pod IP is 172.17.0.5. let’s check for both containers have the same IP or not.

kubectl exec -it sidecar -c sidecar-container --ifconfig eth0

Reference:

https://blog.knoldus.com/

https://www.magalix.com/blog/the-sidecar-pattern

knoldus