Skip to main content
Organizations migrate to Kubernetes because it solves critical scalability, reliability, security, and developer-velocity challenges that modern teams face. At its core, Kubernetes provides a standardized, automated, self-healing platform for running applications. Accelerating a Kubernetes migration is often a strategic engineering decision made to meet certain business requirements, such as lowering infrastructure costs or improving MTTR, in a shorter timeframe. To accelerate a migration to Kubernetes:
Cortex customer LetsGetCheck cut their Kubernetes migration timeline from 24 months down to 16 months by targeting goals with Initiatives. Read the full case study here.

Create a Kubernetes Scorecard

Prerequisites

Before using this Scorecard template:

Step 1: Create the Scorecard and configure its basic settings

You can create a Scorecard in the Cortex UI, or you can add it to your workspace via GitOps or the Cortex API.

Create Scorecard in the Cortex UI

  1. On the Scorecards page in your workspace, click Create Scorecard.
  2. On the Kubernetes Deployment Baseline template, click Use.
  3. Configure basic settings, including the Scorecard’s name, unique identifier, description, and more.

Step 2: Review and modify rules

Cortex’s templated rules are based on common industry standards. See the template in-app for more context on each rule:
  • Runs in cluster
    k8s != null
  • Dockerignore file exists
    git.fileExists(".dockerignore")
  • Dockerfile exists
    git.fileExists("Dockerfile")
  • Memory request is set
    jq(k8s.spec(), "[.[].template.spec.containers[]] | length") == jq(k8s.spec(), "[.[].template.spec.containers[] | select(.resources.requests.memory != null)] | length")
  • Memory limit is set
    jq(k8s.spec(), "[.[].template.spec.containers[]] | length") == jq(k8s.spec(), "[.[].template.spec.containers[] | select(.resources.limits.memory != null)] | length")
  • Liveness probe is set
    jq(k8s.spec(), "[.[].template.spec.containers[]] | length") == jq(k8s.spec(), "[.[].template.spec.containers[] | select(.livenessProbe != null)] | length")
  • Readiness probe is set
    jq(k8s.spec(), "[.[].template.spec.containers[]] | length") == jq(k8s.spec(), "[.[].template.spec.containers[] | select(.readinessProbe != null)] | length")
  • CPU request is set
    jq(k8s.spec(), "[.[].template.spec.containers[]] | length") == jq(k8s.spec(), "[.[].template.spec.containers[] | select(.resources.requests.cpu != null)] | length")
  • Git branch protection
    git.branchProtection() != null
  • No “latest” tag for base image
    git.fileContents("Dockerfile").matchesIn("^FROM[ \t]+(?!.*:latest\b).$")
You can reorder, delete, and edit rules, add more rules to a level, and assign more points to a rule to signify its importance. Behind each rule is a Cortex Query Language (CQL) query; you can edit the existing CQL or write your own queries to further refine your rules.

Create a K8s acceleration Initiative

If you notice the team isn’t making progress as quickly as expected, or you need to complete certain rules within a specific timeframe, you can create an Initiative to motivate completion. Follow the steps below to create an Initiative:
  1. While viewing your Kubernetes Deployment Baseline Scorecard, click Create Initiative in the upper right.
  2. Configure the Initiative fields, including a descriptive name so your team members understand the purpose of the Initiative. For example, Accelerate K8s migration.
    • Make sure to enable notifications so users are notified if an entity they own is failing the Initiative’s goal.
    • For the goal, you might want to ask your team to complete a certain level, or specific rules. Examples: Complete all "Runtime ready" level rules by the end of the quarter or Make sure a Dockerfile exists for every service by end of month.
  3. Save the Initiative.
After the Initiative is published, entity owners will be notified if their entity is not meeting the goal. They will see action items listed on their engineering homepage and they will automatically receive a weekly progress update from the Initiative.Learn more about creating Initiatives in the docs.

Measuring success

To understand progress of your Scorecard:
  • Ask Cortex MCP, “How is my Kubernetes Deployment Baseline Scorecard doing?” The MCP will respond with information on the entities that are failing rules and suggested next steps.
  • Review reports: The Bird’s Eye report gives insight into how entities are performing against the Scorecard by visualizing the data as a heat map:
    The bird's eye report shows Scorecard progress as a heat map.
You can also review your Engineering Intelligence metrics for impact on key engineering metrics, such as:
  • MTTR: Kubernetes best practices, such as liveness probes in place, can result in faster diagnosis and auto-recovery. You may see MTTR decrease.
  • Change failure rate: With resource limits reducing pod crashes and no “latest” image tag resulting in deterministic builds, you may see more successful deploys on first attempt, thus decreasing change failure rate.
Last modified on September 28, 2026