edp-doc/likec4/model.c4

307 lines
6.3 KiB
Text
Raw Normal View History

model {
developer = actor 'Developer' {
description 'The regular user of the platform'
}
edp = system 'EDP' {
2025-03-31 14:26:46 +00:00
container ui 'Backstage' {
2025-04-01 07:59:19 +00:00
description 'Developer Portal'
2025-03-31 14:26:46 +00:00
component backstage 'Backstage' {
style {
icon tech:react
shape browser
}
}
2025-03-31 14:26:46 +00:00
component database 'Database' {
technology 'Postgresql'
icon tech:postgresql
style {
shape storage
}
}
backstage -> database 'reads/writes'
}
2025-03-31 14:26:46 +00:00
2025-04-01 10:59:05 +00:00
container forgejo 'Forgejo' {
description '
Fully managed DevOps Platfrom
offering capabilities like
code version controling
collaboration and ticketing
and security scanning
'
component forgejo 'Forgejo' {
technology 'Golang'
icon tech:go
}
2025-03-31 14:26:46 +00:00
component forgejoRunner 'CI Runner'{
technology 'Golang'
icon tech:go
style {
multiple true
}
}
2025-03-31 14:26:46 +00:00
forgejoRunner -> forgejo 'executes pipelines'
}
2025-03-31 14:26:46 +00:00
container argoCD 'ArgoCD' {
description 'GitOps Service'
component argocdServer 'ArgoCD Server'
component argocdAppController 'ApplicationController'
component argocdAppSetController 'ApplicationSeetController'
component argocdRedis 'Redis'
component argocdRepoServer 'Repo Server'
}
container keycloak 'Keycloak' {
description '
Single Sign On for all EDP products
'
component keycloak 'Keycloak' {
2025-03-31 14:26:46 +00:00
technology 'Java'
icon tech:java
}
2025-03-31 14:26:46 +00:00
2025-04-01 07:59:19 +00:00
component keycloakDB 'Database' {
technology 'Postgresql'
icon tech:postgresql
2025-03-31 14:26:46 +00:00
style {
shape storage
}
}
2025-04-01 07:59:19 +00:00
keycloak -> keycloakDB 'reads/writes'
}
container crossplane 'Crossplane' {
2025-04-01 07:59:19 +00:00
#internal
2025-03-31 14:26:46 +00:00
description 'Declarative management of ressources'
component crossplane 'Crossplane'
component crossplaneFunction 'Function Patch and Transform'
component crossplaneRbacManager 'RBAC Manager'
component providerArgoCD 'ArgoCD Provider'
component providerKind 'Kind Provider'
component providerShell 'Shell Provider'
}
2025-03-31 14:26:46 +00:00
container externalSecrets 'external-secrets' {
2025-04-01 07:59:19 +00:00
#internal
2025-03-31 14:26:46 +00:00
description 'Provider to access externally stored Kubernetes secrets'
2025-04-01 07:59:19 +00:00
component externalSecrets 'external-secrets controller'
component certController 'cert-controller'
component webhook 'webhook'
2025-03-31 14:26:46 +00:00
}
container minio 'Minio' {
description 'S3 compatible blob storage'
component minio 'S3 Blob Storage' {
technology 'Minio'
style {
shape storage
}
}
}
container velero 'Velero' {
2025-04-01 07:59:19 +00:00
#internal
2025-03-31 14:26:46 +00:00
description 'Backup Kubernetes resources'
component velero 'Velero'
2025-04-01 10:59:05 +00:00
velero -> minio.minio 'store backups'
}
2025-03-31 14:26:46 +00:00
container openbao 'OpenBao' {
description 'Secure secret storage'
component openbao 'Openbao' {
technology 'Openbao'
style {
shape storage
}
}
component agentInjector 'Agent Injector'
}
container monitoring 'Monitoring' {
description 'Observability system to monitor deployed components'
component alloy 'Alloy' {
description 'Open Telemetry Collector'
style {
2025-04-01 07:59:19 +00:00
icon tech:grafana
2025-03-31 14:26:46 +00:00
multiple true
}
}
container loki 'Loki' {
description 'Log aggregation system'
2025-04-01 07:59:19 +00:00
icon tech:grafana
2025-03-31 14:26:46 +00:00
component queryFrontend 'Query Frontend'
component distributor 'Distributor'
component gateway 'Gateway'
component ingestor 'Ingestor'
component querier 'Querier'
alloy -> distributor 'pushes logs'
}
2025-03-31 14:26:46 +00:00
}
container ingressNginx 'Ingress' {
2025-04-01 07:59:19 +00:00
#internal
2025-03-31 14:26:46 +00:00
description 'Ingress Controller for incoming http(s) traffic'
component ingressNginx 'ingress-nginx'{
technology 'Nginx'
icon tech:nginx
}
2025-03-31 14:26:46 +00:00
2025-04-01 07:59:19 +00:00
ingressNginx -> forgejo.forgejo 'https'
ingressNginx -> keycloak.keycloak 'https'
ingressNginx -> openbao.openbao 'https'
ingressNginx -> argoCD.argocdServer 'https'
ingressNginx -> ui.backstage 'https'
ingressNginx -> minio.minio 'https'
ingressNginx -> monitoring.alloy 'https'
ingressNginx -> monitoring.queryFrontend 'https'
2025-04-01 10:59:05 +00:00
ingressNginx -> testApp.fibonacci 'https'
2025-04-01 11:15:21 +00:00
ingressNginx -> mailhog.mailhog 'https'
2025-04-01 10:59:05 +00:00
}
container testApp 'Fibonacci' {
description 'Testapp to validate deployments'
2025-04-01 11:15:21 +00:00
component fibonacci 'Fibonacci' {
technology 'Golang'
icon tech:go
}
}
container mailhog 'Mailhog' {
#internal
description 'Web and API based SMTP testing'
component mailhog 'Mailhog' {
technology 'Golang'
icon tech:go
}
2025-03-31 14:26:46 +00:00
}
2025-04-01 12:38:42 +00:00
container spark 'Spark' {
description 'Allows running Spark applications on K8s'
component sparkoperator 'Spark Operator' {
technology 'Spark'
icon tech:spark
}
}
// UI requests data from the Backend
// ui -> backend 'fetches via HTTPS'
}
developer -> ui 'manages project'
developer -> forgejo 'manages code'
developer -> keycloak 'authenticates'
developer -> argoCD 'manages deployments'
}
views {
view overview {
title 'Landscape view'
include *
}
view edp of edp {
title 'Context view'
include *
2025-03-31 14:26:46 +00:00
exclude ingressNginx ->
2025-04-01 07:59:19 +00:00
exclude element.tag = #internal
style * {
opacity 25%
}
}
view keycloak of keycloak {
2025-03-31 14:26:46 +00:00
include
*,
ingressNginx ->
}
view forgejo of forgejo {
2025-03-31 14:26:46 +00:00
include
*,
ingressNginx ->
}
view crossplane of crossplane {
2025-03-31 14:26:46 +00:00
include
*,
ingressNginx ->
}
view externalSecrets of externalSecrets {
include
*,
ingressNginx ->
}
view velero of velero {
include
*,
ingressNginx ->
}
view minio of minio {
include
*,
ingressNginx ->
}
view monitoring of monitoring {
include
*,
ingressNginx ->,
loki.*
}
view ingressNginx of ingressNginx {
include *
}
2025-04-01 10:59:05 +00:00
view testapp of testApp {
include
*,
ingressNginx ->
}
2025-04-01 11:15:21 +00:00
view mailhog of mailhog {
include
*,
ingressNginx ->
}
2025-04-01 12:38:42 +00:00
view spark of spark {
include
*,
ingressNginx ->
}
}