579 lines
28 KiB
Markdown
579 lines
28 KiB
Markdown
---
|
|
title: CNOE Showtime
|
|
weight: 6
|
|
description: CNOE hands on
|
|
---
|
|
|
|
|
|
## Summary
|
|
|
|
CNOE is a 'Platform Engineering Framework' (Danger: Our wording!) - it is open source and locally runnable.
|
|
|
|
It consists of the orchestrator 'idpbuilder' and both of some predefined building blocks and also some predefined platform configurations.
|
|
|
|
|
|
|
|
## Orchestrator 'idpbuilder', initial run
|
|
|
|
The orchestrator in CNOE is called 'idpbuilder'. It is [locally installable binary](https://cnoe.io/docs/reference-implementation/installations/idpbuilder/quick-start)
|
|
|
|
A typipcal first setup ist described here: https://cnoe.io/docs/reference-implementation/technology
|
|
|
|
```bash
|
|
# this is a local linux shell
|
|
|
|
# check local installation
|
|
type idpbuilder
|
|
idpbuilder is /usr/local/bin/idpbuilder
|
|
|
|
# check version
|
|
idpbuilder version
|
|
idpbuilder 0.8.0-nightly.20240914 go1.22.7 linux/amd64
|
|
|
|
# do some completion and aliasing
|
|
source <(idpbuilder completion bash)
|
|
alias ib=idpbuilder
|
|
complete -F __start_idpbuilder ib
|
|
|
|
# check and remove all existing kind clusters
|
|
kind delete clusters --all
|
|
kind get clusters
|
|
# sth. like 'No kind clusters found.'
|
|
|
|
# run
|
|
$ib create --use-path-routing --log-level debug --package-dir https://github.com/cnoe-io/stacks//ref-implementation
|
|
```
|
|
|
|
You get output like
|
|
|
|
```bash
|
|
stl@ubuntu-vpn:~/git/mms/ipceicis-developerframework$ idpbuilder create
|
|
Oct 1 10:09:18 INFO Creating kind cluster logger=setup
|
|
Oct 1 10:09:18 INFO 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.30.0"
|
|
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 ############################
|
|
```
|
|
|
|
## Show time steps
|
|
|
|
> Goto https://cnoe.io/docs/reference-implementation/installations/idpbuilder/usage, and follow the flow
|
|
|
|
### Prepare a k8s cluster with kind
|
|
|
|
You may have seen: when starting `idpbuilder` without an existing cluster named `localdev` it first creates this cluster by calling `kind`with an internally defined config.
|
|
|
|
It's an important feature of idpbuilder that it will set up on an existing cluster `localdev` when called several times in a row e.g. to append new packages to the cluster.
|
|
|
|
That's why we here first create the kind cluster `localdev`itself:
|
|
|
|
```bash
|
|
cat << EOF | kind create cluster --name localdev --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.30.0"
|
|
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
|
|
```
|
|
|
|
```bash
|
|
# alternatively, if you have the kind config as file:
|
|
kind create cluster --name localdev --config kind-config.yaml
|
|
```
|
|
|
|
#### Output
|
|
|
|
A typical raw kind setup kubernetes cluster would look like this with respect to running pods:
|
|
|
|
> be sure all pods are in status 'running'
|
|
|
|
```bash
|
|
stl@ubuntu-vpn:~/git/mms/idpbuilder$ k get pods -A
|
|
NAMESPACE NAME READY STATUS RESTARTS AGE
|
|
kube-system coredns-76f75df574-lb7jz 1/1 Running 0 15s
|
|
kube-system coredns-76f75df574-zm2wp 1/1 Running 0 15s
|
|
kube-system etcd-localdev-control-plane 1/1 Running 0 27s
|
|
kube-system kindnet-8qhd5 1/1 Running 0 13s
|
|
kube-system kindnet-r4d6n 1/1 Running 0 15s
|
|
kube-system kube-apiserver-localdev-control-plane 1/1 Running 0 27s
|
|
kube-system kube-controller-manager-localdev-control-plane 1/1 Running 0 27s
|
|
kube-system kube-proxy-vrh64 1/1 Running 0 15s
|
|
kube-system kube-proxy-w8ks9 1/1 Running 0 13s
|
|
kube-system kube-scheduler-localdev-control-plane 1/1 Running 0 27s
|
|
local-path-storage local-path-provisioner-6f8956fb48-6fvt2 1/1 Running 0 15s
|
|
```
|
|
|
|
### First run: Start with core applications, 'core package'
|
|
|
|
Now we run idpbuilder the first time:
|
|
|
|
```
|
|
# now idpbuilder reuses the already existing cluster
|
|
# pls apply '--use-path-routing' otherwise as we discovered currently the service resolving inside the cluster won't work
|
|
ib create --use-path-routing
|
|
```
|
|
|
|
#### Output
|
|
|
|
##### idpbuilder log
|
|
|
|
```bash
|
|
stl@ubuntu-vpn:~/git/mms/idpbuilder$ ib create --use-path-routing
|
|
Oct 1 10:32:50 INFO Creating kind cluster logger=setup
|
|
Oct 1 10:32:50 INFO Runtime detected logger=setup provider=docker
|
|
Oct 1 10:32:50 INFO Cluster already exists logger=setup cluster=localdev
|
|
Oct 1 10:32:50 INFO Adding CRDs to the cluster logger=setup
|
|
Oct 1 10:32:51 INFO Setting up CoreDNS logger=setup
|
|
Oct 1 10:32:51 INFO Setting up TLS certificate logger=setup
|
|
Oct 1 10:32:51 INFO Creating localbuild resource logger=setup
|
|
Oct 1 10:32:51 INFO Starting EventSource controller=gitrepository controllerGroup=idpbuilder.cnoe.io controllerKind=GitRepository source=kind source: *v1alpha1.GitRepository
|
|
Oct 1 10:32:51 INFO Starting Controller controller=gitrepository controllerGroup=idpbuilder.cnoe.io controllerKind=GitRepository
|
|
Oct 1 10:32:51 INFO Starting EventSource controller=localbuild controllerGroup=idpbuilder.cnoe.io controllerKind=Localbuild source=kind source: *v1alpha1.Localbuild
|
|
Oct 1 10:32:51 INFO Starting Controller controller=localbuild controllerGroup=idpbuilder.cnoe.io controllerKind=Localbuild
|
|
Oct 1 10:32:51 INFO Starting EventSource controller=custompackage controllerGroup=idpbuilder.cnoe.io controllerKind=CustomPackage source=kind source: *v1alpha1.CustomPackage
|
|
Oct 1 10:32:51 INFO Starting Controller controller=custompackage controllerGroup=idpbuilder.cnoe.io controllerKind=CustomPackage
|
|
Oct 1 10:32:51 INFO Starting workers controller=localbuild controllerGroup=idpbuilder.cnoe.io controllerKind=Localbuild worker count=1
|
|
Oct 1 10:32:51 INFO Starting workers controller=custompackage controllerGroup=idpbuilder.cnoe.io controllerKind=CustomPackage worker count=1
|
|
Oct 1 10:32:51 INFO Starting workers controller=gitrepository controllerGroup=idpbuilder.cnoe.io controllerKind=GitRepository worker count=1
|
|
Oct 1 10:32:54 INFO Waiting for Deployment my-gitea to become ready controller=localbuild controllerGroup=idpbuilder.cnoe.io controllerKind=Localbuild name=localdev name=localdev reconcileID=6fc396d4-e0d5-4c80-aaee-20c1bbffea54
|
|
Oct 1 10:32:54 INFO Waiting for Deployment ingress-nginx-controller to become ready controller=localbuild controllerGroup=idpbuilder.cnoe.io controllerKind=Localbuild name=localdev name=localdev reconcileID=6fc396d4-e0d5-4c80-aaee-20c1bbffea54
|
|
Oct 1 10:33:24 INFO Waiting for Deployment my-gitea to become ready controller=localbuild controllerGroup=idpbuilder.cnoe.io controllerKind=Localbuild name=localdev name=localdev reconcileID=6fc396d4-e0d5-4c80-aaee-20c1bbffea54
|
|
Oct 1 10:33:24 INFO Waiting for Deployment ingress-nginx-controller to become ready controller=localbuild controllerGroup=idpbuilder.cnoe.io controllerKind=Localbuild name=localdev name=localdev reconcileID=6fc396d4-e0d5-4c80-aaee-20c1bbffea54
|
|
Oct 1 10:33:54 INFO Waiting for Deployment my-gitea to become ready controller=localbuild controllerGroup=idpbuilder.cnoe.io controllerKind=Localbuild name=localdev name=localdev reconcileID=6fc396d4-e0d5-4c80-aaee-20c1bbffea54
|
|
Oct 1 10:34:24 INFO installing bootstrap apps to ArgoCD controller=localbuild controllerGroup=idpbuilder.cnoe.io controllerKind=Localbuild name=localdev name=localdev reconcileID=6fc396d4-e0d5-4c80-aaee-20c1bbffea54
|
|
Oct 1 10:34:24 INFO expected annotation, cnoe.io/last-observed-cli-start-time, not found controller=localbuild controllerGroup=idpbuilder.cnoe.io controllerKind=Localbuild name=localdev name=localdev reconcileID=6fc396d4-e0d5-4c80-aaee-20c1bbffea54
|
|
Oct 1 10:34:24 INFO Checking if we should shutdown controller=localbuild controllerGroup=idpbuilder.cnoe.io controllerKind=Localbuild name=localdev name=localdev reconcileID=6fc396d4-e0d5-4c80-aaee-20c1bbffea54
|
|
Oct 1 10:34:25 INFO installing bootstrap apps to ArgoCD controller=localbuild controllerGroup=idpbuilder.cnoe.io controllerKind=Localbuild name=localdev name=localdev reconcileID=0667fa85-af1c-403f-bcd9-16ff8f2fad7e
|
|
Oct 1 10:34:25 INFO expected annotation, cnoe.io/last-observed-cli-start-time, not found controller=localbuild controllerGroup=idpbuilder.cnoe.io controllerKind=Localbuild name=localdev name=localdev reconcileID=0667fa85-af1c-403f-bcd9-16ff8f2fad7e
|
|
Oct 1 10:34:25 INFO Checking if we should shutdown controller=localbuild controllerGroup=idpbuilder.cnoe.io controllerKind=Localbuild name=localdev name=localdev reconcileID=0667fa85-af1c-403f-bcd9-16ff8f2fad7e
|
|
Oct 1 10:34:40 INFO installing bootstrap apps to ArgoCD controller=localbuild controllerGroup=idpbuilder.cnoe.io controllerKind=Localbuild name=localdev name=localdev reconcileID=ec720aeb-02cd-4974-a991-cf2f19ce8536
|
|
Oct 1 10:34:40 INFO Checking if we should shutdown controller=localbuild controllerGroup=idpbuilder.cnoe.io controllerKind=Localbuild name=localdev name=localdev reconcileID=ec720aeb-02cd-4974-a991-cf2f19ce8536
|
|
Oct 1 10:34:40 INFO Shutting Down controller=localbuild controllerGroup=idpbuilder.cnoe.io controllerKind=Localbuild name=localdev name=localdev reconcileID=ec720aeb-02cd-4974-a991-cf2f19ce8536
|
|
Oct 1 10:34:40 INFO Stopping and waiting for non leader election runnables
|
|
Oct 1 10:34:40 INFO Stopping and waiting for leader election runnables
|
|
Oct 1 10:34:40 INFO Shutdown signal received, waiting for all workers to finish controller=gitrepository controllerGroup=idpbuilder.cnoe.io controllerKind=GitRepository
|
|
Oct 1 10:34:40 INFO Shutdown signal received, waiting for all workers to finish controller=custompackage controllerGroup=idpbuilder.cnoe.io controllerKind=CustomPackage
|
|
Oct 1 10:34:40 INFO All workers finished controller=custompackage controllerGroup=idpbuilder.cnoe.io controllerKind=CustomPackage
|
|
Oct 1 10:34:40 INFO Shutdown signal received, waiting for all workers to finish controller=localbuild controllerGroup=idpbuilder.cnoe.io controllerKind=Localbuild
|
|
Oct 1 10:34:40 INFO All workers finished controller=localbuild controllerGroup=idpbuilder.cnoe.io controllerKind=Localbuild
|
|
Oct 1 10:34:40 INFO All workers finished controller=gitrepository controllerGroup=idpbuilder.cnoe.io controllerKind=GitRepository
|
|
Oct 1 10:34:40 INFO Stopping and waiting for caches
|
|
Oct 1 10:34:40 INFO Stopping and waiting for webhooks
|
|
Oct 1 10:34:40 INFO Stopping and waiting for HTTP servers
|
|
Oct 1 10:34:40 INFO 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
|
|
```
|
|
|
|
##### ArgoCD applications
|
|
|
|
When running idpbuilder 'barely' (without package option) you get the 'core applications' deployed in your cluster:
|
|
|
|
```bash
|
|
stl@ubuntu-vpn:~/git/mms/ipceicis-developerframework$ k get applications -A
|
|
NAMESPACE NAME SYNC STATUS HEALTH STATUS
|
|
argocd argocd Synced Healthy
|
|
argocd gitea Synced Healthy
|
|
argocd nginx Synced Healthy
|
|
```
|
|
|
|
##### ArgoCD UI
|
|
|
|
Open ArgoCD locally:
|
|
|
|
https://cnoe.localtest.me:8443/argocd
|
|
|
|

|
|
|
|
Next find the provided credentials for ArgoCD (here: argocd-initial-admin-secret):
|
|
|
|
```bash
|
|
stl@ubuntu-vpn:~/git/mms/idpbuilder$ ib get secrets
|
|
---------------------------
|
|
Name: argocd-initial-admin-secret
|
|
Namespace: argocd
|
|
Data:
|
|
password : 2MoMeW30wSC9EraF
|
|
username : admin
|
|
---------------------------
|
|
Name: gitea-credential
|
|
Namespace: gitea
|
|
Data:
|
|
password : LI$T?o>N{-<|{^dm$eTg*gni1(2:Y0@q344yqQIS
|
|
username : giteaAdmin
|
|
```
|
|
|
|
In ArgoCD you will see the deployed three applications of the core package:
|
|
|
|

|
|
|
|
### Second run: Append 'package1' from the CNOE-stacks repo
|
|
|
|
CNOE provides example packages in `https://github.com/cnoe-io/stacks.git`. Having cloned this repo you can locally refer to theses packages:
|
|
|
|
```bash
|
|
stl@ubuntu-vpn:~/git/mms/cnoe-stacks$ git remote -v
|
|
origin https://github.com/cnoe-io/stacks.git (fetch)
|
|
origin https://github.com/cnoe-io/stacks.git (push)
|
|
```
|
|
|
|
```bash
|
|
stl@ubuntu-vpn:~/git/mms/cnoe-stacks$ ls -al
|
|
total 64
|
|
drwxr-xr-x 12 stl stl 4096 Sep 28 13:55 .
|
|
drwxr-xr-x 26 stl stl 4096 Sep 30 11:53 ..
|
|
drwxr-xr-x 8 stl stl 4096 Sep 28 13:56 .git
|
|
drwxr-xr-x 4 stl stl 4096 Jul 29 10:57 .github
|
|
-rw-r--r-- 1 stl stl 11341 Sep 28 09:12 LICENSE
|
|
-rw-r--r-- 1 stl stl 1079 Sep 28 13:55 README.md
|
|
drwxr-xr-x 4 stl stl 4096 Jul 29 10:57 basic
|
|
drwxr-xr-x 4 stl stl 4096 Sep 14 15:54 crossplane-integrations
|
|
drwxr-xr-x 3 stl stl 4096 Aug 13 14:52 dapr-integration
|
|
drwxr-xr-x 3 stl stl 4096 Sep 14 15:54 jupyterhub
|
|
drwxr-xr-x 6 stl stl 4096 Aug 16 14:36 local-backup
|
|
drwxr-xr-x 3 stl stl 4096 Aug 16 14:36 localstack-integration
|
|
drwxr-xr-x 8 stl stl 4096 Sep 28 13:02 ref-implementation
|
|
drwxr-xr-x 2 stl stl 4096 Aug 16 14:36 terraform-integrations
|
|
|
|
stl@ubuntu-vpn:~/git/mms/cnoe-stacks$ ls -al basic/
|
|
total 20
|
|
drwxr-xr-x 4 stl stl 4096 Jul 29 10:57 .
|
|
drwxr-xr-x 12 stl stl 4096 Sep 28 13:55 ..
|
|
-rw-r--r-- 1 stl stl 632 Jul 29 10:57 README.md
|
|
drwxr-xr-x 3 stl stl 4096 Jul 29 10:57 package1
|
|
drwxr-xr-x 2 stl stl 4096 Jul 29 10:57 package2
|
|
|
|
stl@ubuntu-vpn:~/git/mms/cnoe-stacks$ ls -al basic/package1
|
|
total 16
|
|
drwxr-xr-x 3 stl stl 4096 Jul 29 10:57 .
|
|
drwxr-xr-x 4 stl stl 4096 Jul 29 10:57 ..
|
|
-rw-r--r-- 1 stl stl 655 Jul 29 10:57 app.yaml
|
|
drwxr-xr-x 2 stl stl 4096 Jul 29 10:57 manifests
|
|
|
|
stl@ubuntu-vpn:~/git/mms/cnoe-stacks$ ls -al basic/package2
|
|
total 16
|
|
drwxr-xr-x 2 stl stl 4096 Jul 29 10:57 .
|
|
drwxr-xr-x 4 stl stl 4096 Jul 29 10:57 ..
|
|
-rw-r--r-- 1 stl stl 498 Jul 29 10:57 app.yaml
|
|
-rw-r--r-- 1 stl stl 500 Jul 29 10:57 app2.yaml
|
|
```
|
|
|
|
#### Output
|
|
|
|
Now we run idpbuilder the second time with `-p basic/package1`
|
|
|
|
##### idpbuilder log
|
|
|
|
```bash
|
|
stl@ubuntu-vpn:~/git/mms/cnoe-stacks$ ib create --use-path-routing -p basic/package1
|
|
Oct 1 12:09:27 INFO Creating kind cluster logger=setup
|
|
Oct 1 12:09:27 INFO Runtime detected logger=setup provider=docker
|
|
Oct 1 12:09:27 INFO Cluster already exists logger=setup cluster=localdev
|
|
Oct 1 12:09:28 INFO Adding CRDs to the cluster logger=setup
|
|
Oct 1 12:09:28 INFO Setting up CoreDNS logger=setup
|
|
Oct 1 12:09:28 INFO Setting up TLS certificate logger=setup
|
|
Oct 1 12:09:28 INFO Creating localbuild resource logger=setup
|
|
Oct 1 12:09:28 INFO Starting EventSource controller=localbuild controllerGroup=idpbuilder.cnoe.io controllerKind=Localbuild source=kind source: *v1alpha1.Localbuild
|
|
Oct 1 12:09:28 INFO Starting Controller controller=localbuild controllerGroup=idpbuilder.cnoe.io controllerKind=Localbuild
|
|
Oct 1 12:09:28 INFO Starting EventSource controller=custompackage controllerGroup=idpbuilder.cnoe.io controllerKind=CustomPackage source=kind source: *v1alpha1.CustomPackage
|
|
Oct 1 12:09:28 INFO Starting Controller controller=custompackage controllerGroup=idpbuilder.cnoe.io controllerKind=CustomPackage
|
|
Oct 1 12:09:28 INFO Starting EventSource controller=gitrepository controllerGroup=idpbuilder.cnoe.io controllerKind=GitRepository source=kind source: *v1alpha1.GitRepository
|
|
Oct 1 12:09:28 INFO Starting Controller controller=gitrepository controllerGroup=idpbuilder.cnoe.io controllerKind=GitRepository
|
|
Oct 1 12:09:28 INFO Starting workers controller=localbuild controllerGroup=idpbuilder.cnoe.io controllerKind=Localbuild worker count=1
|
|
Oct 1 12:09:28 INFO Starting workers controller=gitrepository controllerGroup=idpbuilder.cnoe.io controllerKind=GitRepository worker count=1
|
|
Oct 1 12:09:28 INFO Starting workers controller=custompackage controllerGroup=idpbuilder.cnoe.io controllerKind=CustomPackage worker count=1
|
|
Oct 1 12:09:29 INFO installing bootstrap apps to ArgoCD controller=localbuild controllerGroup=idpbuilder.cnoe.io controllerKind=Localbuild name=localdev name=localdev reconcileID=0ed7ccc2-dec7-4ab8-909c-791a7d1b67a8
|
|
Oct 1 12:09:29 INFO unknown field "status.history[0].initiatedBy" logger=KubeAPIWarningLogger
|
|
Oct 1 12:09:29 INFO Checking if we should shutdown controller=localbuild controllerGroup=idpbuilder.cnoe.io controllerKind=Localbuild name=localdev name=localdev reconcileID=0ed7ccc2-dec7-4ab8-909c-791a7d1b67a8
|
|
Oct 1 12:09:29 ERROR failed updating repo status controller=custompackage controllerGroup=idpbuilder.cnoe.io controllerKind=CustomPackage name=app-my-app namespace=idpbuilder-localdev namespace=idpbuilder-localdev name=app-my-app reconcileID=f9873560-5dcd-4e59-b6f7-ce5d1029ef3d err=Operation cannot be fulfilled on custompackages.idpbuilder.cnoe.io "app-my-app": the object has been modified; please apply your changes to the latest version and try again
|
|
Oct 1 12:09:29 ERROR Reconciler error controller=custompackage controllerGroup=idpbuilder.cnoe.io controllerKind=CustomPackage name=app-my-app namespace=idpbuilder-localdev namespace=idpbuilder-localdev name=app-my-app reconcileID=f9873560-5dcd-4e59-b6f7-ce5d1029ef3d err=updating argocd application object my-app: Operation cannot be fulfilled on applications.argoproj.io "my-app": the object has been modified; please apply your changes to the latest version and try again
|
|
Oct 1 12:09:31 INFO installing bootstrap apps to ArgoCD controller=localbuild controllerGroup=idpbuilder.cnoe.io controllerKind=Localbuild name=localdev name=localdev reconcileID=531cc2d4-6250-493a-aca8-fecf048a608d
|
|
Oct 1 12:09:31 INFO Checking if we should shutdown controller=localbuild controllerGroup=idpbuilder.cnoe.io controllerKind=Localbuild name=localdev name=localdev reconcileID=531cc2d4-6250-493a-aca8-fecf048a608d
|
|
Oct 1 12:09:44 INFO installing bootstrap apps to ArgoCD controller=localbuild controllerGroup=idpbuilder.cnoe.io controllerKind=Localbuild name=localdev name=localdev reconcileID=022b9813-8708-4f4e-90d7-38f1e114c46f
|
|
Oct 1 12:09:44 INFO Checking if we should shutdown controller=localbuild controllerGroup=idpbuilder.cnoe.io controllerKind=Localbuild name=localdev name=localdev reconcileID=022b9813-8708-4f4e-90d7-38f1e114c46f
|
|
Oct 1 12:10:00 INFO installing bootstrap apps to ArgoCD controller=localbuild controllerGroup=idpbuilder.cnoe.io controllerKind=Localbuild name=localdev name=localdev reconcileID=79a85c21-42c1-41ec-ad03-2bb77aeae027
|
|
Oct 1 12:10:00 INFO Checking if we should shutdown controller=localbuild controllerGroup=idpbuilder.cnoe.io controllerKind=Localbuild name=localdev name=localdev reconcileID=79a85c21-42c1-41ec-ad03-2bb77aeae027
|
|
Oct 1 12:10:00 INFO Shutting Down controller=localbuild controllerGroup=idpbuilder.cnoe.io controllerKind=Localbuild name=localdev name=localdev reconcileID=79a85c21-42c1-41ec-ad03-2bb77aeae027
|
|
Oct 1 12:10:00 INFO Stopping and waiting for non leader election runnables
|
|
Oct 1 12:10:00 INFO Stopping and waiting for leader election runnables
|
|
Oct 1 12:10:00 INFO Shutdown signal received, waiting for all workers to finish controller=custompackage controllerGroup=idpbuilder.cnoe.io controllerKind=CustomPackage
|
|
Oct 1 12:10:00 INFO Shutdown signal received, waiting for all workers to finish controller=gitrepository controllerGroup=idpbuilder.cnoe.io controllerKind=GitRepository
|
|
Oct 1 12:10:00 INFO All workers finished controller=custompackage controllerGroup=idpbuilder.cnoe.io controllerKind=CustomPackage
|
|
Oct 1 12:10:00 INFO Shutdown signal received, waiting for all workers to finish controller=localbuild controllerGroup=idpbuilder.cnoe.io controllerKind=Localbuild
|
|
Oct 1 12:10:00 INFO All workers finished controller=localbuild controllerGroup=idpbuilder.cnoe.io controllerKind=Localbuild
|
|
Oct 1 12:10:00 INFO All workers finished controller=gitrepository controllerGroup=idpbuilder.cnoe.io controllerKind=GitRepository
|
|
Oct 1 12:10:00 INFO Stopping and waiting for caches
|
|
Oct 1 12:10:00 INFO Stopping and waiting for webhooks
|
|
Oct 1 12:10:00 INFO Stopping and waiting for HTTP servers
|
|
Oct 1 12:10:00 INFO 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
|
|
```
|
|
|
|
##### ArgoCD applications
|
|
|
|
Now we have additionally the 'my-app' deployed in the cluster:
|
|
|
|
```bash
|
|
stl@ubuntu-vpn:~$ k get applications -A
|
|
NAMESPACE NAME SYNC STATUS HEALTH STATUS
|
|
argocd argocd Synced Healthy
|
|
argocd gitea Synced Healthy
|
|
argocd my-app Synced Healthy
|
|
argocd nginx Synced Healthy
|
|
```
|
|
|
|
##### ArgoCD UI
|
|
|
|

|
|
|
|
### Third run: Finally we append 'ref-implementation' from the CNOE-stacks repo
|
|
|
|
We finally append the so called ['reference-implementation'](https://cnoe.io/docs/reference-implementation/integrations/reference-impl), which provides a real basic IDP:
|
|
|
|
```bash
|
|
stl@ubuntu-vpn:~/git/mms/cnoe-stacks$ ib create --use-path-routing -p ref-implementation
|
|
```
|
|
|
|
##### ArgoCD applications
|
|
|
|
```bash
|
|
stl@ubuntu-vpn:~$ k get applications -A
|
|
NAMESPACE NAME SYNC STATUS HEALTH STATUS
|
|
argocd argo-workflows Synced Healthy
|
|
argocd argocd Synced Healthy
|
|
argocd backstage Synced Healthy
|
|
argocd included-backstage-templates Synced Healthy
|
|
argocd external-secrets Synced Healthy
|
|
argocd gitea Synced Healthy
|
|
argocd keycloak Synced Healthy
|
|
argocd metric-server Synced Healthy
|
|
argocd my-app Synced Healthy
|
|
argocd nginx Synced Healthy
|
|
argocd spark-operator Synced Healthy
|
|
```
|
|
|
|
##### ArgoCD UI
|
|
|
|
ArgoCD shows all provissioned applications:
|
|
|
|

|
|
|
|
##### Keycloak UI
|
|
|
|
In our cluster there is also keycloak as IAM provisioned.
|
|
Login into Keycloak with 'cnoe-admin' and the KEYCLOAK_ADMIN_PASSWORD.
|
|
|
|
These credentails are defined in the package:
|
|
|
|
```bash
|
|
stl@ubuntu-vpn:~/git/mms/cnoe-stacks$ cat ref-implementation/keycloak/manifests/keycloak-config.yaml | grep -i admin
|
|
group-admin-payload.json: |
|
|
{"name":"admin"}
|
|
"/admin"
|
|
ADMIN_PASSWORD=$(cat /var/secrets/KEYCLOAK_ADMIN_PASSWORD)
|
|
--data-urlencode "username=cnoe-admin" \
|
|
--data-urlencode "password=${ADMIN_PASSWORD}" \
|
|
```
|
|
|
|
```bash
|
|
stl@ubuntu-vpn:~/git/mms/cnoe-stacks$ ib get secrets
|
|
---------------------------
|
|
Name: argocd-initial-admin-secret
|
|
Namespace: argocd
|
|
Data:
|
|
password : 2MoMeW30wSC9EraF
|
|
username : admin
|
|
---------------------------
|
|
Name: gitea-credential
|
|
Namespace: gitea
|
|
Data:
|
|
password : LI$T?o>N{-<|{^dm$eTg*gni1(2:Y0@q344yqQIS
|
|
username : giteaAdmin
|
|
---------------------------
|
|
Name: keycloak-config
|
|
Namespace: keycloak
|
|
Data:
|
|
KC_DB_PASSWORD : k3-1kgxxd/X2Cw//pX-uKMsmgWogEz5YGnb5
|
|
KC_DB_USERNAME : keycloak
|
|
KEYCLOAK_ADMIN_PASSWORD : zMSjv5eA0l/+0-MDAaaNe+rHRMrB2q0NssP-
|
|
POSTGRES_DB : keycloak
|
|
POSTGRES_PASSWORD : k3-1kgxxd/X2Cw//pX-uKMsmgWogEz5YGnb5
|
|
POSTGRES_USER : keycloak
|
|
USER_PASSWORD : Kd+0+/BqPRAvnLPZO-L2o/6DoBrzUeMsr29U
|
|
```
|
|
|
|

|
|
|
|
|
|
##### Backstage UI
|
|
|
|
As Backstage login you either can use the 'user1' with `USER_PASSWORD : Kd+0+/BqPRAvnLPZO-L2o/6DoBrzUeMsr29U` or you create a new user in keycloak
|
|
|
|

|
|
|
|
We create user 'ipcei' and also set a password (in tab 'Credentials'):
|
|
|
|

|
|
|
|
Now we can log into backstage (rember: you could have already existing usr 'user1'):
|
|
|
|

|
|
|
|
and see the basic setup of the Backstage portal:
|
|
|
|

|
|
|
|
### Use a Golden Path: 'Basic Deployment'
|
|
|
|
Now we want to use the Backstage portal as a developer. We create in Backstage our own platform based activity by using the golden path template 'Basic Deployment:
|
|
|
|

|
|
|
|
When we run it, we see 'golden path activities'
|
|
|
|

|
|
|
|
which finally result in a new catalogue entry:
|
|
|
|

|
|
|
|
#### Software development lifecycle
|
|
|
|
When we follow the 'view source' link we are directly linked to the git repo of our newly created application:
|
|
|
|

|
|
|
|
Check it out by cloning into a local git repo (watch the GIT_SSL_NO_VERIFY=true env setting):
|
|
|
|
```bash
|
|
stl@ubuntu-vpn:~/git/mms/idp-temporary$ GIT_SSL_NO_VERIFY=true git clone https://cnoe.localtest.me:8443/gitea/giteaAdmin/basicdeployment.git
|
|
Cloning into 'basicdeployment'...
|
|
remote: Enumerating objects: 10, done.
|
|
remote: Counting objects: 100% (10/10), done.
|
|
remote: Compressing objects: 100% (8/8), done.
|
|
remote: Total 10 (delta 0), reused 0 (delta 0), pack-reused 0 (from 0)
|
|
Receiving objects: 100% (10/10), 47.62 KiB | 23.81 MiB/s, done.
|
|
|
|
stl@ubuntu-vpn:~/git/mms/idp-temporary$ cd basicdeployment/
|
|
|
|
stl@ubuntu-vpn:~/git/mms/idp-temporary/basicdeployment$ ll
|
|
total 24
|
|
drwxr-xr-x 5 stl stl 4096 Oct 1 13:00 ./
|
|
drwxr-xr-x 4 stl stl 4096 Oct 1 13:00 ../
|
|
drwxr-xr-x 8 stl stl 4096 Oct 1 13:00 .git/
|
|
-rw-r--r-- 1 stl stl 928 Oct 1 13:00 catalog-info.yaml
|
|
drwxr-xr-x 3 stl stl 4096 Oct 1 13:00 docs/
|
|
drwxr-xr-x 2 stl stl 4096 Oct 1 13:00 manifests/
|
|
```
|
|
|
|
#### Edit and change
|
|
|
|
Change some things, like the decription and the replicas:
|
|
|
|

|
|
|
|
#### Push
|
|
|
|
Push your changes, use the giteaAdmin user to authenticate:
|
|
|
|
```bash
|
|
stl@ubuntu-vpn:~/git/mms/idp-temporary/basicdeployment$ ib get secrets
|
|
---------------------------
|
|
Name: argocd-initial-admin-secret
|
|
Namespace: argocd
|
|
Data:
|
|
password : 2MoMeW30wSC9EraF
|
|
username : admin
|
|
---------------------------
|
|
Name: gitea-credential
|
|
Namespace: gitea
|
|
Data:
|
|
password : LI$T?o>N{-<|{^dm$eTg*gni1(2:Y0@q344yqQIS
|
|
username : giteaAdmin
|
|
---------------------------
|
|
Name: keycloak-config
|
|
Namespace: keycloak
|
|
Data:
|
|
KC_DB_PASSWORD : k3-1kgxxd/X2Cw//pX-uKMsmgWogEz5YGnb5
|
|
KC_DB_USERNAME : keycloak
|
|
KEYCLOAK_ADMIN_PASSWORD : zMSjv5eA0l/+0-MDAaaNe+rHRMrB2q0NssP-
|
|
POSTGRES_DB : keycloak
|
|
POSTGRES_PASSWORD : k3-1kgxxd/X2Cw//pX-uKMsmgWogEz5YGnb5
|
|
POSTGRES_USER : keycloak
|
|
USER_PASSWORD : Kd+0+/BqPRAvnLPZO-L2o/6DoBrzUeMsr29U
|
|
stl@ubuntu-vpn:~/git/mms/idp-temporary/basicdeployment$ GIT_SSL_NO_VERIFY=true git push
|
|
Username for 'https://cnoe.localtest.me:8443': giteaAdmin
|
|
Password for 'https://giteaAdmin@cnoe.localtest.me:8443':
|
|
Enumerating objects: 5, done.
|
|
Counting objects: 100% (5/5), done.
|
|
Delta compression using up to 8 threads
|
|
Compressing objects: 100% (3/3), done.
|
|
Writing objects: 100% (3/3), 382 bytes | 382.00 KiB/s, done.
|
|
Total 3 (delta 1), reused 0 (delta 0), pack-reused 0
|
|
remote: . Processing 1 references
|
|
remote: Processed 1 references in total
|
|
To https://cnoe.localtest.me:8443/gitea/giteaAdmin/basicdeployment.git
|
|
69244d6..1269617 main -> main
|
|
```
|
|
|
|
#### Wait for gitops magic: deployment into the 'production' cluster
|
|
|
|
Next wait a bit until Gitops does its magic and our 'wanted' state in the repo gets automatically deployed to the 'production' cluster:
|
|
|
|

|
|
|
|

|
|
|
|
{{% pageinfo color="info" %}}
|
|
### What comes next?
|
|
|
|
The showtime of CNOE high level behaviour and usage scenarios is now finished. We setup an initial IDP and used a backstage golden path to init and deploy a simple application.
|
|
|
|
[Last not least](../conclusio/) we want to sum up the whole way from Devops to 'Frameworking' (is this the correct wording???)
|
|
{{% /pageinfo %}}
|