This is the multi-page printable view of this section. Click here to print.

Return to the regular view of this page.

CNOE Showtime

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

    A typipcal first setup ist described here: https://cnoe.io/docs/reference-implementation/technology

    # 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

    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 kindwith 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 localdevitself:

    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
    
    # 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’

    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
    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:

    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

    alt text

    Next find the provided credentials for ArgoCD (here: argocd-initial-admin-secret):

    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:

    alt text

    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:

    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)
    
    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
    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:

    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

    alt text

    Third run: Finally we append ‘ref-implementation’ from the CNOE-stacks repo

    We finally append the so called ‘reference-implementation’, which provides a real basic IDP:

    stl@ubuntu-vpn:~/git/mms/cnoe-stacks$ ib create --use-path-routing -p ref-implementation
    
    ArgoCD applications
    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:

    alt text

    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:

    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}" \
    
    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
    

    alt text

    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’):

    alt text

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

    alt text

    and see the basic setup of the Backstage portal:

    alt text

    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:

    alt text

    When we run it, we see ‘golden path activities’

    alt text

    which finally result in a new catalogue entry:

    alt text

    Software development lifecycle

    When we follow the ‘view source’ link we are directly linked to the git repo of our newly created application:

    alt text

    Check it out by cloning into a local git repo (watch the GIT_SSL_NO_VERIFY=true env setting):

    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:

    alt text

    Push

    Push your changes, use the giteaAdmin user to authenticate:

    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:

    alt text

    alt text

    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 we want to sum up the whole way from Devops to ‘Frameworking’ (is this the correct wording???)