Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Paved Paths to Production – There and Back Again

Paved Paths to Production – There and Back Again

There’s no place like production. Any idea, any code change will not deliver value until it reaches production. How can we go there fast and securely? A path to production includes all the activities to deliver a new idea to the software users.

The first challenge will be to provide application developers with a compelling experience that enhances the inner development loop, improves their productivity, and reduces their cognitive load. You’ll see how to design such an experience using Backstage, Buildpacks, and Knative.

The second challenge will be establishing secure and reusable CI/CD pipelines while ensuring a clear separation of concerns. You’ll see how to do that by building on top of the inner loop and adding Tekton, Trivy, and Argo CD. Application operators and security engineers will be responsible for those pipelines and the supply chain, taking care of all the activities for building, testing, securing, configuring, and ultimately deploying workloads.

The third challenge will be to offer paved paths to production as a coherent service via a platform based on different tools from the cloud native ecosystem. You’ll learn about the concept of golden paths enabled by Backstage and see how to implement them using Cartographer, a framework to build paths to production.

Thomas Vitale

April 17, 2023
Tweet

More Decks by Thomas Vitale

Other Decks in Technology

Transcript

  1. Thomas Vitale Cloud Native Rejekts Apr 16th, 2023 Paved Paths

    to Production @vitalethomas There and Back Again
  2. Systematic • Software Engineer and Cloud Architect. • Author of

    “Cloud Native Spring in Action” (Manning). • OSS contributor (Java, Spring, Cloud Native Technologies) Thomas Vitale thomasvitale.com @vitalethomas
  3. Goals 2 Reduced cognitive load 3 Clear and safe path

    to production 1 Rapid and continuous feedback loop @vitalethomas
  4. Moving to Kubernetes @vitalethomas Runtime (Language) Application (Executable) Runtime (OCI)

    Application (Container) Runtime (OCI) Middleware (Kubernetes) Application (Container)
  5. Goals 2 Reduced cognitive load 3 Clear and safe path

    to production 1 Rapid and continuous feedback loop @vitalethomas
  6. CI/CD Pipeline (Imperative) Check out source code Build container image

    Con fi gure workload Deploy workload Orchestrator Tightly coupled Rigid system No clear separation of concerns Hard to maintain @vitalethomas
  7. Check out source code Build container image Con fi gure

    workload Deploy workload @vitalethomas
  8. Check out source code Build container image Con fi gure

    workload Deploy workload Kubernetes Manifests GitOps @vitalethomas
  9. Check out source code Build container image Con fi gure

    workload Deploy workload Kubernetes Manifests Container Image
  10. Check out source code Build container image Con fi gure

    workload Deploy workload Kubernetes Manifests Container Image Source Code CI/CD Pipeline (Reactive) Loosely coupled Separation of concerns Flexible Consistent path to production
  11. Check out source code Build container image Con fi gure

    workload Deploy workload Kubernetes Manifests Container Image Source Code CI/CD Pipeline (Reactive) Loosely coupled Separation of concerns Flexible Consistent path to production
  12. Workload API Developer-friendly interface @vitalethomas apiVersion: carto.run/v1alpha1 kind: Workload metadata:

    name: band-service labels: apps.kadras.io/workload-type: web spec: source: git: url: https://github.com/ThomasVitale/band-service ref: branch: main
  13. SupplyChain API Describes the path to production @vitalethomas apiVersion: carto.run/v1alpha1

    kind: ClusterSupplyChain metadata: name: supply-chain spec: selector: apps.kadras.io/workload-type: web resources: - name: source-provider templateRef: kind: ClusterSourceTemplate name: source - name: image-builder templateRef: kind: ClusterImageTemplate name: image sources: - resource: source-provider name: source - name: deployer templateRef: kind: ClusterTemplate name: app-deploy images: - resource: image-builder name: image
  14. @vitalethomas apiVersion: carto.run/v1alpha1 kind: ClusterSourceTemplate metadata: name: source spec: urlPath:

    .status.artifact.url revisionPath: .status.artifact.revision template: apiVersion: source.toolkit.fluxcd.io/v1 kind: GitRepository metadata: name: $(workload.metadata.name)$ spec: interval: 1m0s url: $(workload.spec.source.git.url)$ ref: $(workload.spec.source.git.ref)$
  15. @vitalethomas apiVersion: carto.run/v1alpha1 kind: ClusterSourceTemplate metadata: name: source spec: urlPath:

    .status.artifact.url revisionPath: .status.artifact.revision template: apiVersion: source.toolkit.fluxcd.io/v1 kind: GitRepository metadata: name: $(workload.metadata.name)$ spec: interval: 1m0s url: $(workload.spec.source.git.url)$ ref: $(workload.spec.source.git.ref)$ Template API Supply chain activities
  16. Goals 2 Reduced cognitive load 3 Clear and safe path

    to production 1 Rapid and continuous feedback loop @vitalethomas
  17. Resources Source code • Presentation source code • Kadras: Cloud

    Native Platforms Toolkit • Cloud Native Buildpacks for ARM64 • Software Supply Chain Choreography • Cartographer • Cartographer CLI • Tanzu Application Platform @vitalethomas
  18. Thomas Vitale Cloud Native Rejekts Apr 16th, 2023 Paved Paths

    to Production @vitalethomas There and Back Again