diff --git a/content/en/docs/platform-components/_index.md b/content/en/docs/platform-components/_index.md index ea4caa4..ed13961 100644 --- a/content/en/docs/platform-components/_index.md +++ b/content/en/docs/platform-components/_index.md @@ -1,5 +1,4 @@ +++ -archetype = "chapter" title = "Platform Components" weight = 3 [params] @@ -7,3 +6,33 @@ weight = 3 date = '2024-07-30' +++ + +## CNCF + +> [Here are capability domains to consider when building platforms for cloud-native computing](https://tag-app-delivery.cncf.io/whitepapers/platforms/#capabilities-of-platforms): + +* Web portals for observing and provisioning products and capabilities +* APIs (and CLIs) for automatically provisioning products and capabilities +* “Golden path” templates and docs enabling optimal use of capabilities in products +* Automation for building and testing services and products +* Automation for delivering and verifying services and products +* Development environments such as hosted IDEs and remote connection tools +* Observability for services and products using instrumentation and dashboards, including observation of functionality, performance and costs +* Infrastructure services including compute runtimes, programmable networks, and block and volume storage +* Data services including databases, caches, and object stores +* Messaging and event services including brokers, queues, and event fabrics +* Identity and secret management services such as service and user identity and authorization, certificate and key issuance, and static secret storage +* Security services including static analysis of code and artifacts, runtime analysis, and policy enforcement +* Artifact storage including storage of container image and language-specific packages, custom binaries and libraries, and source code + +## IDP + +> [An Internal Developer Platform (IDP) should be built to cover 5 Core Components:](https://internaldeveloperplatform.org/core-components/) + +| Core Component | Short Description | +| ---- | --- | +| Application Configuration Management | Manage application configuration in a dynamic, scalable and reliable way. | +| Infrastructure Orchestration | Orchestrate your infrastructure in a dynamic and intelligent way depending on the context. | +| Environment Management | Enable developers to create new and fully provisioned environments whenever needed. | +| Deployment Management | Implement a delivery pipeline for Continuous Delivery or even Continuous Deployment (CD). | +| Role-Based Access Control | Manage who can do what in a scalable way. | \ No newline at end of file diff --git a/content/en/docs/platform-components/developer-portals/_index.md b/content/en/docs/platform-components/developer-portals/_index.md index dba7c4a..5ac588f 100644 --- a/content/en/docs/platform-components/developer-portals/_index.md +++ b/content/en/docs/platform-components/developer-portals/_index.md @@ -7,12 +7,27 @@ weight = 1 date = '2024-07-30' +++ -* Backstage -* Port +* Backstage (siehe auch https://nl.devoteam.com/expert-view/project-unox/) +* [Port](https://www.getport.io/) * Cortex * Humanitec +* [OpsLevel](https://docs.opslevel.com/docs/introducing-opslevel#what-is-opslevel) +* https://www.configure8.io/ * ... tbc ... +### Port's Comparison vs. Backstage + +https://www.getport.io/compare/backstage-vs-port + +### Cortex's Comparison vs. Backstage, Port, OpsLevel + +* https://www.cortex.io/compare + +### Service Catalogue + +* https://humanitec.com/blog/service-catalogs-and-internal-developer-platforms +* https://dzone.com/articles/the-differences-between-a-service-catalog-internal + ## Links * [port-vs-backstage-choosing-your-internal-developer-portal](https://medium.com/@vaibhavgupta0702/port-vs-backstage-choosing-your-internal-developer-portal-71c6a6acd979) diff --git a/content/en/docs/platform-engineering/_index.md b/content/en/docs/platform-engineering/_index.md index 25bf417..ec8ba79 100644 --- a/content/en/docs/platform-engineering/_index.md +++ b/content/en/docs/platform-engineering/_index.md @@ -1,5 +1,4 @@ +++ -archetype = "chapter" title = "Platform Engineering" weight = 1 [params] @@ -13,9 +12,9 @@ IPCEI-CIS Developer Framework is part of a cloud native technology stack. To des In CNCF the discipline of building stacks to enhance the developer experience is called 'Platform Engineering' -## [CNCF Platforms White Paper](https://tag-app-delivery.cncf.io/whitepapers/platforms/) +## CNCF Platforms White Paper -CNVF first asks why we need platform engineering: +[CNCF first asks](https://tag-app-delivery.cncf.io/whitepapers/platforms/) why we need platform engineering: > The desire to refocus delivery teams on their core focus and reduce duplication of effort across the organisation has motivated enterprises to implement platforms for cloud-native computing. By investing in platforms, enterprises can: > * Reduce the cognitive load on product teams and thereby accelerate product development and delivery @@ -24,9 +23,9 @@ CNVF first asks why we need platform engineering: > * Reduce risk of security, regulatory and functional issues in products and services by governing platform capabilities and the users, tools and processes surrounding them > * Enable cost-effective and productive use of services from public clouds and other managed offerings by enabling delegation of implementations to those providers while maintaining control over user experience -## [platformengineering.org's Definition of Platform Engineering](https://platformengineering.org/blog/what-is-platform-engineering) +## `platformengineering.org`'s Definition of Platform Engineering -> Platform engineering is the discipline of designing and building toolchains and workflows that enable self-service capabilities for software engineering organizations in the cloud-native era. Platform engineers provide an integrated product most often referred to as an “Internal Developer Platform” covering the operational necessities of the entire lifecycle of an application. +> [Platform engineering is the discipline](https://platformengineering.org/blog/what-is-platform-engineering) of designing and building toolchains and workflows that enable self-service capabilities for software engineering organizations in the cloud-native era. Platform engineers provide an integrated product most often referred to as an “Internal Developer Platform” covering the operational necessities of the entire lifecycle of an application. ## Reference Architecture aka 'Even more wording': Internal Developer Platform vs. Developer Portal vs. Platform @@ -66,4 +65,9 @@ The amount of available IDPs as product is rapidly growing. * [how-to-fail-at-platform-engineering](https://www.cncf.io/blog/2024/03/08/how-to-fail-at-platform-engineering/) * [8-real-world-reasons-to-adopt-platform-engineering](https://thenewstack.io/8-real-world-reasons-to-adopt-platform-engineering/) * [7-core-elements-of-an-internal-developer-platform](https://thenewstack.io/7-core-elements-of-an-internal-developer-platform/) -* [internal-developer-platform-vs-internal-developer-portal](https://www.getport.io/blog/internal-developer-platform-vs-internal-developer-portal) \ No newline at end of file +* [internal-developer-platform-vs-internal-developer-portal](https://www.getport.io/blog/internal-developer-platform-vs-internal-developer-portal) + +## Platform 'Initiatives' aka Use Cases + +Cortex is [talking about Use Cases (aka Initiatives):](https://www.youtube.com/watch?v=LrEC-fkBbQo) (or https://www.brighttalk.com/webcast/20257/601901) +![alt text](cortex-use-cases.png) \ No newline at end of file diff --git a/content/en/docs/platform-engineering/cortex-use-cases.png b/content/en/docs/platform-engineering/cortex-use-cases.png new file mode 100644 index 0000000..9acedaa Binary files /dev/null and b/content/en/docs/platform-engineering/cortex-use-cases.png differ diff --git a/content/en/docs/platforms/CNOE/_index.md b/content/en/docs/platforms/CNOE/_index.md new file mode 100644 index 0000000..903f56f --- /dev/null +++ b/content/en/docs/platforms/CNOE/_index.md @@ -0,0 +1,157 @@ ++++ +title = "CNOE" +weight = 4 ++++ + + +* https://cnoe.io/docs/intro + +> The goal for the CNOE framework is to bring together a cohort of enterprises operating at the same scale so that they can navigate their operational technology decisions together, de-risk their tooling bets, coordinate contribution, and offer guidance to large enterprises on which CNCF technologies to use together to achieve the best cloud efficiencies. + +### Aussprache + +* Englisch Kuh.noo, +* also 'Kanu' im Deutschen + + +## Architecture + +![kuhnoo](./cnoe.png) + +## Run the CNOEs reference implementation + +See https://cnoe.io/docs/reference-implementation/integrations/reference-impl: + +```bash +# in a local terminal with docker and kind +idpbuilder create --use-path-routing --log-level debug --package-dir https://github.com/cnoe-io/stacks//ref-implementation +``` +### Output + +```bash +time=2024-08-05T14:48:33.348+02:00 level=INFO msg="Creating kind cluster" logger=setup +time=2024-08-05T14:48:33.371+02:00 level=INFO msg="Runtime detected" logger=setup provider=docker +########################### Our kind config ############################ +# Kind kubernetes release images https://github.com/kubernetes-sigs/kind/releases +kind: Cluster +apiVersion: kind.x-k8s.io/v1alpha4 +nodes: +- role: control-plane + image: "kindest/node:v1.29.2" + kubeadmConfigPatches: + - | + kind: InitConfiguration + nodeRegistration: + kubeletExtraArgs: + node-labels: "ingress-ready=true" + extraPortMappings: + - containerPort: 443 + hostPort: 8443 + protocol: TCP + +containerdConfigPatches: +- |- + [plugins."io.containerd.grpc.v1.cri".registry.mirrors."gitea.cnoe.localtest.me:8443"] + endpoint = ["https://gitea.cnoe.localtest.me"] + [plugins."io.containerd.grpc.v1.cri".registry.configs."gitea.cnoe.localtest.me".tls] + insecure_skip_verify = true + +######################### config end ############################ +time=2024-08-05T14:48:33.394+02:00 level=INFO msg="Creating kind cluster" logger=setup cluster=localdev +time=2024-08-05T14:48:53.680+02:00 level=INFO msg="Done creating cluster" logger=setup cluster=localdev +time=2024-08-05T14:48:53.905+02:00 level=DEBUG+3 msg="Getting Kube config" logger=setup +time=2024-08-05T14:48:53.908+02:00 level=DEBUG+3 msg="Getting Kube client" logger=setup +time=2024-08-05T14:48:53.908+02:00 level=INFO msg="Adding CRDs to the cluster" logger=setup +time=2024-08-05T14:48:53.948+02:00 level=DEBUG+3 msg="crd not yet established, waiting." "crd name"=custompackages.idpbuilder.cnoe.io +time=2024-08-05T14:48:53.954+02:00 level=DEBUG+3 msg="crd not yet established, waiting." "crd name"=custompackages.idpbuilder.cnoe.io +time=2024-08-05T14:48:53.957+02:00 level=DEBUG+3 msg="crd not yet established, waiting." "crd name"=custompackages.idpbuilder.cnoe.io +time=2024-08-05T14:48:53.981+02:00 level=DEBUG+3 msg="crd not yet established, waiting." "crd name"=gitrepositories.idpbuilder.cnoe.io +time=2024-08-05T14:48:53.985+02:00 level=DEBUG+3 msg="crd not yet established, waiting." "crd name"=gitrepositories.idpbuilder.cnoe.io +time=2024-08-05T14:48:54.734+02:00 level=DEBUG+3 msg="Creating controller manager" logger=setup +time=2024-08-05T14:48:54.737+02:00 level=DEBUG+3 msg="Created temp directory for cloning repositories" logger=setup dir=/tmp/idpbuilder-localdev-2865684949 +time=2024-08-05T14:48:54.737+02:00 level=INFO msg="Setting up CoreDNS" logger=setup +time=2024-08-05T14:48:54.798+02:00 level=INFO msg="Setting up TLS certificate" logger=setup +time=2024-08-05T14:48:54.811+02:00 level=DEBUG+3 msg="Creating/getting certificate" logger=setup host=cnoe.localtest.me sans="[cnoe.localtest.me *.cnoe.localtest.me]" +time=2024-08-05T14:48:54.825+02:00 level=DEBUG+3 msg="Creating secret for certificate" logger=setup host=cnoe.localtest.me +time=2024-08-05T14:48:54.832+02:00 level=DEBUG+3 msg="Running controllers" logger=setup +time=2024-08-05T14:48:54.833+02:00 level=DEBUG+3 msg="starting manager" +time=2024-08-05T14:48:54.833+02:00 level=INFO msg="Creating localbuild resource" logger=setup +time=2024-08-05T14:48:54.834+02:00 level=INFO msg="Starting EventSource" controller=custompackage controllerGroup=idpbuilder.cnoe.io controllerKind=CustomPackage source="kind source: *v1alpha1.CustomPackage" +time=2024-08-05T14:48:54.834+02:00 level=INFO msg="Starting EventSource" controller=gitrepository controllerGroup=idpbuilder.cnoe.io controllerKind=GitRepository source="kind source: *v1alpha1.GitRepository" +time=2024-08-05T14:48:54.834+02:00 level=INFO msg="Starting Controller" controller=custompackage controllerGroup=idpbuilder.cnoe.io controllerKind=CustomPackage +time=2024-08-05T14:48:54.834+02:00 level=INFO msg="Starting Controller" controller=gitrepository controllerGroup=idpbuilder.cnoe.io controllerKind=GitRepository +time=2024-08-05T14:48:54.834+02:00 level=INFO msg="Starting EventSource" controller=localbuild controllerGroup=idpbuilder.cnoe.io controllerKind=Localbuild source="kind source: *v1alpha1.Localbuild" +time=2024-08-05T14:48:54.834+02:00 level=INFO msg="Starting Controller" controller=localbuild controllerGroup=idpbuilder.cnoe.io controllerKind=Localbuild +time=2024-08-05T14:48:54.937+02:00 level=INFO msg="Starting workers" controller=gitrepository controllerGroup=idpbuilder.cnoe.io controllerKind=GitRepository "worker count"=1 +time=2024-08-05T14:48:54.937+02:00 level=INFO msg="Starting workers" controller=custompackage controllerGroup=idpbuilder.cnoe.io controllerKind=CustomPackage "worker count"=1 +time=2024-08-05T14:48:54.937+02:00 level=INFO msg="Starting workers" controller=localbuild controllerGroup=idpbuilder.cnoe.io controllerKind=Localbuild "worker count"=1 +time=2024-08-05T14:48:56.863+02:00 level=DEBUG+3 msg=Reconciling controller=localbuild controllerGroup=idpbuilder.cnoe.io controllerKind=Localbuild Localbuild.name=localdev namespace="" name=localdev reconcileID=cc0e5b9d-4952-4fd1-9d62-6d9821f180be resource=/localdev +time=2024-08-05T14:48:56.863+02:00 level=DEBUG+3 msg="Create or update namespace" controller=localbuild controllerGroup=idpbuilder.cnoe.io controllerKind=Localbuild Localbuild.name=localdev namespace="" name=localdev reconcileID=cc0e5b9d-4952-4fd1-9d62-6d9821f180be resource="&Namespace{ObjectMeta:{idpbuilder-localdev 0 0001-01-01 00:00:00 +0000 UTC map[] map[] [] [] []},Spec:NamespaceSpec{Finalizers:[],},Status:NamespaceStatus{Phase:,Conditions:[]NamespaceCondition{},},}" +time=2024-08-05T14:48:56.983+02:00 level=DEBUG+3 msg="installing core packages" controller=localbuild controllerGroup=idpbuilder.cnoe.io controllerKind=Localbuild Localbuild.name=localdev namespace="" name=localdev reconcileID=cc0e5b9d-4952-4fd1-9d62-6d9821f180be +time=2024-08-05T14: + +... + +time=2024-08-05T14:51:04.166+02:00 level=INFO msg="Stopping and waiting for webhooks" +time=2024-08-05T14:51:04.166+02:00 level=INFO msg="Stopping and waiting for HTTP servers" +time=2024-08-05T14:51:04.166+02:00 level=INFO msg="Wait completed, proceeding to shutdown the manager" + +########################### Finished Creating IDP Successfully! ############################ + + +Can Access ArgoCD at https://cnoe.localtest.me:8443/argocd +Username: admin +Password can be retrieved by running: idpbuilder get secrets -p argocd +``` + +## Outcome + +Nach ca. 10 minuten sind alle applications ausgerollt (am längsten dauert Backstage): + +![alt text](local-argocd.png) + +```bash +stl@ubuntu-vpn:~$ kubectl get applications -A +NAMESPACE NAME SYNC STATUS HEALTH STATUS +argocd argo-workflows Synced Healthy +argocd argocd Synced Healthy +argocd backstage Synced Healthy +argocd backstage-templates Synced Healthy +argocd coredns Synced Healthy +argocd external-secrets Synced Healthy +argocd gitea Synced Healthy +argocd keycloak Synced Healthy +argocd metric-server Synced Healthy +argocd nginx Synced Healthy +argocd spark-operator Synced Healthy +stl@ubuntu-vpn:~$ idpbuilder get secrets +--------------------------- +Name: argocd-initial-admin-secret +Namespace: argocd +Data: + password : sPMdWiy0y0jhhveW + username : admin +--------------------------- +Name: gitea-credential +Namespace: gitea +Data: + password : |iJ+8gG,(Jj?cc*G>%(i'OA7@(9ya3xTNLB{9k'G + username : giteaAdmin +--------------------------- +Name: keycloak-config +Namespace: keycloak +Data: + KC_DB_PASSWORD : ES-rOE6MXs09r+fAdXJOvaZJ5I-+nZ+hj7zF + KC_DB_USERNAME : keycloak + KEYCLOAK_ADMIN_PASSWORD : BBeMUUK1CdmhKWxZxDDa1c5A+/Z-dE/7UD4/ + POSTGRES_DB : keycloak + POSTGRES_PASSWORD : ES-rOE6MXs09r+fAdXJOvaZJ5I-+nZ+hj7zF + POSTGRES_USER : keycloak + USER_PASSWORD : RwCHPvPVMu+fQM4L6W/q-Wq79MMP+3CN-Jeo +``` + +### login to backstage + +login geht mit den Creds, siehe oben: + +![alt text](local-backstage.png) diff --git a/content/en/docs/platforms/cnoe.png b/content/en/docs/platforms/CNOE/cnoe.png similarity index 100% rename from content/en/docs/platforms/cnoe.png rename to content/en/docs/platforms/CNOE/cnoe.png diff --git a/content/en/docs/platforms/CNOE/local-argocd.png b/content/en/docs/platforms/CNOE/local-argocd.png new file mode 100644 index 0000000..1714376 Binary files /dev/null and b/content/en/docs/platforms/CNOE/local-argocd.png differ diff --git a/content/en/docs/platforms/CNOE/local-backstage.png b/content/en/docs/platforms/CNOE/local-backstage.png new file mode 100644 index 0000000..53015db Binary files /dev/null and b/content/en/docs/platforms/CNOE/local-backstage.png differ diff --git a/content/en/docs/platforms/Humanitec/_index.md b/content/en/docs/platforms/Humanitec/_index.md new file mode 100644 index 0000000..21c9e69 --- /dev/null +++ b/content/en/docs/platforms/Humanitec/_index.md @@ -0,0 +1,7 @@ ++++ +title = "Humanitec" +weight = 4 ++++ + + +tbd \ No newline at end of file diff --git a/content/en/docs/platforms/_index.md b/content/en/docs/platforms/_index.md index f9dac94..1774b7d 100644 --- a/content/en/docs/platforms/_index.md +++ b/content/en/docs/platforms/_index.md @@ -1,5 +1,4 @@ +++ -archetype = "chapter" title = "Platforms" weight = 4 [params] @@ -7,12 +6,6 @@ weight = 4 date = '2024-07-30' +++ -## Humanitec +List of existing IDPs. -tbd -## 'CNOE' (Kuu.noo) - -* https://cnoe.io/docs/intro - -![kuunoo](./cnoe.png) diff --git a/content/en/docs/use-cases/_index.md b/content/en/docs/use-cases/_index.md index 3e969e7..2b846dc 100644 --- a/content/en/docs/use-cases/_index.md +++ b/content/en/docs/use-cases/_index.md @@ -16,6 +16,13 @@ That's why we need verifications - or test use cases - for the Developer Framewo ![alt text](platforms-def.drawio.png) (source: https://tag-app-delivery.cncf.io/whitepapers/platforms/) +## Golden Paths as Use Cases + +* https://platformengineering.org/blog/how-to-pave-golden-paths-that-actually-go-somewhere +* https://thenewstack.io/using-an-internal-developer-portal-for-golden-paths/ +* https://nl.devoteam.com/expert-view/building-golden-paths-with-internal-developer-platforms/ +* https://www.redhat.com/en/blog/designing-golden-paths + ## List of Use Cases Here we have a collection of possible usage scenarios. @@ -25,3 +32,11 @@ Here we have a collection of possible usage scenarios. Deploy and develop the famous socks shops: * https://medium.com/@wadecharley703/socks-shop-microservices-application-deployment-on-the-cloud-cd1017cce1c0 + +### Humanitec Demos + +* https://github.com/poc-template-org/node-js-sample + +### Github Examples + +* https://github.com/kezoo/nestjs-reactjs-graphql-typescript-boilerplate-example \ No newline at end of file