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

Progressive Delivery with Istio and Argo Rollouts

Progressive Delivery with Istio and Argo Rollouts

Production is the place where all applications should live. Even though you are using Continuous Integration and Delivery, you still might wonder every time you release a new version to production whether it will actually work or if you will run into unforeseen issues related to your production environment and/or load, and whether your production environment will become unavailable to your customers.

Progressive delivery is the next step after Continuous Delivery to test your application in production before it becomes fully available to all your user bases.

Embrace progressive delivery with techniques like the blue-green, canary release, shadowing traffic, or dark launches to validate the application in production using Kubernetes and tools like Istio, Prometheus, ArgoCD, or Argo Rollouts.

Kevin Dubois

February 15, 2023
Tweet

More Decks by Kevin Dubois

Other Decks in Technology

Transcript

  1. Alex Soto (lordofthejars.com) • @alexsotob • [email protected] • Currently Red

    Hat’s Director of Developer Experience • Featured speaker at technology events around the globe • A Java Champion since 2017 • Writer, University Professor, Radio collaborator • A big fan of testing and continuous delivery in 21st century
  2. @kevindubois Kevin Dubois • Principal Developer Advocate at Red Hat

    • 18+ years of experience building and delivering software applications • Speak English, Dutch, French, Italian • Passionate about improving Dev Experience with Open Source @[email protected] youtube.com/@thekevindubois linkedin.com/in/kevindubois github.com/kdubois
  3. @alexsotob @alexsotob What is Progressive Delivery? Build Test Security Checks

    Release Deploy Stage Deploy Prod Continuous Integration Continuous Delivery
  4. @alexsotob @alexsotob What is Progressive Delivery? • No Big Bang

    • Deploy != Release • Metrics • Subset of Users
  5. @alexsotob @alexsotob Blue - Green 19 apiVersion: v1 kind: Service

    metadata: name: my-service labels: app: mystuff spec: ports: - name: http port: 8000 selector: inservice: mypods type: LoadBalancer apiVersion: apps/v1 kind: Deployment metadata: name: mynode-deployment spec: replicas: 1 selector: matchLabels: app: mynode template: metadata: labels: app: mynode spec: containers: - name: mynode image: quay.io/rhdevelopers/mynode:v1 ports: - containerPort: 8000 kubectl label pod -l app=mypython inservice=mypods
  6. @alexsotob @alexsotob Canary Release 21 apiVersion: networking.istio.io/v1alpha3 kind: VirtualService metadata:

    name: recommendation spec: hosts: - recommendation http: - route: - destination: host: recommendation subset: version-v1 weight: 75 - destination: host: recommendation subset: version-v2 weight: 25
  7. @alexsotob @alexsotob Shadowing Traffic 22 apiVersion: networking.istio.io/v1alpha3 kind: VirtualService metadata:

    name: recommendation spec: hosts: - recommendation http: - route: - destination: host: recommendation subset: version-v1 mirror: host: recommendation subset: version-v2
  8. @alexsotob @alexsotob Dark Canary 23 apiVersion: networking.istio.io/v1alpha3 kind: VirtualService metadata:

    name: recommendation spec: hosts: - recommendation http: - match: - headers: end-user: exact: Alexandra route: - destination: host: recommendation subset: version-v2 - route: - destination: host: recommendation subset: version-v1
  9. @alexsotob @alexsotob Next Generation Microservices - Service Mesh 25 Code

    Independent (Polyglot) • Intelligent Routing and Load-Balancing • Smarter Canary Releases • Dark Launch • Chaos: Fault Injection • Resilience: Circuit Breakers • Observability & Telemetry: Metrics and Tracing • Security: Encryption & Authorization • Fleet wide policy enforcement
  10. @alexsotob Sidecar Container Pod Container JVM Service A Sidecar Container

    Pod Container JVM Service C Sidecar Container Pod Container JVM Service B Sidecar Container With Istio The sidecar intercepts all network traffic
  11. @alexsotob @alexsotob Rolling out automatically 32 apiVersion: argoproj.io/v1alpha1 kind: Rollout

    metadata: name: bubblebackend labels: app: bubblebackend spec: strategy: canary: steps: - setWeight: 20 - pause: duration: "1m" - setWeight: 50 - pause: duration: "2m" canaryService: bubble-backend-canary stableService: bubble-backend trafficRouting: istio: virtualService: name: bubble-backend routes: - primary …
  12. @alexsotob @alexsotob Final Notes • State is always hard, start

    with stateless • Step by Step • Embrace GitOps • If you haven’t automatically destroyed something by mistake, you aren’t automating enough • Demos ◦ https://dn.dev/istio-tutorial ◦ https://github.com/redhat-developer-demos/bubbles-progressive-delivery 35