diff --git a/content/en/docs/_index.md b/content/en/docs/_index.md index 9f7af5f..24d58f5 100644 --- a/content/en/docs/_index.md +++ b/content/en/docs/_index.md @@ -2,27 +2,31 @@ type: docs title: "Portefaix Documentation" linkTitle: "Home" -description: "Portefaix enables developers and the platform engineers that support them to build cloud-native applications" +description: "" weight: 1 no_list: true --- Welcome to the Portefaix documentation! Here you'll find everything you need to know about Portefaix, from getting started to advanced topics. -{{% alert color="primary" %}} + {{< cardpane >}} {{< card header="**🎓 Tutorials**" footer="[**View available tutorials →**]({{< ref tutorials >}})" >}} Visit the tutorials for guided learning paths to try out Portefaix and pick up the main concepts. {{< /card >}} +{{< /cardpane >}} + +{{< cardpane >}} {{< card header="**📘 How-to guides**" footer="[**Visit how-to guides →**]({{< ref guides >}})" >}} Check out the how-to guides for step-by-step instructions on how to use Portefaix and its features. {{< /card >}} {{< /cardpane >}} + {{< cardpane >}} {{< card header="**🧾 Reference**" footer="[**Visit reference material →**]({{< ref reference >}})" >}} Refer to detailed information on Portefaix resources, repositories, FAQs, and more. diff --git a/content/en/docs/guides/applications/argo-cd/_index.md b/content/en/docs/guides/applications/argo-cd/_index.md index cd97b20..5c0c777 100644 --- a/content/en/docs/guides/applications/argo-cd/_index.md +++ b/content/en/docs/guides/applications/argo-cd/_index.md @@ -27,7 +27,7 @@ To configure the Helm charts, we use YAML files : ### Argo-CD ```shell -❯ make argocd-bootstrap ENV= CLOUD= CHOICE=helm +❯ make bootstrap-argocd ENV= CLOUD= CHOICE=helm ``` ### Stacks diff --git a/content/en/docs/guides/applications/flux-cd/_index.md b/content/en/docs/guides/applications/flux-cd/_index.md index 4a83489..37288d1 100644 --- a/content/en/docs/guides/applications/flux-cd/_index.md +++ b/content/en/docs/guides/applications/flux-cd/_index.md @@ -31,7 +31,7 @@ Flux components are deployed for each cluster on `clusters///` : ### FluxCD ```shell -❯ make fluxcd-bootstrap ENV= CLOUD= BRANCH= +❯ make bootstrap-fluxcd ENV= CLOUD= BRANCH= ``` ### Stacks diff --git a/content/en/docs/guides/applications/gitops/_index.md b/content/en/docs/guides/applications/gitops/_index.md index d1744e9..a09aad6 100644 --- a/content/en/docs/guides/applications/gitops/_index.md +++ b/content/en/docs/guides/applications/gitops/_index.md @@ -8,11 +8,13 @@ aliases : ["/how-to/applications/"] categories: "HowTo" --- -[OpenGitops principles](https://opengitops.dev): +[OpenGitops](https://opengitops.dev) +OpenGitops Principles + + diff --git a/content/en/docs/guides/infrastructure/aws/overview.md b/content/en/docs/guides/infrastructure/aws/overview.md index e84d78b..d6f7dd6 100644 --- a/content/en/docs/guides/infrastructure/aws/overview.md +++ b/content/en/docs/guides/infrastructure/aws/overview.md @@ -1,7 +1,7 @@ --- type: docs title: "Overview" -description: "Running Portefaix on Amazon Web Services" +description: "Portefaix architecture on Amazon Web Services" weight: 10 categories: "Explanation" tags: ["AWS"] @@ -10,4 +10,3 @@ tags: ["AWS"] Portefaix components Portefaix components - diff --git a/content/en/docs/guides/infrastructure/azure/overview.md b/content/en/docs/guides/infrastructure/azure/overview.md index 5e58888..af34da2 100644 --- a/content/en/docs/guides/infrastructure/azure/overview.md +++ b/content/en/docs/guides/infrastructure/azure/overview.md @@ -1,7 +1,7 @@ --- type: docs title: "Overview" -description: "Running Portefaix on Microsoft Azure" +description: "Portefaix architecture on Microsoft Azure" weight: 10 categories: "Explanation" tags: ["Azure"] diff --git a/content/en/docs/guides/infrastructure/civo/overview.md b/content/en/docs/guides/infrastructure/civo/overview.md index 63ac0ae..0fd447c 100644 --- a/content/en/docs/guides/infrastructure/civo/overview.md +++ b/content/en/docs/guides/infrastructure/civo/overview.md @@ -1,7 +1,7 @@ --- type: docs title: "Overview" -description: "Running Portefaix on Civo" +description: "Portefaix architecture on Civo" weight: 10 categories: "Explanation" tags: ["Civo"] diff --git a/content/en/docs/guides/infrastructure/digitalocean/overview.md b/content/en/docs/guides/infrastructure/digitalocean/overview.md index de530fe..c83281e 100644 --- a/content/en/docs/guides/infrastructure/digitalocean/overview.md +++ b/content/en/docs/guides/infrastructure/digitalocean/overview.md @@ -1,7 +1,7 @@ --- type: docs title: "Overview" -description: "Running Portefaix on Digital Ocean" +description: "Portefaix architecture on Digital Ocean" weight: 10 categories: "Explanation" tags: ["Digital Ocean"] diff --git a/content/en/docs/guides/infrastructure/exoscale/overview.md b/content/en/docs/guides/infrastructure/exoscale/overview.md index a03dff5..08b5830 100644 --- a/content/en/docs/guides/infrastructure/exoscale/overview.md +++ b/content/en/docs/guides/infrastructure/exoscale/overview.md @@ -1,7 +1,7 @@ --- type: docs title: "Overview" -description: "Running Portefaix on Exoscale" +description: "Portefaix architecture on Exoscale" weight: 10 categories: "Explanation" tags: ["Exoscale"] diff --git a/content/en/docs/guides/infrastructure/gcp/overview.md b/content/en/docs/guides/infrastructure/gcp/overview.md index 98e4557..e776240 100644 --- a/content/en/docs/guides/infrastructure/gcp/overview.md +++ b/content/en/docs/guides/infrastructure/gcp/overview.md @@ -1,7 +1,7 @@ --- type: docs title: "Overview" -description: "Running Portefaix on Google Cloud Platform" +description: "Portefaix architecture on Google Cloud Platform" weight: 10 categories: "Explanation" tags: ["GCP"] diff --git a/content/en/docs/guides/infrastructure/homelab/_index.md b/content/en/docs/guides/infrastructure/homelab/_index.md index 9ec8cc7..6dc5fda 100644 --- a/content/en/docs/guides/infrastructure/homelab/_index.md +++ b/content/en/docs/guides/infrastructure/homelab/_index.md @@ -7,4 +7,6 @@ weight: 200 Portefaix components -Portefaix components \ No newline at end of file +Portefaix components + +Portefaix components \ No newline at end of file diff --git a/content/en/docs/guides/infrastructure/homelab/deploy.md b/content/en/docs/guides/infrastructure/homelab/deploy.md index 24dd2c2..9221fb5 100644 --- a/content/en/docs/guides/infrastructure/homelab/deploy.md +++ b/content/en/docs/guides/infrastructure/homelab/deploy.md @@ -53,36 +53,45 @@ For each node, add it to the cluster, then add a label: ```shell ❯ make -f hack/build/k3s.mk k3s-join ENV=homelab SERVER_IP=x.x.x.x AGENT_IP=x.x.x.x EXTERNAL_IP=x.x.x.x - -❯ kubectl label node node-role.kubernetes.io/worker= ``` -We add also these labels: +Authentication and authorization -* `portefaix.xyz/infra`, with values : `core` and `cheap` +```shell +❯ make kubernetes-credentials CLOUD=k3s ENV=homelab +``` -Check Kubernetes cluster: +Set labels: ```shell -❯ make -f hack/build/k3s.mk k3s-kube-credentials ENV=homelab +❯ kubectl label node node-role.kubernetes.io/worker=true ``` +We add also these labels: + +| Label | Description | +| ------------------------------------ | --------------------------------- | +| node-role.kubernetes.io/infra=true | For core components | +| node-role.kubernetes.io/lowcost=true | For pocs, small applications, ... | + The nodes are in a `NotReady` state, due to the Pod Networking CNI plugin is not available. [Cilium](https://cilium.io/) must be installed: ```shell -❯ make argocd-bootstrap ENV= CLOUD= CHOICE=cilium +❯ make bootstrap-crds ENV=homelab CLOUD=k3s +❯ make bootstrap-cilium ENV=homelab CLOUD=k3s ``` Then check nodes: ```shell ❯ kubectl get node -o wide -NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME -portefaix-4 Ready 24m v1.26.1+k3s1 192.168.0.234 100.87.6.37 Ubuntu 22.04.2 LTS 5.15.0-1024-raspi containerd://1.6.15-k3s1 -portefaix-3 Ready 29m v1.26.1+k3s1 192.168.0.252 100.86.135.11 Ubuntu 22.04.2 LTS 5.15.0-1024-raspi containerd://1.6.15-k3s1 -portefaix Ready control-plane,master 87m v1.26.1+k3s1 192.168.0.62 100.126.241.86 Ubuntu 22.04.2 LTS 5.15.0-60-generic containerd://1.6.15-k3s1 -portefaix-1 Ready 45m v1.26.1+k3s1 192.168.0.208 100.115.34.57 Ubuntu 22.04.2 LTS 5.15.0-1024-raspi containerd://1.6.15-k3s1 +NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME +portefaix Ready control-plane,etcd,master 3h37m v1.30.2+k3s1 192.168.0.61 100.79.205.64 Ubuntu 24.04 LTS 6.8.0-36-generic containerd://1.7.17-k3s1 +portefaix-1 NotReady lowcost,worker 155m v1.30.2+k3s1 192.168.0.208 100.115.34.57 Ubuntu 24.04 LTS 6.8.0-1005-raspi containerd://1.7.17-k3s1 +portefaix-2 Ready lowcost,worker 154m v1.30.2+k3s1 192.168.0.116 100.126.100.42 Ubuntu 24.04 LTS 6.8.0-1005-raspi containerd://1.7.17-k3s1 +portefaix-6 Ready infra,worker 3h21m v1.30.2+k3s1 192.168.0.233 100.111.218.32 Ubuntu 24.04 LTS 6.8.0-36-generic containerd://1.7.17-k3s1 +portefaix-7 Ready infra,worker 3h18m v1.30.2+k3s1 192.168.0.250 100.86.220.99 Ubuntu 24.04 LTS 6.8.0-36-generic containerd://1.7.17-k3s1 ``` and Cilium status: @@ -105,11 +114,6 @@ Containers: cilium Running: 4 hubble-relay Running: 1 hubble-ui Running: 1 Cluster Pods: 4/4 managed by Cilium -Image versions cilium quay.io/cilium/cilium:v1.13.0@sha256:6544a3441b086a2e09005d3e21d1a4afb216fae19c5a60b35793c8a9438f8f68: 4 - cilium-operator quay.io/cilium/operator-generic:v1.13.0@sha256:4b58d5b33e53378355f6e8ceb525ccf938b7b6f5384b35373f1f46787467ebf5: 1 - hubble-relay quay.io/cilium/hubble-relay:v1.13.0@sha256:bc00f086285d2d287dd662a319d3dbe90e57179515ce8649425916aecaa9ac3c: 1 - hubble-ui quay.io/cilium/hubble-ui:v0.10.0@sha256:118ad2fcfd07fabcae4dde35ec88d33564c9ca7abe520aa45b1eb13ba36c6e0a: 1 - hubble-ui quay.io/cilium/hubble-ui-backend:v0.10.0@sha256:cc5e2730b3be6f117b22176e25875f2308834ced7c3aa34fb598aa87a2c0a6a4: 1 ``` ## Cloudflare @@ -168,24 +172,6 @@ Creates the R2 buckets for Observability components: ❯ make terraform-apply SERVICE=terraform/k3s/observability ENV=homelab ``` -## Authentication and authorization - -### Configure kubectl - -```shell -❯ make kubernetes-credentials CLOUD=k3s ENV=homelab -``` - -```shell -❯ kubectl get nodes -NAME STATUS ROLES AGE VERSION -portefaix-1 Ready master 3h2m v1.18.17+k3s1 -portefaix-4 Ready 5m36s v1.18.17+k3s1 -portefaix-3 Ready 5m36s v1.18.17+k3s1 -portefaix-2 Ready 5m35s v1.18.17+k3s1 -``` - - ## Applications Next: [Gitops](/docs/gitops) \ No newline at end of file diff --git a/content/en/docs/guides/infrastructure/homelab/overview.md b/content/en/docs/guides/infrastructure/homelab/overview.md index 87b3516..f82a41e 100644 --- a/content/en/docs/guides/infrastructure/homelab/overview.md +++ b/content/en/docs/guides/infrastructure/homelab/overview.md @@ -1,7 +1,7 @@ --- type: docs title: "Overview" -description: "Running Portefaix on Homelab" +description: "Portefaix architecture on Homelab" weight: 10 categories: "Explanation" tags: ["Homelab"] diff --git a/content/en/docs/guides/infrastructure/ibmcloud/overview.md b/content/en/docs/guides/infrastructure/ibmcloud/overview.md index 230684f..145283d 100644 --- a/content/en/docs/guides/infrastructure/ibmcloud/overview.md +++ b/content/en/docs/guides/infrastructure/ibmcloud/overview.md @@ -1,7 +1,7 @@ --- type: docs title: "Install on IBM Cloud" -description: "Running Portefaix on IBM Cloud" +description: "Portefaix architecture on IBM Cloud" weight: 50 categories: "Explanation" tags: ["IBMCloud"] diff --git a/content/en/docs/guides/infrastructure/oci/overview.md b/content/en/docs/guides/infrastructure/oci/overview.md index 0f6f57e..b1f1204 100644 --- a/content/en/docs/guides/infrastructure/oci/overview.md +++ b/content/en/docs/guides/infrastructure/oci/overview.md @@ -1,7 +1,7 @@ --- type: docs title: "Overview" -description: "Running Portefaix on Orange Cloud Infrastructure" +description: "Portefaix architecture on Orange Cloud Infrastructure" weight: 10 categories: "Explanation" tags: ["OCI"] diff --git a/content/en/docs/guides/infrastructure/scaleway/overview.md b/content/en/docs/guides/infrastructure/scaleway/overview.md index b9a272b..c775e8b 100644 --- a/content/en/docs/guides/infrastructure/scaleway/overview.md +++ b/content/en/docs/guides/infrastructure/scaleway/overview.md @@ -1,7 +1,7 @@ --- type: docs title: "Overview" -description: "Running Portefaix on Scaleway" +description: "Portefaix architecture on Scaleway" weight: 10 categories: "Explanation" tags: ["Scaleway"] diff --git a/content/en/docs/reference/components/_index.md b/content/en/docs/reference/components/_index.md new file mode 100644 index 0000000..60944c1 --- /dev/null +++ b/content/en/docs/reference/components/_index.md @@ -0,0 +1,46 @@ +--- +type: docs +title: "Components" +linkTitle: "Components" +description: "The components used by Portefaix" +weight: 10 +--- + +### Infrastructure management + +- [Terraform](https://github.com/hashicorp/terraform): Bootstraps and manages the cloud provider infrastructure. +- [Crossplane](https://crossplane.io): Kubernetes-native infrastructure management. + +### Cluster management + +- [Argo CD](https://github.com/argoproj/argo-cd): Reconciles kubernetes clusters with this repository. +- [Kyverno](https://kyverno.io): Policy engine supporting validate, mutate, generate, and cleanup rules. +- [Renovate](https://github.com/renovatebot/renovate): Automatic updates for applications via pull requests. + +### Secrets + +- [External Secrets](https://external-secrets.io): Synchronizes secrets from Doppler into Kubernetes. +- [AKeyless](https://console.akeyless.io): A secrets management platform. + +### Networking + +- [Cilium](https://cilium.io): eBPF-based CNI & service mesh. +- [Cert Manager](https://cert-manager.io): Automatic Let's Encrypt certificates. + +### Security + +- [Falco](https://falco.org): The Cloud Native Runtime Security +- [Authentik](https://goauthentik.io): Identity Provider. +- [Trivy](https://aquasecurity.github.io/trivy): Kubernetes and container vulnerability scanner. +- [Tetragon](https://tetragon.io/): eBPF-based security observability and runtime enforcement. + +### Observability + +- [Grafana](https://grafana.com): Visualization platform. +- [Prometheus](https://prometheus.io): Monitoring system. +- [Loki](https://grafana.com/oss/loki/): Log aggregation system. +- [Tempo](https://grafana.com/oss/tempo/): High-scale distributed tracing backend +- [Mimir](https://grafana.com/oss/mimir/): Horizontally scalable TSDB for long-term storage for Prometheus +- [Alloy](https://grafana.com/oss/alloy/): The OpenTelemetry Distribution from Grafana + +### Storage \ No newline at end of file diff --git a/content/en/docs/reference/hub/_index.md b/content/en/docs/reference/hub/_index.md index 912b07a..a8976ab 100644 --- a/content/en/docs/reference/hub/_index.md +++ b/content/en/docs/reference/hub/_index.md @@ -3,7 +3,7 @@ type: docs title: "Hub" linkTitle: "Hub" description: "The Portefaix Hub for Helm charts" -weight: 10 +weight: 20 --- ## Portefaix Hub diff --git a/content/en/docs/reference/inspec/_index.md b/content/en/docs/reference/inspec/_index.md index f9410fc..362ccd0 100644 --- a/content/en/docs/reference/inspec/_index.md +++ b/content/en/docs/reference/inspec/_index.md @@ -3,7 +3,7 @@ type: docs title: "Inspec" linkTitle: "Inspec" description: "The Inspec profiles for Portefaix" -weight: 40 +weight: 90 --- ## GCP diff --git a/content/en/docs/reference/krm/_index.md b/content/en/docs/reference/krm/_index.md index 6b1c416..4362ad5 100644 --- a/content/en/docs/reference/krm/_index.md +++ b/content/en/docs/reference/krm/_index.md @@ -3,7 +3,7 @@ type: docs title: "KRM" linkTitle: "KRM" description: "The Kubernetes Resources Model deployed into Portefaix" -weight: 30 +weight: 40 --- ## Kubernetes Resources Model diff --git a/content/en/docs/reference/policies/_index.md b/content/en/docs/reference/policies/_index.md index e65d1f2..dd7895d 100644 --- a/content/en/docs/reference/policies/_index.md +++ b/content/en/docs/reference/policies/_index.md @@ -1,9 +1,9 @@ --- type: docs -title: "Hub" +title: "Policies" linkTitle: "Policies" description: "The Portefaix policies" -weight: 20 +weight: 30 --- [Portefaix Policies](https://github.com/portefaix/portefaix-policies) contains Kubernetes policies for [Kyverno](https://kyverno.io/) or [Open Policy Agent](https://www.openpolicyagent.org/). diff --git a/diagrams/d2/portefaix-platform.d2 b/diagrams/d2/portefaix-platform.d2 new file mode 100644 index 0000000..f1a600b --- /dev/null +++ b/diagrams/d2/portefaix-platform.d2 @@ -0,0 +1,69 @@ +grid-rows: 5 +style.fill: white + +classes: { + white square: { + label: "" + width: 120 + style: { + fill: white + stroke: cornflowerblue + stroke-width: 10 + } + } + block: { + style: { + text-transform: uppercase + font-color: white + fill: darkcyan + stroke: black + } + } +} + +flow1.class: white square +flow2.class: white square +flow3.class: white square +flow4.class: white square +flow5.class: white square +flow6.class: white square +flow7.class: white square +flow8.class: white square +flow9.class: white square + +dagger engine: { + width: 800 + class: block + style: { + fill: beige + stroke: darkcyan + font-color: blue + stroke-width: 8 + } +} + +any docker compatible runtime: { + width: 800 + class: block + style: { + fill: lightcyan + stroke: darkcyan + font-color: black + stroke-width: 8 + } + icon: https://icons.terrastruct.com/dev%2Fdocker.svg +} + +any ci: { + class: block + style: { + fill: gold + stroke: maroon + font-color: maroon + stroke-width: 8 + } +} +windows.class: block +linux.class: block +macos.class: block +kubernetes.class: block diff --git a/diagrams/d2/portefaix-stacks.d2 b/diagrams/d2/portefaix-stacks.d2 new file mode 100644 index 0000000..383ab7d --- /dev/null +++ b/diagrams/d2/portefaix-stacks.d2 @@ -0,0 +1,406 @@ +#!/usr/bin/env d2 + +# ===================================== # +# Portefaix / Stacks +# ===================================== # + +vars: { + d2-config: { + layout-engine: elk + } +} + +direction: down + +title: { + label: Portefaix / Stacks + near: top-center + shape: text + style.font-size: 40 + style.underline: true +} + +classes: { + github: { + label: Github + icon: https://icons.terrastruct.com/dev%2Fgithub.svg + shape: image + } + cloudflare: { + label: Cloudflare + icon: https://cf-icons.pages.dev/logo-cloud.svg + shape: image + } + auth0: { + label: Auth0 + icon: https://diagrams.mingrammer.com/img/resources/saas/identity/auth0.png + shape: image + } + slack: { + label: Slack + icon: https://diagrams.mingrammer.com/img/resources/saas/chat/slack.png + shape: image + } + + cicd: { + label: CI/CD + icon: https://diagrams.mingrammer.com/img/resources/onprem/ci/github-actions.png + shape: image + } + artifacthub: { + label: ArtifactHub + icon: https://raw.githubusercontent.com/cncf/artwork/main/projects/artifacthub/icon/color/artifacthub-icon-color.svg + shape: image + } + + helm: { + label: Helm + icon: https://raw.githubusercontent.com/cncf/artwork/main/projects/helm/icon/color/helm-icon-color.svg + shape: image + } + docker: { + label: Docker + icon: https://icons.terrastruct.com/dev%2Fdocker.svg + shape: image + } + + // Networking + cilium { + label: Cilium + icon: https://raw.githubusercontent.com/cncf/artwork/main/projects/cilium/icon/color/cilium_icon-color.svg + shape: image + } + coredns { + label: CoreDNS + icon: https://raw.githubusercontent.com/cncf/artwork/main/projects/coredns/icon/color/coredns-icon-color.svg + shape: image + } + externaldns: { + label: External DNS + icon: https://github.com/kubernetes-sigs/external-dns/raw/master/docs/img/external-dns.png + shape: image + } + nginx: { + label: Nginx + icon: https://www.svgrepo.com/show/373924/nginx.svg + shape: image + } + + // Gitops + argocd: { + label: Argo-CD + icon: https://raw.githubusercontent.com/cncf/artwork/main/projects/argo/icon/color/argo-icon-color.svg + shape: image + } + argorollouts: { + label: Argo-Rollout + icon: https://argoproj.github.io/static/3748e3a7881fe3b037f2401b65943dc0/a2f3f/rollouts.avif + shape: image + } + argoworkflows: { + label: Argo-Workflows + icon: https://argoproj.github.io/static/6e944804f836bce176feffed44a8bf7e/a2f3f/workflows.avif + shape: image + } + argoevents: { + label: Argo-Events + icon: https://argoproj.github.io/static/5f6b445ccaaac8b3f883e81fe96107ef/a2f3f/events.avif + shape: image + } + + // Observability + opentelemetry: { + label: OpenTelemetry + icon: https://raw.githubusercontent.com/cncf/artwork/main/projects/opentelemetry/icon/color/opentelemetry-icon-color.svg + shape: image + } + alloy: { + label: Grafana Alloy + icon: https://raw.githubusercontent.com/grafana/alloy/main/docs/sources/assets/alloy_icon_orange.svg + shape: image + } + grafana: { + label: Grafana + icon: https://diagrams.mingrammer.com/img/resources/onprem/monitoring/grafana.png + shape: image + } + prometheus: { + label: Prometheus + icon: https://raw.githubusercontent.com/cncf/artwork/main/projects/prometheus/icon/color/prometheus-icon-color.svg + shape: image + } + prometheusoperator: { + label: Prometheus Operator + icon: https://diagrams.mingrammer.com/img/resources/onprem/monitoring/prometheus-operator.png + shape: image + } + loki: { + label: Loki + icon: https://grafana.com/static/img/menu/loki.svg + shape: image + } + tempo: { + label: Tempo + icon: https://grafana.com/static/img/menu/grafana-tempo.svg + shape: image + } + mimir: { + label: Mimir + icon: https://grafana.com/static/img/logos/logo-mimir.svg + shape: image + } + pyroscope: { + label: Pyroscope + icon: https://grafana.com/static/img/pyroscope-logo.svg + shape: image + } + + // Identity + dex: { + label: Dex + icon: https://diagrams.mingrammer.com/img/resources/onprem/identity/dex.png + shape: image + } + + // Security + falco { + label: Falco + icon: https://raw.githubusercontent.com/cncf/artwork/main/projects/falco/icon/color/falco-icon-color.svg + shape: image + } + trivy: { + label: Trivy + icon: https://diagrams.mingrammer.com/img/resources/onprem/security/trivy.png + shape: image + } + kyverno: { + label: Kyverno + icon: https://raw.githubusercontent.com/cncf/artwork/main/projects/kyverno/icon/color/kyverno-icon-color.svg + shape: image + } + eso: { + label: External Secret Operator + icon: https://raw.githubusercontent.com/cncf/artwork/main/projects/external-secrets-operator/icon/color/eso-icon-color.svg + shape: image + } + + // System + keda: { + label: Keda + icon: https://raw.githubusercontent.com/cncf/artwork/main/projects/keda/icon/color/keda-icon-color.svg + shape: image + } + certmanager: { + label: Cert-Manager + icon: https://raw.githubusercontent.com/cncf/artwork/main/projects/cert-manager/icon/color/cert-manager-icon-color.svg + shape: image + } + keptn: { + label: Keptn + icon: https://raw.githubusercontent.com/cncf/artwork/main/projects/keptn/icon/color/keptn-icon-color.svg + shape: image + } + + // chaos + litmus: { + label: Litmus Chaos + icon: https://raw.githubusercontent.com/cncf/artwork/main/projects/litmus/icon/color/litmus-icon-color.svg + shape: image + } + + // messaging + nats: { + label: Nats + icon: https://raw.githubusercontent.com/cncf/artwork/main/projects/nats/icon/color/nats-icon-color.svg + shape: image + } + + // tools + openfeature: { + label: OpenFeature + icon: https://raw.githubusercontent.com/cncf/artwork/main/projects/openfeature/icon/black/openfeature-icon-black.svg + shape: image + } + descheduler: { + label: Descheduler + icon: https://raw.githubusercontent.com/kubernetes-sigs/descheduler/master/assets/logo/descheduler-stacked-color.png + shape: image + } + kured: { + label: Kured + icon: https://raw.githubusercontent.com/cncf/artwork/main/projects/kured/icon/color/kured-icon-color.svg + shape: image + } + k8sgpt: { + label: K8sgpt + icon: https://raw.githubusercontent.com/cncf/artwork/main/projects/k8sgpt/icon/color/k8sgpt-icon-color.svg + shape: image + } + + // Kubernetes + k3s: { + label: K3s + icon: https://diagrams.mingrammer.com/img/resources/onprem/container/k3s.png + shape: image + } + k8s: { + label: Kubernetes + icon: https://icons.terrastruct.com/azure%2F_Companies%2FKubernetes.svg + shape: image + } + + # container-registry: { + # label: Container Registry + # # square corners + # # icon: https://icons.terrastruct.com/aws%2FCompute%2FAmazon-EC2-Container-Registry.svg + # # round corners + # # icon: https://diagrams.mingrammer.com/img/resources/aws/compute/ec2-container-registry.png + # icon: https://icons.terrastruct.com/gcp%2FProducts%20and%20services%2FDeveloper%20Tools%2FContainer%20Registry.svg + # shape: image + # } + + dash: { + style.stroke-dash: 5 + style.animated: true + } +} + +devops.class: devops + +github.class: github + +# cloudflare.class: cloudflare +# auth0.class: auth0 +slack.class: slack + +artifacthub.class: artifacthub + +cicd.class: cicd +docker.class: docker + +devops -> github: push code {class: dash} + +github -> cicd: trigger {class: dash} + +# cicd -> github: git commit updated\nk8s image version {class: dash} +cicd -> docker: build {class: dash} +artifacthub -> github + +slack -> homelab.k3s.monitoring.alertmanager + +cloudflarer2.class: cloudflare +cloudflarer2.label: Cloudflare R2 +cloudflarer2 <- homelab.k3s.monitoring.mimir +cloudflarer2 <- homelab.k3s.logging.loki +cloudflarer2 <- homelab.k3s.tracing.tempo + +homelab: Homelab { + k3s: k3s { + k3s.class: k3s + + gitops: Gitops { + argocd.class: argocd + argorollouts.class: argorollouts + argoworkflows.class: argoworkflows + argoevents.class: argoevents + dex.class: dex + + # helm.class: helm + + _._._.github -> argocd: git pull updates {class: dash} + argocd -> dex + argorollouts -> dex + argoworkflows -> dex + argoevents -> _.messaging.nats + + # argocd -> helm {class: dash} + # helm -> _._._.artifacthub {class: dash} + } + + kubesystem: Kube-System { + cilium.class: cilium + coredns.class: coredns + } + + otel: OpenTelemetry { + opentelemetry.class: opentelemetry + opentelemetry.label: OpenTelemetry Apps + alloy.class: alloy + + opentelemetry -> alloy + alloy -> _.monitoring.mimir {class: dash} + alloy -> _.logging.loki {class: dash} + alloy -> _.tracing.tempo {class: dash} + alloy -> _.profiling.pyroscope {class: dash} + } + + monitoring: Monitoring { + prometheus.class: prometheus + prometheusoperator.class: prometheusoperator + alertmanager.class: prometheus + alertmanager.label: Alertmanager + promexporters.class: k8s + promexporters.label: Prometheus Exporter(s) + mimir.class: mimir + + prometheusoperator -> prometheus + prometheus -> promexporters + # alertmanager -> _._._.slack + } + + logging: Logging { + loki.class: loki + } + + tracing: Tracing { + tempo.class: tempo + } + + profiling: Profiling { + pyroscope.class: pyroscope + } + + observability: Observability { + grafana.class: grafana + + grafana -> _.monitoring.prometheus + grafana -> _.logging.loki + grafana -> _.tracing.tempo + grafana -> _.profiling.pyroscope + } + + security: Security { + falco.class: falco + kyverno.class: kyverno + eso.class: eso + } + + system: System { + keda.class: keda + keptn.class: keptn + certmanager.class: certmanager + kured.class: kured + descheduler.class: descheduler + } + + networking: Networking { + externaldns.class: externaldns + nginx.class: nginx + cloudflaretunnel.class: cloudflare + cloudflaretunnel.label: Cloudflare Tunnel + } + + messaging: Messaging { + nats.class: nats + } + + identity: Identity { + dex.class: dex + } + + tooling: Tooling { + openfeature.class: openfeature + k8sgpt.class: k8sgpt + } + } +} diff --git a/diagrams/observability.svg b/diagrams/observability.svg new file mode 100644 index 0000000..32e12c2 --- /dev/null +++ b/diagrams/observability.svg @@ -0,0 +1,851 @@ +Observability stackPrometheus OperatorPrometheusGragana Agent MetricsApplication MetricsMimirGragana Agent LogsLokiGragana Agent TracesTempoGrafana + + + + + + + + + + + + + diff --git a/diagrams/portefaix-homelab.drawio b/diagrams/portefaix-homelab.drawio index 4f7ed9b..b139e9f 100644 --- a/diagrams/portefaix-homelab.drawio +++ b/diagrams/portefaix-homelab.drawio @@ -1,94 +1,89 @@ - + - + - + - - + + - - + + - - + + - - + + - - - - - - - + + - - - - - - - + + - + + + + + + + + + + - - + - - - - + - - + + - - + + - - + + - - + + - - + + - + - + @@ -100,58 +95,50 @@ - + + + + + + + + + - + - + - - - - - - - - - - + - - + + + + + + + - + - - + + - - - - - - - - - - - - - + - + @@ -160,22 +147,16 @@ - + - - - - + - - + + - - - - - + + @@ -193,11 +174,11 @@ - + - + @@ -220,6 +201,7 @@ + @@ -236,66 +218,53 @@ - - - - + - + + - + - - + + + - - + + - - + + - - - - - - - - - - - - - + - + - + @@ -306,36 +275,40 @@ - + - + + - + - + + - + - + + - + - + + - + @@ -358,83 +331,150 @@ - + + + + + + + + - - - - + + - - + + + + + + + - - + + - - + + + + + + + + - - + + + + + + + + - + + - - + - - + + + + + + + + - - + + - - + + + + + + + - - + + - - + + - - + + - - + + + + + + + + + + + + + + - - + + - - + + - - + + - - + + - - + + + + + + + + + + + + + + + + - - + + + + + + - - + + + + + + - - + + - - + + diff --git a/diagrams/portefaix-stacks.png b/diagrams/portefaix-stacks.png new file mode 100644 index 0000000..2231446 Binary files /dev/null and b/diagrams/portefaix-stacks.png differ diff --git a/diagrams/portefaix-stacks.svg b/diagrams/portefaix-stacks.svg new file mode 100644 index 0000000..3ae1d9c --- /dev/null +++ b/diagrams/portefaix-stacks.svg @@ -0,0 +1,915 @@ +Portefaix / StacksdevopsGithubSlackArtifactHubCI/CDDockerHomelabCloudflare R2k3sMonitoringLoggingTracingK3sGitopsMessagingKube-SystemOpenTelemetryProfilingObservabilitySecuritySystemNetworkingIdentityToolingAlertmanagerMimirLokiTempoArgo-CDArgo-RolloutArgo-WorkflowsArgo-EventsDexNatsCiliumCoreDNSOpenTelemetry AppsGrafana AlloyPyroscopePrometheusPrometheus OperatorPrometheus Exporter(s)GrafanaFalcoKyvernoExternal Secret OperatorKedaKeptnCert-ManagerKuredDeschedulerExternal DNSNginxCloudflare TunnelDexOpenFeatureK8sgpt push codetriggerbuild git pull updates + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/static/img/homelab/portefaix-stacks.svg b/static/img/homelab/portefaix-stacks.svg new file mode 100644 index 0000000..3ae1d9c --- /dev/null +++ b/static/img/homelab/portefaix-stacks.svg @@ -0,0 +1,915 @@ +Portefaix / StacksdevopsGithubSlackArtifactHubCI/CDDockerHomelabCloudflare R2k3sMonitoringLoggingTracingK3sGitopsMessagingKube-SystemOpenTelemetryProfilingObservabilitySecuritySystemNetworkingIdentityToolingAlertmanagerMimirLokiTempoArgo-CDArgo-RolloutArgo-WorkflowsArgo-EventsDexNatsCiliumCoreDNSOpenTelemetry AppsGrafana AlloyPyroscopePrometheusPrometheus OperatorPrometheus Exporter(s)GrafanaFalcoKyvernoExternal Secret OperatorKedaKeptnCert-ManagerKuredDeschedulerExternal DNSNginxCloudflare TunnelDexOpenFeatureK8sgpt push codetriggerbuild git pull updates + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +