From the moment of their inception as source code on the developer’s laptop, our hero knows that they are destined for great things. They long to be a real, running application, living in production, serving end users! But the epic journey to production is an arduous one, filled with cascading choices—choices concerning app design, testing, security, container image building, deployment strategy, and observability, to name a few. And who knows what other unseen forces lurk in the shadows! One wrong step could be catastrophic.
It is up to us, the audience, to guide our hero; and to help them grow from source code to container image, to their final form as a running application in production. In this ‘Choose Your Own Adventure’-style journey, Whitney and Viktor will present a linear view of all of the choices that an anthropomorphized application must make as they try to find their way to the fabled land of production. Throughout the trek, the audience will vote to choose which path our hero application will take. Can we navigate CNCF projects and avoid pitfalls and dead-ends to get our application to production?
Join us if you dare! This is not for the faint of heart!
- Non-CNCF projects lead to a dead end ☠
The best place to start the adventure is the beginning. Perform the setup steps and, from there, start the first chapter by going to Build Container Image In Dev Environments. As an alternative, you can use graph below to navigate through the adventure.
Almost all items in the graphs contain a link if you prefer to jump straight into a specific part of the adventure. If you do so, please note that the steps work only if one start from the beginning of any of the chapters (e.g., Development, Production, etc.).
For reasons I cannot explain, the links do not work if they are not opened in a separate tab.
flowchart TD
subgraph "Legend"
red(Not yet implemented)
style red fill:red
blue{{Make a choice}}
style blue fill:blue
blue(Chosen by viewers)
style blue fill:green
end
flowchart TD
subgraph Development
%% -----------
%% -- Setup --
%% -----------
setup-dev((Setup))
click setup-dev "https://github.com/vfarcic/cncf-demo/blob/main/manuscript/setup/dev.md"
%% -- Setup Connections --
setup-dev-->bci
%% ---------------------------
%% -- Build Container Image --
%% ---------------------------
bci{{Build Container Image}}
click bci "https://github.com/vfarcic/cncf-demo/blob/main/manuscript/build-container-image/README.md"
style bci fill:blue
bci-kbld(Carvel kbld)
click bci-kbld "https://github.com/vfarcic/cncf-demo/blob/main/manuscript/build-container-image/kbld.md"
bci-lima(Lima)
click bci-lima "https://github.com/vfarcic/cncf-demo/blob/main/manuscript/build-container-image/lima.md"
bci-buildpacks(Cloud Native Buildpacks / CNB)
style bci-buildpacks fill:green
click bci-buildpacks "https://github.com/vfarcic/cncf-demo/blob/main/manuscript/build-container-image/buildpacks.md"
%% -- Build Container Image Connections --
bci --> bci-kbld & bci-lima & bci-buildpacks --> registry
%% -----------------------------------------
%% -- Store Container Image in a Registry --
%% -----------------------------------------
registry{{Store Container Image In A Registry}}
click registry "https://github.com/vfarcic/cncf-demo/blob/main/manuscript/registry/README.md"
style registry fill:blue
registry-docker-hub(Docker Hub)
click registry-docker-hub "https://github.com/vfarcic/cncf-demo/blob/main/manuscript/registry/docker-hub.md"
registry-harbor(Harbor)
click registry-harbor "https://github.com/vfarcic/cncf-demo/blob/main/manuscript/registry/harbor.md"
style registry-harbor fill:green
registry-dragonfly(Dragonfly)
click registry-dragonfly "https://github.com/vfarcic/cncf-demo/blob/main/manuscript/registry/dragonfly.md"
registry --> registry-docker-hub & registry-harbor & registry-dragonfly --> ddd
%% --------------------------------------
%% -- Define And Deploy The App To Dev --
%% --------------------------------------
ddd{{Define And Deploy The App To Dev}}
click ddd "https://github.com/vfarcic/cncf-demo/blob/main/manuscript/define-deploy-dev/README.md"
style ddd fill:blue
ddd-helm(Helm)
click ddd-helm "https://github.com/vfarcic/cncf-demo/blob/main/manuscript/define-deploy-dev/helm.md"
ddd-kustomize(Kustomize)
click ddd-kustomize "https://github.com/vfarcic/cncf-demo/blob/main/manuscript/define-deploy-dev/kustomize.md"
ddd-carvel(Carvel ytt)
click ddd-carvel "https://github.com/vfarcic/cncf-demo/blob/main/manuscript/define-deploy-dev/carvel-ytt.md"
style ddd-carvel fill:green
ddd-cdk8s("CDK For Kubernetes (cdk8s)")
click ddd-cdk8s "https://github.com/vfarcic/cncf-demo/blob/main/manuscript/define-deploy-dev/cdk8s.md"
ddd --> ddd-helm & ddd-kustomize & ddd-carvel & ddd-cdk8s --> https
%% ---------------
%% -- Use HTTPS --
%% ---------------
https{{Use HTTPS}}
click https "https://github.com/vfarcic/cncf-demo/blob/main/manuscript/https/README.md"
style https fill:blue
https-cert-manager(cert-manager)
click https-cert-manager "https://github.com/vfarcic/cncf-demo/blob/main/manuscript/https/cert-manager.md"
style https-cert-manager fill:green
https-cert-manager-helm(App as Helm)
click https-cert-manager-helm "https://github.com/vfarcic/cncf-demo/blob/main/manuscript/https/cert-manager-helm.md"
https-cert-manager-kustomize(App as Kustomize)
click https-cert-manager-kustomize "https://github.com/vfarcic/cncf-demo/blob/main/manuscript/https/cert-manager-kustomize.md"
https-cert-manager-carvel(App as Carvel ytt)
click https-cert-manager-kustomize "https://github.com/vfarcic/cncf-demo/blob/main/manuscript/https/cert-manager-carvel.md"
style https-cert-manager-carvel fill:green
https-cert-manager-cdk8s(App as cdk8s)
click https-cert-manager-cdk8s "https://github.com/vfarcic/cncf-demo/blob/main/manuscript/https/cert-manager-cdk8s.md"
https--> https-cert-manager--> https-cert-manager-helm & https-cert-manager-kustomize & https-cert-manager-carvel & https-cert-manager-cdk8s --> continue
continue((The be continued...))
end
Development-->Destroy
subgraph Destroy
destroy((Destroy Everything))
click destroy "https://github.com/vfarcic/cncf-demo/blob/main/manuscript/destroy.md"
end
Name | Guests | Date | Link |
---|---|---|---|
Build Container Image | Cora Iberkleid - Carvel kbld Ryan Moran - Buildpacks Anders Björklund - Lima |
Wednesday, February 8, 2023 | story |
Store Container Image in a Registry | Vadim Bauer - Harbor Allen Sun - Dragonfly |
Tuesday, February 14, 2023 | story |
Define and Deploy the App to Dev | Andrew Block - Helm Scott Rosenberg - Carvel ytt Eli Polonsky - cdk8s Thomas Vitale - Kustomize |
Tuesday, February 21, 2023 | story |
Use HTTPS | Ashley Davis - cert-manager |
Tuesday, February 28, 2023 | story |
Set Up PostgreSQL DB in the Dev Environment | Dan Magnum - Crossplane Andrew Block - Helm |
Tuesday, March 7, 2023 | story |
Manage DB Schema | Marc Campbell - SchemaHero Robert Reeves - Liquibase |
Tuesday, March 14, 2023 | story |
Develop the App | Nick Powell - Telepresence Carl Montanari - DevSpace |
Tuesday, March 21, 2023 | story |
- Recap of the decisions made in the app's journey so far (<=5 min.)
- Recap of the technology that was chosen from last week's episode (<=5 min.)
- Implement said technology (<=5 min.)
- Intro current episode: why is this step necessary? (<=5 min.)
- Introduce guests
- Each case presented in <= 5 min.
- Audience questions
- Call for voting
- Closing case presentations (20 sec.)