Slide 1

Slide 1 text

Nilesh Gule @nileshgule | www.HandsOnArchitect.com Scaling .Net Core Containers with Azure Kubernetes Service and Serverless ACI

Slide 2

Slide 2 text

$whoami { “name” : “Nilesh Gule”, “website” : “https://www.HandsOnArchitect.com", “github” : “https://GitHub.com/NileshGule" “twitter” : “@nileshgule”, “linkedin” : “https://www.linkedin.com/in/nileshgule”, “likes” : “Technical Evangelism, Cricket”, “co-organizer” : “Azure Singapore UG” }

Slide 3

Slide 3 text

No content

Slide 4

Slide 4 text

@nileshgule Containerize .Net Core App Build & publish Docker images to private Azure Container Registry (ACR) Autoscale using k8s K8s deployment, KEDA autoscaling, extending to serverless Azure Container Instences (ACI) Application Overview Docker Images Container Registries Kubernetes deployment Autoscaling with KEDA Serverless container with ACI Agenda

Slide 5

Slide 5 text

No content

Slide 6

Slide 6 text

@nileshgule RabbitMQ Demo – Producer & Consumer 1000 (configurable) messages Batch of 50 (configurable) messages https://github.com/NileshGule/pd-tech-fest-2019

Slide 7

Slide 7 text

@nileshgule Docker – main features Security Process isolation, resource limits Portability Runs across multiple env with Docker runtime Performance Smaller footprint than VM, lightning fast Multi-cloud Deploy Docker images to multi-cloud environments Isolation Isolates multiple versions of dependencies Agility Integrates into CI CD pipelines

Slide 8

Slide 8 text

Demo build & publish docker images

Slide 9

Slide 9 text

@nileshgule RabbitMQ Demo – Docker Images https://github.com/NileshGule/pd-tech-fest-2019  Docker multi-stage builds  Docker-compose, build & publish multiple images  Azure Container Registry (ACR) private registry

Slide 10

Slide 10 text

@nileshgule RabbitMQ Demo –Docker Container Registry

Slide 11

Slide 11 text

@nileshgule Kubernetes – main features Self healing Restart / Replace / kill containers based on heath checks Service discovery & LB Expose container using DNS name or IP Secrets & Config Mgt Manage sensitive info (pwd / Oauth tokens / SSH keys etc) Auto bin packing Fits containers to nodes based on resource limits Storage Orchestration Mount storage from local, public cloud oro ther sources Auto rollout & rollback Desired state configuration to manage rollouts & upgrades

Slide 12

Slide 12 text

@nileshgule

Slide 13

Slide 13 text

Demo deploy application containers

Slide 14

Slide 14 text

@nileshgule RabbitMQ Demo – Kubernetes deployment https://github.com/NileshGule/pd-tech-fest-2019  Manifest files describe Deployment and Service  Helm charts to deploy third-party apps / services  Octant – visualize k8s cluster  Kubectl to deploy Manifest

Slide 15

Slide 15 text

AKS Managed Identity (aksmqcluster-agentpool) nileshgule/techtalksmqproducer nileshgule/techtalksmqconsumer ngACRRegistry aksmqCluster ngacrregistry.azurecr.io/nileshgule /techtalksmqproducer ngacrregistry.azurecr.io/nileshgule/ techtalksmqconsumer Acr pull acrResourceGroup demo-kedaSeriesRG docker push using azure user token Acr login using AAD No need to use Admin user

Slide 16

Slide 16 text

@nileshgule Kubernetes Scaling Options 1 2 3 Horizontal Pod Autoscaler Cluster Autoscaler Manual scaling

Slide 17

Slide 17 text

KEDA Architecture

Slide 18

Slide 18 text

Azure Event Hub Azure Service Bus Queues and Topics Azure Storage Queues Kafka Prometheus RabbitMQ Redis Lists Liiklus NATS AWS CloudWatch AWS Simple Queue Service GCP PubSub Integrates with Azure functions

Slide 19

Slide 19 text

@nileshgule RabbitMQ Demo – KEDA Event driven autoscaling  RabbitMQ event source  KEDA autoscaler to scale consumer deployment 1000 (configurable) messages Batch of 50 (configurable) messages https://github.com/NileshGule/pd-tech-fest-2019

Slide 20

Slide 20 text

Demo deploy KEDA on AKS cluster

Slide 21

Slide 21 text

apiVersion: keda.k8s.io/v1alpha1 kind: ScaledObject metadata: name: rabbitmq-consumer namespace: default labels: deploymentName: rabbitmq-consumer-deployment spec: scaleTargetRef: deploymentName: rabbitmq-consumer pollingInterval: 5 # Optional. Default: 30 seconds cooldownPeriod: 30 # Optional. Default: 300 seconds minReplicaCount: 1 # Optional. Default: 0 maxReplicaCount: 30 # Optional. Default: 100 triggers: - type: rabbitmq metadata: queueName: hello queueLength : ‘5’ authenticationRef: name: trigger-auth-rabbitmq-host

Slide 22

Slide 22 text

No content

Slide 23

Slide 23 text

Pros Cons

Slide 24

Slide 24 text

Scale RabbitMQ Consumer with Virtual Node kedaVNet kedaAKSSubnet kedaVirtualNodeSubnet Producer - .Net Core API Consumers - .Net Core exe

Slide 25

Slide 25 text

Demo extend KEDA with Virtual Node

Slide 26

Slide 26 text

Summary • Self contained application with all its dependencies Docker • Orchestrates containers • Self healing • Service discovery • Scaling Kubernetes • Extends Kubernetes with event driven capabilities KEDA

Slide 27

Slide 27 text

Play with Docker Play with Kubernetes Kubernetes Learning Path : MSLearn Linux Academy learning paths

Slide 28

Slide 28 text

AKS cluster-autoscalar Virtual Node Horizontal pod autoscale virtual kubelet KEDA https://azure.microsoft.com/mediahandler/files/resourcefiles/kubernetes-learning- path/Kubernetes%20Learning%20Path%20version%201.0.pdf

Slide 29

Slide 29 text

No content

Slide 30

Slide 30 text

Azure Kubernetes Service Workshop References

Slide 31

Slide 31 text

https://github.com/NileshGule/pd-tech-fest-2019

Slide 32

Slide 32 text

Thank you very much Code with Passion and Strive for Excellence https://www.slideshare.net/nileshgule/presentations https://speakerdeck.com/nileshgule/

Slide 33

Slide 33 text

Nilesh Gule ARCHITECT | MICROSOFT MVP “Code with Passion and Strive for Excellence” nileshgule @nileshgule Nilesh Gule NileshGule www.handsonarchitect.com

Slide 34

Slide 34 text

Q&A