Skip to content

Commit c83a96e

Browse files
committed
Add v0.4.x versioned documentation
Create versioned documentation for OpenChoreo v0.4.x release, including all updated guides, API references, and configuration. Set v0.3.x as the current latest version until v0.5.x is released.
1 parent 8e96fd3 commit c83a96e

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

49 files changed

+7739
-0
lines changed

docusaurus.config.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ const config: Config = {
4343
'classic',
4444
{
4545
docs: {
46+
lastVersion: 'v0.3.x', // TODO: Remove this when v0.5.x is released to mark it as the latest version
4647
sidebarPath: './sidebars.ts',
4748
showLastUpdateAuthor: true,
4849
showLastUpdateTime: true,
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
[//] # (This file stores the constants used across the documentation.)
2+
3+
export const versions = {
4+
dockerTag: 'v0.4.0',
5+
githubRef: 'release-v0.4', // Used for the GitHub Raw URL references. Example: main, latest, v0.1.0
6+
helmChart: '0.4.0',
7+
};
Lines changed: 103 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,103 @@
1+
---
2+
title: Developer Abstractions
3+
description: Developer abstractions for building and running applications
4+
---
5+
6+
# Developer Abstractions
7+
8+
Developer abstractions in OpenChoreo enable teams to build, deploy, and operate cloud-native applications without
9+
managing infrastructure complexity. These abstractions provide a declarative model for expressing application
10+
architecture, dependencies, and operational requirements while the platform handles the underlying Kubernetes resources,
11+
networking, and security configurations automatically.
12+
13+
## Project
14+
15+
A **Project** represents a bounded context in Domain-Driven Design terms - a cohesive collection of components that
16+
together implement a specific business capability or application domain. It serves as the primary organizational unit
17+
for developers, defining clear boundaries for code ownership, deployment coordination, and operational responsibility.
18+
19+
Projects establish both logical and physical boundaries in the platform. Logically, they group related components that
20+
share common business logic, data models, and team ownership. Physically, they translate into isolated deployment units
21+
with dedicated namespaces, network boundaries, and security policies. This alignment between organizational structure
22+
and technical architecture enables teams to work autonomously while maintaining clear integration points with other
23+
projects.
24+
25+
The project boundary also defines the scope for internal communication and shared resources. Components within a project
26+
can communicate freely with each other. This locality principle reduces complexity for
27+
developers while maintaining security and isolation between different application domains.
28+
29+
## Component
30+
31+
A **Component** represents a deployable unit of software - the fundamental building block of applications in OpenChoreo.
32+
Each component encapsulates a specific piece of functionality, whether it's a microservice handling business logic, a
33+
web application serving user interfaces, or a background job processing data.
34+
35+
Components provide the connection between source code and running applications. They define how code is built, what
36+
resources it requires, and how it should be deployed. This abstraction allows developers to focus on application logic
37+
while the platform handles the complexities of containerization, orchestration, and lifecycle management.
38+
39+
## Component Types
40+
41+
OpenChoreo provides specialized component types that represent common application patterns, each with its own
42+
operational characteristics and platform integrations.
43+
44+
### Service
45+
46+
A **Service** component represents backend applications that expose APIs or handle business logic. Services are the
47+
workhorses of cloud-native applications, processing requests, managing data, and integrating with other systems. The
48+
platform understands that services need stable network identities, load balancing, and API management capabilities.
49+
50+
Services can expose multiple protocols including HTTP, gRPC, and TCP, with the platform handling the appropriate
51+
routing and load balancing for each protocol type.
52+
53+
### WebApplication
54+
55+
A **WebApplication** component represents frontend applications that serve user interfaces. These might be single-page
56+
applications, server-side rendered websites, or static content. The platform recognizes that web applications have
57+
different operational requirements than backend services and provides appropriate deployment patterns through the
58+
WebApplicationClass.
59+
60+
### ScheduledTask
61+
62+
A **ScheduledTask** component represents batch jobs, cron jobs, and other time-based workloads. Unlike continuously
63+
running services, scheduled tasks execute at specific times or intervals, complete their work, and terminate.
64+
ScheduledTasks are configured with cron expressions to define when they should run, and the platform handles the
65+
scheduling through the ScheduledTaskClass and Kubernetes CronJob resources.
66+
67+
## Workload
68+
69+
A **Workload** defines the runtime contract of a component - specifying what the component needs to run. The workload
70+
focuses on application requirements rather than infrastructure details, which are handled by the platform through Classes.
71+
72+
Each component has one workload that describes its runtime needs through several key specifications:
73+
74+
**Containers** define the container images to deploy, along with their commands, arguments, and environment variables.
75+
This tells the platform what code to run and how to configure it.
76+
77+
**Endpoints** specify the network interfaces that the component exposes - the ports and protocols it listens on. Each
78+
endpoint declares its type (HTTP, gRPC, TCP, etc.) and port number. These definitions tell the platform what network
79+
services the component provides, enabling automatic service creation and network policy generation.
80+
81+
**Connections** declare the component's dependencies on other services, whether internal to the platform or external
82+
third-party services. Each connection specifies how to inject service information into the component through environment
83+
variables. This enables the platform to manage service discovery, configure network policies, and track dependencies.
84+
85+
This declarative specification can be generated from configuration files in the source repository or applied directly
86+
to the cluster. The separation between workload (what the application needs) and classes (how the platform provides it)
87+
enables platform teams to control infrastructure policies while developers focus on application requirements. Resource
88+
limits, scaling parameters, and operational policies come from the ServiceClass or WebApplicationClass, while the
89+
workload simply declares what the application needs to function.
90+
91+
## Build
92+
93+
A **Build** represents the process of transforming source code into deployable artifacts. It captures the build
94+
configuration, tracks build execution, and manages the resulting container images. The build abstraction provides a
95+
consistent interface for different build strategies while handling the complexities of secure, reproducible builds.
96+
97+
Builds in OpenChoreo are first-class resources that can be monitored, audited, and managed independently of deployments.
98+
This separation enables practices like building once and deploying many times, pre-building images for faster
99+
deployments, and maintaining clear traceability from source code to running containers.
100+
101+
The platform supports multiple build strategies to accommodate different technology stacks and organizational
102+
preferences. Whether using Cloud Native Buildpacks for automatic, opinionated builds or custom Dockerfiles for complete
103+
control, the build abstraction provides a consistent operational model.
Lines changed: 142 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,142 @@
1+
---
2+
title: Platform Abstractions
3+
description: Platform abstractions for managing infrastructure
4+
---
5+
6+
# Platform Abstractions
7+
8+
Platform abstractions in OpenChoreo provide the foundational infrastructure layer that platform engineers use to build
9+
and manage Internal Developer Platforms. These abstractions establish organizational boundaries, manage infrastructure
10+
resources, and define the operational policies that enable developer self-service while maintaining security and
11+
compliance.
12+
13+
## Organization
14+
15+
The **Organization** represents the highest level of tenancy in OpenChoreo, serving as the root container for all
16+
platform resources. It establishes the fundamental isolation boundary between different business units, teams, or
17+
customers in a multi-tenant platform.
18+
19+
Organizations provide complete resource isolation through dedicated Kubernetes namespaces, ensuring that resources,
20+
configurations, and workloads from different organizations never interact. This isolation extends beyond simple
21+
namespace separation to include network policies, RBAC rules, and resource quotas, creating a secure multi-tenant
22+
environment.
23+
24+
Each organization maintains its own set of platform resources, application resources, and runtime configurations. This
25+
hierarchical structure enables platform teams to manage multiple independent tenants on the same OpenChoreo
26+
installation, each with their own governance policies, resource limits, and operational procedures.
27+
28+
## Infrastructure Planes
29+
30+
OpenChoreo separates infrastructure concerns into specialized planes, each serving a distinct purpose in the platform
31+
architecture. This separation enables independent scaling, security isolation, and operational management of different
32+
platform functions.
33+
34+
### DataPlane
35+
36+
A **DataPlane** represents a Kubernetes cluster where application workloads run. It abstracts the complexity of cluster
37+
management, providing a unified interface for deploying applications across multiple clusters regardless of their
38+
location or underlying infrastructure.
39+
40+
DataPlanes encapsulate all the configuration needed to connect to and manage a Kubernetes cluster, including connection
41+
credentials, TLS certificates, and cluster-specific settings. They enable platform teams to register multiple clusters -
42+
whether on-premises, in public clouds, or at edge locations - and manage them through a single control plane.
43+
44+
Each DataPlane can host multiple environments and projects, with OpenChoreo managing the creation of namespaces, network
45+
policies, and other cluster resources automatically. This abstraction allows platform teams to treat clusters as
46+
interchangeable infrastructure resources, enabling strategies like geographic distribution, compliance-based placement,
47+
and disaster recovery.
48+
49+
### BuildPlane
50+
51+
A **BuildPlane** provides dedicated infrastructure for executing continuous integration and build workloads. By
52+
separating build operations from runtime workloads, BuildPlanes ensure that resource-intensive compilation and testing
53+
processes don't impact production applications.
54+
55+
BuildPlanes integrate with Argo Workflows to provide a scalable, Kubernetes-native CI/CD execution environment. They
56+
handle the complete build lifecycle, from source code retrieval through compilation, testing, and container image
57+
creation. This separation also provides security benefits, isolating potentially untrusted build processes from
58+
production environments.
59+
60+
Platform engineers configure BuildPlanes with the necessary tools, credentials, and policies for building applications.
61+
This includes container registry credentials, build tool configurations, and security scanning policies. BuildPlanes can
62+
be scaled independently based on build demand and can be distributed geographically to reduce latency for development
63+
teams.
64+
65+
### Observability Plane
66+
67+
The **Observability Plane** provides centralized logging infrastructure for the entire platform. It collects and
68+
aggregates logs from all other planes - Control, Data, and Build - providing a unified view of platform operations and
69+
application behavior.
70+
71+
Built on OpenSearch, the Observability Plane offers full-text search capabilities and log retention management. The
72+
Observer API provides authenticated access to log data, enabling integration with external monitoring tools and
73+
dashboards. Unlike other planes, the Observability Plane has no custom resources to manage - it operates independently
74+
after initial setup, receiving log streams from Fluentbit agents deployed across the platform.
75+
76+
Platform engineers configure the Observability Plane once during initial setup, establishing log collection pipelines,
77+
retention policies, and access controls. This centralized approach ensures that all platform activity is auditable and
78+
debuggable while maintaining security boundaries between organizations.
79+
80+
## Environment
81+
82+
An **Environment** represents a stage in the software delivery lifecycle, such as development, staging, or production.
83+
Environments provide the context for deploying and running applications, defining the policies, configurations, and
84+
constraints that apply to workloads in that stage.
85+
86+
Environments are not just labels or namespaces - they are first-class abstractions that define where applications
87+
should be deployed (which DataPlane) and serve as targets for deployment pipelines. This abstraction enables platform
88+
teams to organize different stages of the delivery pipeline.
89+
90+
Each environment represents a distinct deployment target. Development environments might target smaller clusters or
91+
shared infrastructure, while production environments target dedicated, high-availability clusters. The Environment
92+
resource primarily defines the mapping to infrastructure (DataPlane) and serves as a reference point for deployments
93+
and promotion workflows.
94+
95+
## DeploymentPipeline
96+
97+
A **DeploymentPipeline** defines the allowed progression paths for applications moving through environments. It
98+
represents the organization's software delivery process as a declarative configuration, encoding promotion rules,
99+
approval requirements, and quality gates.
100+
101+
DeploymentPipelines go beyond simple environment ordering to define complex promotion topologies. They can specify
102+
parallel paths for different types of releases and conditional progressions based on application characteristics.
103+
This flexibility allows organizations to implement sophisticated delivery strategies while maintaining governance and
104+
control.
105+
106+
The pipeline abstraction also serves as an integration point for organizational processes. Manual approval gates can be
107+
configured for sensitive environments, automated testing can be triggered at promotion boundaries, and compliance checks
108+
can be enforced before production deployment. This ensures that all applications follow organizational standards
109+
regardless of which team develops them.
110+
111+
## Class System
112+
113+
OpenChoreo implements the standard Kubernetes Class pattern, similar to GatewayClass or StorageClass, enabling platform
114+
engineers to define platform-level abstractions that developers consume through their applications.
115+
116+
### The Class Pattern
117+
118+
Classes are platform-level resources that encode organizational standards, best practices, and governance policies.
119+
Platform engineers create Classes for different workload types - ServiceClass for backend services, WebApplicationClass
120+
for frontend applications, and ScheduledTaskClass for batch jobs. Each Class defines the platform standards that
121+
applications must follow when claiming these resources.
122+
123+
Just as GatewayClass defines infrastructure capabilities that Gateway resources consume, or StorageClass defines how
124+
storage should be provisioned when a PersistentVolumeClaim is created, ServiceClass defines how services should be
125+
deployed when developers create Service resources. This pattern provides a clean separation between platform
126+
capabilities (defined by platform engineers) and application requirements (expressed by developers).
127+
128+
### Class Consumption
129+
130+
When developers create application resources like Service or WebApplication, they reference the appropriate Class,
131+
similar to how a PersistentVolumeClaim references a StorageClass. The platform uses the Class definition to provision
132+
the actual workload with the correct configuration, policies, and governance rules.
133+
134+
Environment-specific Bindings act as the instantiation of this claim in a specific environment. While the Service
135+
resource expresses the developer's intent and references a ServiceClass, the ServiceBinding represents the actual
136+
deployment of that service in a particular environment with environment-specific overrides.
137+
138+
This consumption model balances standardization with flexibility. Platform teams maintain control over critical
139+
configurations through Classes while developers express their requirements through simple resource definitions. The
140+
platform handles the complex mapping between developer intent and infrastructure reality.
141+
142+

0 commit comments

Comments
 (0)