Kubernetes Sidecar Pattern Explained with Real Examples (Multi-Container Pod YAML)

Learn how Kubernetes sidecar containers work with practical multi-container Pod examples. Understand shared volumes, shared network namespaces, logging sidecars, YAML configuration, and common real-world sidecar use cases in Kubernetes.

Published

Updated

Read time 16 min read

Reviewed byDeepak Prasad

Kubernetes Sidecar Pattern Explained with Real Examples (Multi-Container Pod YAML)

What is Kubernetes Sidecar Pattern

The Kubernetes sidecar pattern is a deployment design where one or more helper containers run alongside the primary application container inside the same Pod. These helper containers provide supporting functionality without modifying the main application itself.

Sidecar containers are commonly used for:

  • Log forwarding
  • Monitoring and metrics collection
  • Reverse proxying
  • Service mesh integration
  • Authentication handling
  • Configuration synchronization

The main application focuses only on business logic, while operational responsibilities are delegated to sidecar containers. This separation improves maintainability, scalability, and simplifies application deployment in cloud-native environments.

How Sidecar Containers Work Inside a Pod

A sidecar container starts and runs together with the main application container as part of the same Kubernetes Pod. Since both containers belong to the same Pod, they can work closely together while still remaining logically independent.

For example:

  • Main container runs the application
  • Sidecar container collects logs or proxies traffic
  • Both containers operate together throughout the Pod lifecycle

This pattern is widely used in Kubernetes because it allows reusable helper functionality to be attached to applications without changing the application image itself.

Why Kubernetes Uses Multi-Container Pods

Kubernetes uses multi-container Pods when multiple processes must cooperate closely and share the same execution environment. Running related containers inside the same Pod provides efficient communication, shared lifecycle management, and simplified resource sharing.

This architecture is especially useful when helper services such as logging agents, proxies, metrics exporters, or configuration watchers must operate together with the main application container.


Kubernetes Sidecar Architecture

A Kubernetes sidecar architecture consists of one main application container and one or more helper containers running together inside the same Pod. All containers inside the Pod share the same lifecycle, network namespace, and optionally shared storage volumes, making sidecar communication fast and lightweight.

This architecture is commonly used for:

  • Centralized logging
  • Reverse proxies
  • Monitoring agents
  • Service mesh proxies
  • Configuration synchronization
  • Authentication sidecars

The following diagram shows a typical Kubernetes sidecar architecture:

kubernetes sidecar architecture explained

Shared Network Namespace Between Containers

All containers inside the same Kubernetes Pod share a common network namespace. This means every container in the Pod:

  • Uses the same Pod IP address
  • Shares the same network interfaces
  • Can communicate internally using localhost
  • Can access other containers using their exposed ports

For example:

  • Main container runs application on port 8080
  • Sidecar container connects using localhost:8080

This eliminates the need for separate Kubernetes Services or external networking between containers inside the same Pod.

Example:

yaml
containers:
- name: main-app
  image: nginx
  ports:
  - containerPort: 8080

- name: sidecar-proxy
  image: busybox
  command:
  - /bin/sh
  - -c
  - wget -qO- http://localhost:8080

You can verify that both containers share the same Pod IP:

bash
kubectl exec -it sidecar-demo -c main-app -- ip addr

kubectl exec -it sidecar-demo -c sidecar-proxy -- ip addr

Both containers will display the same Pod IP address.

Sharing Volumes Across Main and Sidecar Containers

Although containers have isolated filesystems, Kubernetes volumes can be mounted into multiple containers simultaneously. This allows the main application and sidecar container to exchange files, logs, configuration data, or generated content.

One of the most common examples is log sharing:

  • Main container writes logs to /var/log/app.log
  • Sidecar container continuously reads and forwards logs

Example shared volume configuration:

yaml
volumes:
- name: shared-logs
  emptyDir: {}

containers:
- name: main-app
  image: busybox
  volumeMounts:
  - name: shared-logs
    mountPath: /var/log

- name: log-sidecar
  image: busybox
  volumeMounts:
  - name: shared-logs
    mountPath: /var/log

The following diagram shows shared volume communication:

text
Main Container                    Sidecar Container
-----------------                 ------------------
Writes app.log                    Reads app.log
       |                                  ^
       |                                  |
       +---------- Shared Volume ---------+
                  /var/log

This shared volume mechanism is widely used for:

  • Log processing
  • Config synchronization
  • File transformation
  • Shared cache storage
  • Temporary data exchange

Communication Using localhost

Since all containers inside the Pod share the same Kubernetes networking namespace, sidecar containers can directly communicate with the main application using localhost.

This is commonly used in:

  • Istio Envoy sidecars
  • Authentication proxies
  • Reverse proxy containers
  • Metrics exporters
  • API gateways

Example communication flow:

text
User Request
      |
      v
+---------------------+
| Sidecar Proxy       |
| localhost:8080 ---> |
+---------------------+
            |
            v
+---------------------+
| Main Application    |
| Port 8080           |
+---------------------+

Example YAML where sidecar accesses the main application locally:

yaml
containers:
- name: app
  image: nginx
  ports:
  - containerPort: 8080

- name: monitoring-sidecar
  image: curlimages/curl
  command:
  - /bin/sh
  - -c
  - while true; do curl http://localhost:8080; sleep 10; done

This local communication is lightweight, secure, and avoids unnecessary external traffic routing inside the cluster.


Scenario-1: Log Processing Sidecar Container

One of the most common real-world Kubernetes sidecar use cases is centralized log processing. In many production environments, the main application writes logs locally while a sidecar container continuously reads those logs and forwards them to an external logging platform such as Elasticsearch, Fluentd, Loki, or Splunk.

This approach keeps the application container lightweight because the application only focuses on generating logs, while the sidecar container handles log collection and forwarding independently.

The following diagram shows the logging sidecar workflow:

Log Processing Sidecar Container

Main Application Writing Logs to Shared Volume

In this example:

  • The main container continuously writes logs to /var/log/app.log
  • Both containers mount the same shared Kubernetes volume
  • The sidecar container reads the same log file in real time

Create the following YAML file:

yaml
apiVersion: v1
kind: Pod
metadata:
  name: logging-sidecar-demo

spec:
  volumes:
  - name: shared-logs
    emptyDir: {}

  containers:
  - name: main-application
    image: busybox
    command:
    - /bin/sh
    - -c
    - |
      while true; do
        echo "$(date) INFO Application is running" >> /var/log/app.log
        sleep 5
      done

    volumeMounts:
    - name: shared-logs
      mountPath: /var/log

  - name: logging-sidecar
    image: busybox
    command:
    - /bin/sh
    - -c
    - tail -F /var/log/app.log

    volumeMounts:
    - name: shared-logs
      mountPath: /var/log

Apply the Pod:

bash
kubectl apply -f logging-sidecar.yaml

Verify Pod status:

bash
kubectl get pods

Example output:

bash
NAME                   READY   STATUS    RESTARTS   AGE
logging-sidecar-demo   2/2     Running   0          20s

Streaming Logs Using Sidecar Container

The sidecar container continuously monitors the shared log file using:

bash
tail -F /var/log/app.log

Since both containers share the same volume, the sidecar instantly sees any new log entries generated by the main application container.

This pattern is commonly used in production for:

  • Fluent Bit log forwarding
  • Filebeat sidecars
  • Loki log shipping
  • Splunk agents
  • Security auditing
  • Real-time monitoring pipelines

The following command shows the logs generated by the sidecar container:

bash
kubectl logs -f logging-sidecar-demo -c logging-sidecar

Verify Logs from Sidecar Container

Example output:

bash
Fri May 16 12:00:01 UTC 2026 INFO Application is running
Fri May 16 12:00:06 UTC 2026 INFO Application is running
Fri May 16 12:00:11 UTC 2026 INFO Application is running
Fri May 16 12:00:16 UTC 2026 INFO Application is running

You can also verify that the main application container is writing logs correctly:

bash
kubectl exec -it logging-sidecar-demo -c main-application -- cat /var/log/app.log

Since the sidecar reads logs directly from the shared volume, there is no need for additional network communication between containers. This makes the sidecar logging pattern lightweight, efficient, and easy to scale in Kubernetes environments.


Scenario-2: NGINX Reverse Proxy Sidecar

Another common Kubernetes sidecar pattern is using a reverse proxy container alongside the main application container. In this setup, the sidecar container acts as an intermediary between external traffic and the main application running inside the same Pod.

This approach is commonly used for:

  • SSL/TLS termination
  • Request routing
  • Authentication proxies
  • Traffic filtering
  • Rate limiting
  • Header injection
  • Service mesh integrations

Since all containers inside the Pod share the same network namespace, the NGINX sidecar can communicate with the application using localhost.

The following diagram shows how the NGINX sidecar forwards requests internally to the main application container:

NGINX Reverse Proxy Sidecar

Route Traffic to Main Application Container

In this example:

  • The main container runs a simple Python web server on port 8080
  • The NGINX sidecar listens on port 80
  • NGINX forwards all incoming requests to localhost:8080

Create the following Pod YAML:

yaml
apiVersion: v1
kind: Pod
metadata:
  name: nginx-sidecar-demo

spec:
  containers:
  - name: main-application
    image: python:3.12-alpine
    command:
    - /bin/sh
    - -c
    - |
      mkdir -p /app
      echo "Hello from main application container" > /app/index.html
      cd /app
      python3 -m http.server 8080

    ports:
    - containerPort: 8080

  - name: nginx-sidecar
    image: nginx:stable-alpine

    ports:
    - containerPort: 80

    volumeMounts:
    - name: nginx-config
      mountPath: /etc/nginx/conf.d

  volumes:
  - name: nginx-config
    configMap:
      name: nginx-sidecar-config

Create the NGINX configuration ConfigMap:

yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: nginx-sidecar-config

data:
  default.conf: |
    server {
        listen 80;

        location / {
            proxy_pass http://localhost:8080;
        }
    }

Apply both resources:

bash
kubectl apply -f nginx-configmap.yaml

kubectl apply -f nginx-sidecar-pod.yaml

Expose Shared Pod Network Ports

Since both containers share the same Pod network namespace:

  • NGINX can access the application using localhost:8080
  • No Kubernetes Service is required internally
  • Both containers share the same Pod IP address

Verify the Pod status:

bash
kubectl get pods

Example output:

bash
NAME                  READY   STATUS    RESTARTS   AGE
nginx-sidecar-demo    2/2     Running   0          45s

You can verify shared networking by checking the listening ports:

bash
kubectl exec -it nginx-sidecar-demo -c nginx-sidecar -- netstat -tulnp

Example output:

bash
tcp        0      0 0.0.0.0:80      0.0.0.0:*     LISTEN

Similarly, verify the application container:

bash
kubectl exec -it nginx-sidecar-demo -c main-application -- netstat -tulnp

Example output:

bash
tcp        0      0 0.0.0.0:8080    0.0.0.0:*     LISTEN

Verify Reverse Proxy Communication

Now verify that the NGINX sidecar successfully proxies traffic to the main application container.

Forward port 80 from the Pod:

bash
kubectl port-forward pod/nginx-sidecar-demo 8080:80

In another terminal:

bash
curl http://localhost:8080

Example output:

text
Hello from main application container

This confirms that:

  • External traffic reached the NGINX sidecar
  • NGINX forwarded requests internally using localhost
  • The main application container served the response successfully

This reverse proxy sidecar pattern is widely used in Kubernetes environments for API gateways, Kubernetes authentication and authorization proxies, ingress controllers, and service mesh architectures such as Istio and Envoy-based Kubernetes service mesh architectures.


Scenario-3: Config Reload Sidecar Pattern

In many Kubernetes environments, applications need to reload configuration changes dynamically without restarting the entire Pod. A common solution is to use a sidecar container that continuously watches configuration files or ConfigMap updates and triggers reload actions whenever changes are detected.

This pattern is widely used for:

  • NGINX configuration reloads
  • HAProxy dynamic updates
  • TLS certificate rotation
  • Feature flag updates
  • Runtime application configuration refresh
  • Service mesh policy updates

Instead of embedding file watchers directly into the application image, Kubernetes sidecars allow configuration management to remain independent and reusable.

The following diagram shows how a configuration reload sidecar works:

Config Reload Sidecar Pattern

Automatically Reload Application Configurations

In this example:

  • A ConfigMap stores the NGINX configuration
  • Both containers mount the same configuration directory
  • The sidecar continuously watches for configuration changes
  • When changes are detected, the sidecar triggers an NGINX reload

Create the ConfigMap:

yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: nginx-config

data:
  default.conf: |
    server {
        listen 80;

        location / {
            return 200 'Configuration Reload Demo';
        }
    }

Create the Pod YAML:

yaml
apiVersion: v1
kind: Pod
metadata:
  name: config-reload-sidecar

spec:
  volumes:
  - name: nginx-config-volume
    configMap:
      name: nginx-config

  containers:
  - name: nginx-main
    image: nginx:stable-alpine

    ports:
    - containerPort: 80

    volumeMounts:
    - name: nginx-config-volume
      mountPath: /etc/nginx/conf.d

  - name: config-reloader
    image: busybox

    command:
    - /bin/sh
    - -c
    - |
      echo "Watching for configuration changes..."

      while true; do
        inotifyd /tmp/reload /etc/nginx/conf.d
        echo "Configuration change detected"
        nginx -s reload
        sleep 5
      done

    volumeMounts:
    - name: nginx-config-volume
      mountPath: /etc/nginx/conf.d

Apply the resources:

bash
kubectl apply -f nginx-configmap.yaml

kubectl apply -f config-reload-pod.yaml

Verify Pod status:

bash
kubectl get pods

Example output:

bash
NAME                    READY   STATUS    RESTARTS   AGE
config-reload-sidecar   2/2     Running   0          35s

Watch ConfigMap Changes Using Sidecar

The sidecar container continuously monitors the mounted ConfigMap directory for updates. Whenever Kubernetes updates the mounted configuration files, the sidecar detects the file change and triggers a reload operation.

This pattern is commonly used with tools such as:

  • configmap-reload
  • reloader
  • inotifywait
  • consul-template
  • confd

You can update the ConfigMap dynamically:

bash
kubectl edit configmap nginx-config

Modify the response text:

nginx
return 200 'Updated Configuration Loaded';

Kubernetes automatically updates the mounted files inside the Pod. The sidecar detects the change and reloads the NGINX configuration without restarting the Pod.

Verify the updated configuration:

bash
kubectl port-forward pod/config-reload-sidecar 8080:80

In another terminal:

bash
curl http://localhost:8080

Example output:

text
Updated Configuration Loaded

This demonstrates how Kubernetes sidecar containers can dynamically reload configurations at runtime while keeping the main application container lightweight and operational.


Sidecar vs Init Container in Kubernetes

Both sidecar containers and Kubernetes init containers are commonly used in Kubernetes Pods, but they solve different problems. A sidecar container runs continuously alongside the main application container, while an init container runs only during Pod startup and exits before the application starts.

Understanding the difference is important when designing production-grade Kubernetes workloads because choosing the wrong container type can lead to unnecessary complexity, startup delays, or resource overhead.

The following diagram compares the lifecycle of sidecar and init containers:

pod startup sequence sidecar vs init container

When to Use Sidecar Container

A sidecar container is the right choice when supporting functionality must continue running together with the main application container throughout the Pod lifecycle.

Sidecars are ideal for long-running helper services that continuously interact with the application.

Common sidecar use cases include:

Use Case Example
Log Forwarding Fluent Bit / Filebeat
Reverse Proxy NGINX / Envoy
Service Mesh Istio Sidecar
Monitoring Prometheus Exporter
Config Reload ConfigMap Watcher
Authentication Proxy OAuth / mTLS Proxy

Example sidecar behavior:

text
Main Application Running
          |
          +---- Sidecar continuously:
                    - Collects logs
                    - Proxies traffic
                    - Watches configuration
                    - Exports metrics

Example sidecar YAML:

yaml
containers:
- name: main-app
  image: nginx

- name: logging-sidecar
  image: fluent/fluent-bit

Use sidecar containers when:

  • The helper service must run continuously
  • The application requires runtime support
  • Containers must communicate during execution
  • Shared volumes or localhost communication are needed
  • Traffic interception or monitoring is required

When Init Container is Better

An init container is better when a task only needs to run once before the main application starts.

Init containers are designed for startup preparation tasks such as:

  • Waiting for dependencies
  • Downloading configuration files
  • Running database migrations
  • Initializing storage
  • Verifying network availability
  • Generating certificates

Unlike sidecars, init containers do not continue running after completion.

The following diagram shows init container execution:

text
+-----------------------+
| Init Container        |
|-----------------------|
| Setup / Preparation   |
| Validation            |
| Dependency Checks     |
+-----------------------+
            |
            v
      Exits Successfully
            |
            v
+-----------------------+
| Main Application      |
|-----------------------|
| Starts Only After     |
| Init Completion       |
+-----------------------+

Example init container YAML:

yaml
initContainers:
- name: wait-for-database
  image: busybox
  command:
  - /bin/sh
  - -c
  - |
    until nc -z mysql-service 3306; do
      echo "Waiting for database..."
      sleep 5
    done

containers:
- name: main-app
  image: nginx

Use init containers when:

  • Tasks should run only once
  • Startup dependencies must be validated
  • Configuration must be prepared before startup
  • Application should not start until prerequisites are ready
  • Initialization logic should remain separate from the application image

The following table summarizes the difference between sidecar and init containers:

Feature Sidecar Container Init Container
Runs Continuously Yes No
Starts Before App Usually Together Yes
Stops Before App Starts No Yes
Shares Pod Network Yes Yes
Runtime Communication Yes No
Common Purpose Logging / Proxy / Monitoring Initialization / Setup
Lifecycle Entire Pod Lifecycle Startup Only

In production Kubernetes deployments, it is common to use both init containers and sidecar containers together inside the same Pod for different responsibilities.


Best Practices for Kubernetes Sidecar Containers

Sidecar containers are powerful for extending application functionality in Kubernetes, but poorly designed sidecars can introduce operational complexity, resource overhead, startup delays, and difficult debugging scenarios.

To build production-ready Kubernetes workloads, it is important to follow sidecar design best practices for scalability, maintainability, observability, and reliability.

The following diagram shows recommended production architecture for Kubernetes sidecars:

text
+-------------------------------------------------------------+
|                     Kubernetes Pod                          |
|                                                             |
|  +--------------------+   +-----------------------------+   |
|  | Main Application   |   | Sidecar Container           |   |
|  |--------------------|   |-----------------------------|   |
|  | Business Logic     |   | Logging / Proxy / Metrics   |   |
|  | Independent App    |   | Helper Functionality        |   |
|  +--------------------+   +-----------------------------+   |
|              |                         |                    |
|              +------------+------------+                    |
|                           |                                 |
|                   Shared Volumes                            |
|                                                             |
|     Resource Limits + Health Checks + Graceful Shutdown     |
+-------------------------------------------------------------+

Avoid Tight Coupling Between Containers

A sidecar container should support the main application without becoming tightly dependent on its internal implementation. Over-coupling makes upgrades, debugging, scaling, and maintenance more difficult.

Bad design example:

  • Sidecar requires application source code changes
  • Sidecar crashes when application log format changes
  • Sidecar depends on application-specific runtime internals

Good design principles:

  • Use shared volumes or localhost APIs
  • Keep communication interfaces simple
  • Avoid modifying application images
  • Ensure containers can fail independently when possible

Recommended approach:

text
Main Application
      |
      +---- Writes logs / exposes API
                     |
                     v
             Sidecar Consumes Data

Instead of:

text
Main Application
      |
      +---- Hard dependency on sidecar runtime internals

Loose coupling improves:

  • portability
  • container reuse
  • easier upgrades
  • operational stability

Resource Limits and Requests

Sidecar containers consume CPU and memory just like the main application. In production clusters, missing resource limits can lead to noisy-neighbor problems, Pod eviction, or application instability.

Always define Kubernetes resources requests and limits for sidecars.

Example:

yaml
containers:
- name: logging-sidecar
  image: fluent/fluent-bit

  resources:
    requests:
      cpu: "100m"
      memory: "128Mi"

    limits:
      cpu: "500m"
      memory: "256Mi"

Recommended practices:

Recommendation Reason
Define CPU requests Prevent scheduling starvation
Define memory limits Avoid OOMKilled containers
Monitor sidecar usage Detect excessive overhead
Avoid oversized sidecars Reduce Pod resource consumption

Common production issue:

text
Application works correctly
BUT
Logging sidecar consumes excessive memory
→ Entire Pod gets [OOMKilled](/kubernetes-oomkilled-error-exit-code-137/)

Because Kubernetes schedules resources at the Pod level, poorly configured sidecars can affect the entire application.

Logging and Monitoring Recommendations

Sidecars often handle logging and monitoring responsibilities, so observability becomes critical for troubleshooting production workloads.

Recommended logging practices:

  • Use structured logs (JSON preferred)
  • Avoid excessive log verbosity
  • Rotate or forward logs properly
  • Monitor sidecar restart counts
  • Export Prometheus metrics where possible

Example monitoring commands:

bash
kubectl logs pod-name -c sidecar-container

kubectl describe pod pod-name

kubectl top pod pod-name --containers

Recommended production monitoring:

Area Recommendation
Logs Fluent Bit / Loki / ELK
Metrics Prometheus exporters
Tracing OpenTelemetry sidecars
Alerts Restart/OOM monitoring
Health Checks Readiness/Liveness probes

Example readiness probe for sidecar:

yaml
readinessProbe:
  httpGet:
    path: /health
    port: 2020

  initialDelaySeconds: 5
  periodSeconds: 10

Monitoring sidecars separately from the main application helps identify bottlenecks and operational failures faster.

Graceful Shutdown Handling

Both the main application and sidecar containers stop together when the Pod terminates. If shutdown handling is not implemented correctly, logs may be lost, active connections may terminate abruptly, or data synchronization may remain incomplete.

Common shutdown risks:

  • Log buffers not flushed
  • Proxy connections terminated abruptly
  • Metrics not exported
  • Incomplete file synchronization

Recommended practices:

  • Handle SIGTERM signals properly
  • Configure termination grace periods
  • Flush logs before exit
  • Avoid abrupt container termination

Example termination handling:

yaml
spec:
  terminationGracePeriodSeconds: 30

Example sidecar shutdown logic:

bash
trap "echo Flushing logs before exit; sleep 5; exit 0" SIGTERM

Recommended graceful shutdown workflow:

text
Pod Termination
       |
       v
Kubernetes Sends SIGTERM
       |
       v
Main App + Sidecar Finish Active Tasks
       |
       v
Flush Logs / Close Connections
       |
       v
Containers Exit Gracefully

Proper shutdown handling is especially important for:

In production Kubernetes environments, well-designed sidecars should remain lightweight, loosely coupled, observable, and capable of handling startup and shutdown events gracefully.


Frequently Asked Questions

1. What is a sidecar container in Kubernetes?

A sidecar container is an additional container running inside the same Kubernetes Pod alongside the main application container to provide helper functionality such as logging, monitoring, proxying, or configuration synchronization.

2. Can a Kubernetes Pod have multiple containers?

Yes, a Kubernetes Pod can contain multiple containers. All containers inside the same Pod share the same network namespace and can communicate using localhost while optionally sharing storage volumes.

3. What are common sidecar container use cases?

Common Kubernetes sidecar use cases include centralized logging, service mesh proxies like Istio Envoy, metrics exporters, configuration reloaders, authentication proxies, and file synchronization services.

4. How do containers communicate inside the same Pod?

Containers inside the same Kubernetes Pod communicate using localhost because they share the same network namespace. Shared volumes can also be used for exchanging files and logs.

5. What is the difference between sidecar and init container in Kubernetes?

A sidecar container runs continuously alongside the main application container, while an init container runs only during Pod startup and exits before the main application starts.

Summary

In this tutorial, we learned how Kubernetes sidecar containers work and why the sidecar pattern is widely used in modern cloud-native environments. We explored how multiple containers inside the same Pod share networking, storage volumes, and lifecycle management to provide tightly integrated functionality.

We also implemented several real-world Kubernetes sidecar scenarios including:

  • Log processing sidecar
  • NGINX reverse proxy sidecar
  • Config reload sidecar

Additionally, we compared sidecar containers with init containers, discussed production best practices, and covered important topics such as shared volumes, localhost communication, graceful shutdown handling, and resource management.

The Kubernetes sidecar pattern is commonly used for:

  • Logging and monitoring
  • Service mesh proxies
  • Authentication gateways
  • Metrics exporters
  • Configuration synchronization
  • Runtime traffic management

When designed correctly, sidecar containers help improve application modularity, maintainability, observability, and operational flexibility in Kubernetes environments.


Official Documentation

Deepak Prasad

R&D Engineer

Founder of GoLinuxCloud with more than 15 years of expertise in Linux, Python, Go, Laravel, DevOps, Kubernetes, Git, Shell scripting, OpenShift, AWS, Networking, and Security. With extensive …