Skip to main content

GAP introduction

Current state

We have full support for operating stateless applications at Gjensidige in GAP.

What is GAP

GAP - Gjensidige Application Platform.

GAP is a modern, Kubernetes-based internal platform that provides secure, paved roads for application teams. The Platform Squad delivers a fully managed developer foundation, while Application Owners maintain responsibility for the functionality, deployments, and runtime health of their services.

GAP – Capabilities & Components

GAP provides a complete, managed foundation for building, deploying and operating applications. It consists of the following key capabilities:

1. Kubernetes Compute (AKS):

  • Managed AKS clusters for running all applications
  • Automated upgrades, security patching, and cluster operations
  • Standardized networking, RBAC, and security policies

2. Continuous Integration (GitHub Actions):

  • Central CI infrastructure with managed runners
  • Shared templates and secure defaults for build pipelines
  • Supports team‑owned CI workflows and application builds

3. Continuous Delivery / GitOps (ArgoCD):

  • Declarative deployments to AKS using GitOps
  • Automated sync, health checks, and rollout visibility
  • Platform‑operated ArgoCD instance with team‑owned manifests
  • Gappynator operator providing a unified abstraction layer for the Kubernetes functionality supported in GAP

4. Container Management (Docker Registry):

  • Centralized image storage
  • Retention policies, cleanup, and security scanning
  • Supports team‑built application images

5. Observability Stack (Loki, Grafana, Mimir, Tempo):

  • Logs: Loki
  • Metrics: Mimir (Prometheus‑compatible)
  • Traces: Tempo
  • Dashboards & Alerts: Grafana
  • RUM (Real user monitoring) & Frontend Telemetry: Faro
  • Platform‑operated stack with team‑owned service dashboards

Newest features in GAP

Planned for GAP:

  • Automation of bootstrapping new applications
  • Firewall management
  • Setup of state resources (e.g. postgres)

Principles to follow in order to run on GAP

1. Application State & Behavior

  • The application does not store state locally; all state is kept in external services such as databases, caches, or object storage.
    Ref: The Twelve‑Factor App -- Processes (​https://12factor.net/processes​)
  • All requests are independent and self‑contained, without relying on prior requests.
    Ref: REST Stateless Constraint (​https://restfulapi.net/statelessness/​)
  • Operations should be idempotent where possible to support retries in distributed environments.

2. Configuration & Secrets

  • Configuration and secrets are injected via environment variables or mounted volumes.
    Ref: The Twelve‑Factor App -- Config (​https://12factor.net/config​)

3. Observability

4. Scalability & Deployment

  • The application should be able to run multiple instances simultaneously.
  • Multiple versions of the application can run in parallel to support canary and blue/green deployment patterns.
  • The application performs a graceful shutdown on SIGTERM and exits before the terminationGracePeriodSeconds expires.
    Ref: Kubernetes Pod Lifecycle (​https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/​)

5. Build & Runtime

  • Application builds are immutable docker containers, with configuration applied only at runtime.

RACI Table for applications running on GAP

Activity / ResponsibilityPlatform SquadApplication Owners
AKS cluster operations (scaling, backups, node pools, networking)R/AC
AKS security patching & upgradesR/AI
Cluster-wide security baselines (RBAC, policies)R/AI/C
Operate GitHub Actions runners / CI infrastructureR/AC
Maintain shared CI templates / reusable workflowsRC
Implement CI pipelines for their app (build, test)IR/A
ArgoCD platform operationR/AI
Define GitOps standards, folder structure, and deployment patternsRC
Application GitOps manifestsI/CR/A
Application deployments (via ArgoCD automation)CR/A
Docker registry operation (availability, retention, scanning)R/AI
Build and publish application imagesIR/A
Application runtime ownership (config, scaling settings, healthchecks)CR/A
Operate observability stack (Loki, Grafana, Mimir, Tempo)R/AI
Provide dashboards, alerting templates, shared panelsRC
Create application-level dashboards & alertsCR/A
Incident response: platform/cluster-level issuesR/AI
Incident response: application-level issuesIR/A
-Definitions
RResponsible: Executes the work
AAccountable: Final authority / decision maker
CConsulted: Provides input before work is done
IInformed: Updated after work is done