Accelerate migration to K8s

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:

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:

Level 1: Foundational container hygiene
  • Runs in cluster k8s != null

  • Dockerignore file exists git.fileExists(".dockerignore")

  • Dockerfile exists git.fileExists("Dockerfile")

Level 2: Runtime ready
  • 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")

Level 3: Kubernetes production ready
  • 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:

Create a Kubernetes 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 updated

Was this helpful?