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

Dutch Azure Meetup - Orchestrating containers with AKS

Pascal Naber
September 05, 2018

Dutch Azure Meetup - Orchestrating containers with AKS

Pascal Naber

September 05, 2018
Tweet

More Decks by Pascal Naber

Other Decks in Technology

Transcript

  1. Think ahead. Act now. 18:00 Walk-in & Dinner 18:45 Pascal

    Naber 21:00 Beer and other drinks Orchestrate containers with Azure Kubernetes Service (AKS) #dutchazuremeetup SSID: Xebia-Amsterdam-Guest PWD: EasyAccess
  2. Next Meetups 8 Nov Smack your batch up! Everything about

    Azure Batch 12 Dec Building Awesome 8-bit Adventure Games with Microsoft Bot Framework 24 Jan DevOps with Azure
  3. Container orchestrators Cluster High Availability Hyper-Scale Hybrid Operations High Density

    Rolling Upgrades Stateful services Low Latency Fast startup & shutdown Container Orchestration & lifecycle management Replication & Failover Load balancing Self-healing Automated Rollback Health Monitoring Placement Constraints Microservices Service Fabric
  4. History of Kubernetes June 2014 First commit September 2014 July

    2015 March 2018 Announced Kubernetes v1 CNCF 1st Graduate
  5. Kubernetes K8s OOS Extensible Facilitates declarative configuration and automation Large,

    rapidly growing ecosystem Κυβερνήτης -- Greek: meaning helmsman or pilot 1 2 3 4 5 6 7 8
  6. Hosting of Kubernetes Local Minikube Docker for Windows (Edge) Docker

    for Mac (Edge) Raspberry Pi Private datacenter Public Cloud GKE (26-8-2015) EKS (5-6-2018) ACS (19-4-2016) AKS (13-6-2018)
  7. Think ahead. Act now. Partly managed Kubernetes Only pay for

    worker nodes Upgrades managed by Azure Workers are Managed IaaS Azure Kubernetes Service (AKS) Azure Kubernetes
  8. Install AKS using CLI ## Create resourcegroup az group create

    --name aksmeetup --location eastus ## Create Kubernetes cluster az aks create -g aksmeetup -n aksmeetup --generate-ssh-keys ## Create Kubernetes cluster az aks create --resource-group aksmeetup --name aksmeetup --kubernetes-version 1.11.2 --node-vm-size Standard_DS4_v2 --node-count 10 --ssh-key-value "C:\repos\pascal\ssh\public.pub" --service-principal d6e55af7-17fc-4cf5-b140-8b37729da10e --client-secret 94bCIHcSuniCvjq9 --enable-addons http_application_routing
  9. Kubernetes architecture Master API Server Scheduler Controller Manager Node (Minion)

    etcd kubelet Kube- Proxy cAdvisor Pod Pod Pod Kubectl (CLI) Dashboard (UI) REST client (Code)
  10. Think ahead. Act now. ## download & install kubectl az

    aks install-cli ## download credentials az aks get-credentials --resource-group aksmeetup --name aksmeetup Post Install steps
  11. Pod Group of 1 or more containers Shared Storage Shared

    Network Same IP-address and port Pod 10.0.0.1 Storage Pod 10.0.0.2 Storage Port 80 Port 8080 Port 80
  12. leaderboard-api.yaml Pod Pod Pod Replica Set Deployment Label: backend Selector

    Label: backend Label: backend Label: backend Label: backend Selector Label: backend C:> kubectl apply –f leaderboard-api.yaml
  13. Think ahead. Act now. C:> kubectl apply –f secret.yaml ##

    Create Secret to access Azure Container Registry kubectl create secret docker-registry clouddemoimages --docker-server=https://clouddemo.azurecr.io --docker-username=clouddemo --docker-password=kD98ddl$= [email protected] Secrets: Base64 encoded values Environment variables & Secrets
  14. Health checks livenessProbe Indicates whether the Container is running Restart

    in case of failure Container: https://www.app-metrics.io/ HealthChecks library https://github.com/dotnet-architecture/HealthChecks readinessProbe Indicates whether the Container is ready to service requests No traffic is routed to the Pod C:> kubectl apply –f leaderboard-api.yaml
  15. Resource Management requests: Minimum required resources limits: Capped resource usage

    100m = 0.1 cpu 500m = 0.5 cpu 64Mi = 64 MB memory 128Mi = 128 MB memory C:> kubectl apply –f leaderboard-api.yaml
  16. Horizontal Pod Autoscaler Required: Resource requests & limit Heapster Scaling

    based on 1 or multiple items CPU Memory Custom Metrics C:> kubectl apply –f leaderboard-api.yaml
  17. Horizontal Pod Autoscaler Required: Resource requests & limit Heapster C:\kubectl

    get hpa NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE autoscaler leaderboard-api 0% / 50% 1 10 1 9m C:\kubectl get hpa NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE autoscaler leaderboard-api 218% / 50% 1 10 1 10m C:\kubectl get hpa NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE autoscaler leaderboard-api 218% / 50% 1 10 4 10m C:\kubectl get hpa NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE autoscaler leaderboard-api 44% / 50% 1 10 7 13m C:\kubectl get hpa NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE autoscaler leaderboard-api 51% / 50% 1 10 6 21m
  18. Think ahead. Act now. Node 1 Pod Label: backend 10.0.0.2

    Pod Label: backend 10.0.0.3 Node 0 Pod Label: backend 10.0.0.1 Node 2 Pod Label: backend 10.0.0.4 Pod Label: backend 10.0.0.5 Pods are mortal
  19. Service Service Type: ClusterIP Selector Label: backend Node 1 Pod

    Label: backend 10.0.0.2 Node 0 Pod Label: backend 10.0.0.1 Node 2 Pod Label: backend 10.0.0.4 Pod Label: backend 10.0.0.5 192.168.0.1
  20. Service Service Type: LoadBalancer Selector Label: backend Node 1 Pod

    Label: backend 10.0.0.2 Node 0 Pod Label: backend 10.0.0.1 Node 2 Pod Label: backend 10.0.0.4 Pod Label: backend 10.0.0.5 Public ip address: 192.168.0.1 192.168.0.2
  21. Frontend Backend Pod Pod Pod Pod Pod Pod Pod Pod

    Service Type: ClusterIP Service Type: LoadBalancer Public ip address: 37.17.208.21 C:> kubectl apply –f leaderboard-service.yaml C:> kubectl apply –f gamingwebapp.yaml 192.168.0.2 192.168.0.1
  22. Too many ip-addresses. Now what? Or: I want to access

    all my services through the same ip-address
  23. Ingress Pod 10.0.0.1 Pod 10.0.0.2 Pod 10.0.0.3 Service Type: ClusterIP

    Pod 10.0.0.4 Pod 10.0.0.5 Pod 10.0.0.6 Service Type: ClusterIP Pod 10.0.0.7 Pod 10.0.0.8 Pod 10.0.0.9 Service Type: ClusterIP Service Type: LoadBalancer Public ip address: 37.17.208.21 Pod quay.io/kubernetes-ingress-controller/ nginx-ingress-controller:0.15.0 Selector Label: ingresscontroller Label: ingresscontroller Ingress host: gaming.intelligentcloud.cf serviceName: gamingwebapp Ingress host: erp. intelligentcloud.cf serviceName: erpsvc Ingress host: www.intelligentcloud.cf/crm serviceName: crmsvc nginx.conf gaming.mydomain.com 10.0.0.1 10.0.0.2 10.0.0.3 erp.mydomain.com 10.0.0.4 10.0.0.5 10.0.0.6 /crm 10.0.0.7 10.0.0.8 10.0.0.9 Automatically generated Label: erp Label: frontend Label: crm
  24. Helm Helm is a tool for managing packages of pre-configured

    Kubernetes resources https://github.com/kubernetes/helm Linkerd Logstash Magento Mariadb Mongodb Mssql-linux Mysql Neo4j Newrelic Openvpn Postgresql Presto Prometheus Rabbitmq Redis Selenium Sonarqube Spinnaker Sysdig Tensorflow Traefik Wordpress Artifactory Cert-manager Consul Cassandra Couchdb Datadog Docker-registry Drupal Elasticsearch Ethereum fluentd Gitlab Grafana Hadoop Heapster Jenkins Joomla Kafka Kibana Kong Kubeless Lamp
  25. Helm # Download Helm https://github.com/kubernetes/helm/releases # To install Tiller on

    the cluster run helm init # Get latest version of the stable charts helm repo update # Install a chart helm install --name monitor stable/Prometheus helm install --name dashboard stable/grafana -f "C:\Demos\monitoring\values.yaml"
  26. Think ahead. Act now. Starts in seconds No VM Management

    Billed per second Linux and Windows containers Azure Container Instances (ACI) Azure Azure Container Instances (ACI) Pod Pod Pod Pod Pod Pod Pod Pod Pod Pod Pod Pod Pod Pod Pod Pod Pod Pod Pod Pod Pod Pod Pod Pod
  27. Kubernetes on Azure Kubernetes cluster Master Azure Container Instances (ACI)

    Pod Pod Pod Pod Pod Pod Pod Pod Pod Pod Pod Pod Pod Pod Pod Pod Pod Pod Pod Pod Pod Pod Pod Pod Pod Pod Pod Pod Pod Pod Pod Pod Pod Pod Pod Pod Pod Pod Pod Pod Pod Pod
  28. Deployment Replica set Pod Label Rolling update Health check Environment

    variables Secret Resource management Horizontal Pod Autoscaler Namespace Service Ingress Annotation Affinity Persistent Volume Cron Job Deamon Set Job Stateful Set Config Map
  29. Wrap up Docker Delivery of production images instead of code

    ready to ship Environment agnostic Development Azure Kubernetes Services Managed Master + Managed IaaS for workers Provides scaling, rolling updates, fault tolerant
  30. Think ahead. Act now. P4l Naber Coding Azure Architect Xpirit

    Netherlands @pascalnaber http://pascalnaber.wordpress.com https://pages.xpirit.com/magazine2018 https://github.com/DutchAzureMeetup/orchestrate-containers-with-aks