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

A Paved Path to Production on Kubernetes

A Paved Path to Production on Kubernetes

Customers are looking forward to getting a new feature in our application. Developers implemented it and pushed the changes to Git. How can we go from code commit to feature available in production on Kubernetes? How can we do that in a productive and secure way?

Following the continuous delivery principles, I’ll show how to design a paved path to production with a superior experience for developers while giving operators enough flexibility and control. Using Cartographer, we’ll choreograph our way from code commit to deployment on Kubernetes and build a complete CI/CD pipeline.

We’ll then monitor Git repositories with Flux, containerize applications with Cloud Native Buildpacks, run automated tests with Tekton, scan images with Trivy, configure workloads with Carvel, and deploy them with Knative.

The presentation focuses on open source technologies and includes a hands-on demo you can run in your Kubernetes environments and use as a foundation for your real-world supply chains.

Thomas Vitale

March 23, 2023
Tweet

More Decks by Thomas Vitale

Other Decks in Technology

Transcript

  1. Thomas Vitale The Golden Path to SpringOne Mar 23rd, 2023

    A Paved Path to Production on Kubernetes @vitalethomas
  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. From Traditional to Cloud Native Application Server, Embedded Server Runtime

    (JVM) Middleware (Application Server) Application (WAR/EAR) Runtime (JVM) Application (JAR) @vitalethomas
  5. Moving to Containers Application Server, Embedded Server, Container Runtime (OCI)

    Application (Container) Runtime (JVM) Middleware (Application Server) Application (WAR/EAR) Runtime (JVM) Application (JAR) @vitalethomas
  6. Moving to Kubernetes Application Server, Embedded Server, Container, Kubernetes Runtime

    (OCI) Middleware (Kubernetes) Application (Container) Runtime (JVM) Middleware (Application Server) Application (WAR/EAR) Runtime (JVM) Application (JAR) Runtime (OCI) Application (Container) @vitalethomas
  7. Goals 2 Reduced cognitive load 3 Clear and safe path

    to production 1 Rapid and continuous feedback loop @vitalethomas
  8. 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
  9. Check out source code Build container image Con fi gure

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

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

    workload Deploy workload Kubernetes Manifests Container Image
  12. 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
  13. 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
  14. 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
  15. 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
  16. @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)$
  17. @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
  18. Goals 2 Reduced cognitive load 3 Clear and safe path

    to production 1 Rapid and continuous feedback loop @vitalethomas
  19. 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
  20. Thomas Vitale The Golden Path to SpringOne Mar 23rd, 2023

    A Paved Path to Production on Kubernetes thomasvitale.com @vitalethomas @[email protected]