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

Ignite the Tour Johannesburg 2019 The Ultimate introduction to Kubernetes on Azure

Ignite the Tour Johannesburg 2019 The Ultimate introduction to Kubernetes on Azure

Pascal Naber

January 28, 2019
Tweet

More Decks by Pascal Naber

Other Decks in Technology

Transcript

  1. 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 Service Fabric Mesh
  2. 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)
  3. History of Kubernetes June 2014 First commit September 2014 July

    2015 March 2018 Announced Kubernetes v1 CNCF 1st Graduate
  4. Kubernetes k8s OOS Extensible Large, rapidly growing ecosystem Facilitates declarative

    configuration and automation Κυβερνήτης -- Greek: meaning helmsman or pilot 1 2 3 4 5 6 7 8
  5. Hosting of Kubernetes Local Minikube Docker for Windows Docker for

    Mac Raspberry Pi Private datacenter Public Cloud GKE (26-8-2015) EKS (5-6-2018) ACS (19-4-2016) AKS (13-6-2018)
  6. 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
  7. Install AKS using CLI ## Create resourcegroup az group create

    --name ignitetour --location eastus ## Create Kubernetes cluster az aks create -g aksdemo -n ignitetour --generate-ssh-keys ## Create Kubernetes cluster az aks create --resource-group ignitetour --name aksdemo --kubernetes-version 1.11.5 --node-vm-size Standard_DS2_v2 --node-count 3 --ssh-key-value "C:\repos\pascal\ssh\public.pub" --service-principal d6e55af7-17fc-4cf5-b140-8b37729da10e --client-secret 94bCIHcSuniCvjq9 --enable-addons http_application_routing
  8. ## download & install kubectl az aks install-cli ## download

    credentials az aks get-credentials --resource-group ignitetour --name aksdemo ## Create clusterrolebinding to access the dashboard kubectl create clusterrolebinding kubernetes-dashboard -n kube-system --clusterrole=cluster-admin --serviceaccount=kube-system:kubernetes-dashboard Post Install steps
  9. Pod Group of 1 or more containers Shared Storage Shared

    Network Same IP-address Shared port-range Pod 10.0.0.1 Storage Pod 10.0.0.2 Storage Port 80 Port 8080 Port 80
  10. 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
  11. 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
  12. 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
  13. 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
  14. 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
  15. 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
  16. 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
  17. 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
  18. 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: 37.17.208.21 192.168.0.2
  19. 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
  20. Too many ip-addresses. Now what? I want to access all

    my services through the same ip-address
  21. 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. ignitetour.cf serviceName: gamingwebapp Ingress host: erp.ignitetour.cf serviceName: erpsvc Ingress host: www. ignitetour.cf/crm serviceName: crmsvc nginx.conf gaming. ignitetour.cf 10.0.0.1 10.0.0.2 10.0.0.3 erp. ignitetour.cf 10.0.0.4 10.0.0.5 10.0.0.6 Ignitetour.cf/crm 10.0.0.7 10.0.0.8 10.0.0.9 Automatically generated Label: erp Label: frontend Label: crm Addon Http Application Routing
  22. Deployment Replica set Pod Label Rolling update Health check Environment

    variables Secret Resource management Horizontal Pod Autoscaler Namespace Service Ingress Annotation Persistent Volume Cron Job Deamon Set Job Stateful Set Config Map
  23. 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
  24. 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"
  25. 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
  26. 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
  27. 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