Terrance Evans · St. Louis hybrid · Remote

I build the platforms
that software runs on.

Cloud infrastructure. Secure delivery. Reliable operations. I’m a systems engineer working across Azure, Kubernetes, infrastructure as code, and CI/CD.

Seeking Cloud, SRE, DevOps, Platform, and DevSecOps engineering roles.

01 / Cloud & platform engineering

Give teams a foundation
they can build on.

At Boeing, I write parameterized infrastructure as code for pipelines, research platform tools, and provide technical direction and onboarding for junior engineers.

The goal is a platform that teams can use and operators can understand. Select a responsibility to inspect its purpose.

See my professional experience
Fig 01 / Platform responsibilitiesConceptual model
Terraform

Make infrastructure repeatable

My professional work includes standardizing infrastructure provisioning with Terraform. A versioned configuration gives teams a shared way to review and repeat changes.

A repeatable starting point for engineering teams.

Service accounts + RBAC

Make permissions explicit

My platform lab defines dedicated service accounts and RBAC. These controls separate workload identity from the permissions each workload receives.

Access can be inspected and reviewed.

AKS + Docker + Helm

Give applications a platform

At Boeing, I work on Azure Kubernetes Service capabilities and reusable tooling. My independent lab uses Kind to exercise Kubernetes delivery patterns locally.

A clear boundary between cloud experience and local lab evidence.

Health checks + observability

Make behavior visible

My work includes observability and health-check automation. In the lab, Prometheus, Grafana, Alertmanager, Alloy, and Loki make metrics, alerts, and logs available for investigation.

Operators can inspect a change and verify the result.

02 / DevOps & delivery

A commit is only
the beginning.

I built the Enterprise Platform Lab to connect the full delivery path: build an image, publish it, change the desired version, and reconcile it into Kubernetes.

Each component has a different job. Advance the artifact through the delivery path.

Release validation
What was built?
I built the lab delivery path with GitHub Actions, GHCR, Helm, and Argo CD.
Why this design?
Record the desired image version in Git so delivery has a reviewable history.
What was tested?
Publish commit-specific images, inspect the Argo CD application and running pods, and request the application through ingress.
What happened?
The release record documents delivery of commit-specific images to running Kubernetes workloads.
Image reference from the validation record
Validated image reference
ghcr.io/techopst/platform-api:0051ca974e375a8085547e08abf41246104c35aa

Independent local lab. Image publication does not depend on the separate validation workflow. Commit-specific tags do not guarantee registry-enforced immutability.

Open the release validation
Independent lab · Kind KubernetesRead the architecture and validation
Fig 02 / Delivery path

Follow an artifact from source to workload.

01BuildGitHub Actions

Build frontend and API images from a source commit. CI creates artifacts; it does not deploy them to the cluster.

02PublishGHCR

Store the images with commit-specific tags. The registry holds artifacts that Kubernetes can pull.

03PromoteGit + Helm

After both builds succeed, update the Helm image tags in Git. This commit records the version the cluster should run.

04ReconcileArgo CD

Compare live configuration with Git. Apply the Helm configuration and let Kubernetes roll out the workloads.

05OperateKubernetes + observability

Run React, Flask, PostgreSQL, and Redis in a two-node Kind cluster. Use metrics, alerts, and logs to inspect workload behavior.

Conceptual walkthrough of my independent lab. Open the project for source code and validation records.

03 / Site reliability engineering

Understand the change.
Verify the recovery.

The lab records configuration recovery and an autoscaling exercise. A separate restore drill exposed a database backup gap. I am reviewing the current implementation before repeating key tests myself.

Self-healing validation
What was built?
I own the lab’s GitOps configuration. The repository records an exercise with a deleted frontend Deployment.
Why this design?
Use Git as the desired-state record and enable Argo CD self-healing.
What was tested?
Delete the frontend Deployment, then check whether Argo CD recreates it from Git.
What happened?
The validation record states that Argo CD detected the missing Deployment and recreated it from Git.
Command used in the recorded exercise
Recorded recovery command
kubectl delete deployment frontend -n platform-lab

The record validates configuration recovery. It does not measure recovery time or production availability.

Open the self-healing validation
Read the database recovery case study
Fig 03 / Operating response

Follow the operating response.

Illustrative walkthrough

Select a scenario. Follow the response and see which component owns each step.

Argo CD

A Deployment is deleted

Git still declares the frontend Deployment. Follow how the controller restores that desired state.

Read the self-healing validation
  1. 01
    Drift detected

    Argo CD compares the live cluster with Git. The declared Deployment is missing.

    Desired: Deployment present / Live: Deployment missing

    Component boundary: Argo CD detects configuration drift. Prometheus does not restore Kubernetes resources.

  2. 02
    Configuration restored

    With automated self-healing enabled, Argo CD reapplies the declared Deployment.

    Desired and live configuration converge

    Component boundary: The Deployment controller creates the ReplicaSet and Pods. The scheduler selects nodes; the kubelet starts containers.

  3. 03
    Workload checked

    Inspect the rollout and readiness. A restored manifest alone does not prove that the application can serve traffic.

    Check rollout status, ready Pods, and application response

    Component boundary: Self-healing restores declared configuration. It cannot correct an error already committed to Git.

Horizontal Pod Autoscaler

API CPU utilization rises

Follow the CPU-based scaling path. Each controller has a separate job.

Read the autoscaling validation
  1. 01
    Demand measured

    Metrics Server supplies resource metrics. The HPA compares CPU utilization with its configured target.

    CPU utilization relative to container CPU requests

    Component boundary: For this CPU-based HPA, Metrics Server supplies the metrics. Prometheus is a separate monitoring system.

  2. 02
    Replica count changed

    The HPA changes the desired replica count within its limits. The workload controller creates more Pods.

    Desired replicas increase within configured limits

    Component boundary: The HPA changes replica count. The scheduler places new Pods only when eligible nodes have enough resources.

  3. 03
    Demand falls

    After traffic stops, the HPA can reduce replicas according to its scaling policy and stabilization settings.

    Observe CPU, replica count, and scale-down behavior

    Component boundary: More replicas use existing cluster capacity. They do not add nodes or guarantee lower latency.

Metrics, alerts, and logs

Requests start to fail

Use each observability tool for a specific question. This is an illustrative investigation, not a recorded incident.

Inspect the logging configuration
  1. 01
    Find the symptom

    Prometheus collects metrics and evaluates alert rules. Grafana displays the metrics so an operator can inspect changes in errors and latency.

    Metrics answer: what changed, and when?

    Component boundary: Prometheus evaluates the rule. Grafana provides the dashboard; it does not collect workload metrics in this flow.

  2. 02
    Route the alert

    Prometheus sends firing alerts to Alertmanager. Alertmanager groups, routes, and silences notifications.

    Alerts answer: who needs to respond?

    Component boundary: Alertmanager handles notifications. It does not scrape metrics or evaluate Prometheus alert rules.

  3. 03
    Inspect the events

    Grafana Alloy collects workload logs and sends them to Loki. Query the logs through Grafana to inspect events around the failure.

    Logs answer: what happened in the workload?

    Component boundary: A dashboard or notification does not repair a failure. Use the evidence to choose a fix, then verify recovery.

04 / DevSecOps

Make the release decision
explicit.

My professional work includes GitLab CI/CD security gates, SAST, and configuration validation. In the lab, a Kyverno admission test rejected a pod that did not meet the workload policy.

The interaction models a release policy: a failed required check blocks promotion. It is an example, not the current lab publication workflow.

Read the policy validation and security limits
Fig 04 / Release decisionIllustrative model

Change a check result. See how the release decision changes.

All required checks must pass.

A release policy can block promotion when a required check fails.

This model explains a decision rule. It does not scan an image or approve a real release.

05 / More work

Platforms with a purpose.

All projects
02

Testimony House

Live platform · Ongoing technical operations

Replacement of a generic website with a live course and content platform. I own the technical implementation and operations.

03

Digital Transformation Impact Explorer

Independent application · Phase 2 complete

A learning and assessment application with versioned scoring, service contracts, and validated Helm deployment to a local Kind cluster.

04

Portfolio architecture decision

Architecture decision · September 2026

The tradeoffs behind a content-focused portfolio built with Astro, custom CSS, and static delivery.

The next opportunity

Build. Operate.
Keep improving.

I want to own and operate Kubernetes platforms: secure them, improve availability, support application delivery, and build internal developer services. I am open to St. Louis hybrid and remote roles.

T.Evans614@hotmail.com