Back to Projects

SkyOps - Air Traffic Control Simulation

Lead Infrastructure & DevOps Engineer2025 - 2026

An event-driven microservices architecture simulating active air traffic control radars. Deployed on high-availability Kubernetes environments with automated infrastructure provisioning, dependency ordering, and tuned DNS configurations.

Demo Loop

System Architecture

frontendNext.js Radar UI
backendSimulator Svc (Node.js)
backendUser Svc (Python)
backendNotification Svc (Node.js)
queueRedis Queue & Cache
databasePostgreSQL

Data Flows & Communication

Next.js Radar UISimulator Svc (Node.js)WebSocket / Socket.io
Next.js Radar UIUser Svc (Python)REST HTTP
Simulator Svc (Node.js)Redis Queue & CachePub/Sub
User Svc (Python)PostgreSQLRead/Write
Notification Svc (Node.js)Redis Queue & CacheSubscribe

System Architecture & Communications Diagram

Next.js Radar Dashboard (HTML5 / WebGL Canvas)Renders 2D/3D Flight vectors, alerts & collision warnings (Port: 3000/3005)User Service (Python/Flask - Port: 5001)Auth & History REST APIValidates users & handlessimulation historyBackground Threadqueue_consumer.pypolls logs & writes to DBSimulator Service (Node/TypeScript - Port: 4000)Simulation Engineengine.ts physics loopSeparation violations checkSocket.io BrokerStreams telemetryat 1Hz intervals to UIPostgreSQLskyops_db (Port: 5432)Redis Broker (Port: 6379)List: history_logsList: notification_queueNotification Service (Worker)Notification Svc (Node/TS)smtp.gmail.com worker loopSeparation Violations & Engine• Calculates proximity alert zones (TCAS style rings)• Measures 2D horizontal & vertical distance• Compiles session score, violations, traffic countHTTP REST (Auth / History)Socket.io (WebSockets Stream)SQLAlchemySave history logsrpush history_logsblpop history_logsrpush notification_queueblpopNodemailer SMTP

Interactive Scenario Simulator

Select a scenario to trigger and view simulated backend logs & database traces.

service-daemon.log
2026-06-10 20:15:32 - Initializing simulator-deployment initContainer 'wait-for-redis'...
2026-06-10 20:15:33 - netcat checking connection to redis-service:6379...
2026-06-10 20:15:33 - Redis port 6379 is open. Starting primary Simulator container...
2026-06-10 20:15:34 - Injecting environment variables: JWT_SECRET_KEY from Secret, PORT from ConfigMap.
2026-06-10 20:15:34 - Simulator Service listening on port 4000.

DevOps

Kubernetes, YAML

Kubernetes Orchestration

Configured resilient deployments, NodePort services, ConfigMaps, and Secrets. Managed container lifecycle, environment variables, and ingress ports.

Kubernetes initContainers

Service Dependency Ordering

Enforced reliable startup sequences by introducing initContainers to check dependency readiness (PostgreSQL & Redis) before starting core services.

GitHub Actions

CI/CD & Testing Pipelines

Automated linting, type-checking, Jest testing (shared package & frontend), Pytest (user service), and production build verification via GitHub Actions.

CI/CD GitOps Pipeline & Tech Stack Justification

A comprehensive overview of the automated build-to-deploy GitOps workflow and key DevOps infrastructure choices.

GitOps & Git CI/CD Workflow

Full automation pipeline from developer commit to Kubernetes rollout.

1. Push CodeGitHub RepositoryDeveloper commit2. GitHub Actions• Run Pytest / Jest• Build Docker image3. Docker RegistryGHCR (GitHub)Stored Prod Image4. GitOps Repo(In Progress)Kustomize ConfigsPatches image tag5. ArgoCD Reconciliation Loop(In Progress / En cours)Pulls new image from GHCR ➔ Rollout update to K8sZero configuration drift guaranteedBuild OkSyncPull Image

DevOps Roadmap & Tech Stack

ImplementedActive

Kubernetes (K8s) & Redis

K8s provides service discovery, DNS routing, and self-healing. Redis handles high-throughput message streaming queue between microservices.

In ProgressImplementing

ArgoCD & GitOps Loop

Integrating ArgoCD to automate deployment matching state configs from the Git repository, eliminating configuration drift.

Future RoadmapPlanned

Terraform IaC & AWS Cloud

Automating cloud infrastructure provisioning with Terraform IaC, deploying production clusters to AWS (EKS, VPC, IAM).

Run Infrastructure Locally

You can easily spin up the complete containerized stack in your local terminal.

git clone https://github.com/everleepham/SkyOps-web-app-version.git
cd SkyOps-web-app-version
docker-compose up -d --build

Engineering Challenges & Design Decisions

DNS Resolution & Service Startup Failures

Problem

Microservices frequently crashed at startup because dependent databases (PostgreSQL/Redis) weren't ready, or due to DNS lookup timeouts (EAI_AGAIN) in the Kubernetes cluster.

Engineering Solution

Configured Kubernetes dnsConfig options with increased timeout and lookup attempts, and implemented initContainers with wait-for-service netcat loops to defer main container startup until services are ready.

Key Achievements & Metrics

  • Configured robust multi-service environment setup using Docker Compose for local development.
  • Established high-availability deployment configs on Kubernetes with zero-downtime service dependencies.
  • Built full CI/CD test automation covering TypeScript and Python codebases via GitHub Actions.