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

K8s_Meetup_Toronto_N1_101

 K8s_Meetup_Toronto_N1_101

1st Kubernetes Meetup in Toronto, K8s Intro

cncf-canada-meetups

November 14, 2016
Tweet

More Decks by cncf-canada-meetups

Other Decks in Technology

Transcript

  1. • Introduction • Kubernetes 101, KubeCon • K8s 1.4 •

    Operationalizing Kubernetes - Moving your App to Production Agenda
  2. Page Introduction 4 Organizers Toronto, Montreal, Ottawa - Initiative from

    CloudOps • Ayrat (Archy) Khayretdinov • Julia Simon
  3. Page Kubernetes Toronto - Plans for 2017 • Community-driven -

    tell us what you want to learn! • Ecosystem • Quarterly meetups or more frequently if possible • Looking for sponsors, organizers, speakers (reach us via meetup.com) 5
  4. Page Kubernetes Toronto - Topics • Kubernetes and ecosystem •

    Container ecosystem: Docker and Rkt • Networking, storage and scheduling for K8s • Using Kubernetes with CM, CI/CD • Unique use cases and how Kubernetes helped your team/company • Deploying and using Kubernetes in production in the enterprise • Containerized App Development • PaaS, IaaS integrations • Cool new tech and how it can be used with Kubernetes • Kubernetes + IoT • Day 2 Operations (monitoring, troubleshooting, upgrades) of K8s cluster • Orchestrating multi-host, multi-container, distributed applications • Using Kubernetes to manage and secure your application infrastructure
  5. cloudops.com @cloudops_ Page Who am I? 14 Ayrat Khayretdinov •

    OpenStack/K8s Engineer at CloudOps • Part of SIG-Openstack Kubernetes community • Organizing OpenStack and K8s Meetup in Montreal
  6. Page Dependency Matrix Hell 16 Dev 1 Laptop Dev 2

    Laptop QA Stage Production OS OS X Windows Debian Debian Debian Frontend nginx (homebrew) nginx (download) nginx (apt-get) nginx (apt-get) nginx (apt-get) Services php (homebrew) php (download) php (apt-get) php (apt-get) php (apt-get) Database mysql (download) mysql (download) mysql (apt-get) mysql (apt-get) mysql (apt-get) Logs /usr/local/etc/nginx/logs/ C:\nginx-1.9.5\logs /var/log/nginx/ /var/log/nginx/ /var/log/nginx/
  7. Page 20 Dependency Matrix Hell Solved Dev 1 Laptop Dev

    2 Laptop QA Stage Production OS Frontend Services Database Logs
  8. Page A Toolkit for Running Containerized Distributed Systems in Production

    24 Co-locating helper processes Mounting storage systems Distributing secrets Application health checking Replicating application instances horizontal auto-scaling Naming and discovery Load balancing Rolling updates resource Monitoring Log access and ingestion support for debugging
  9. Page Container Runtime 25 Not all containers are Docker containers

    Kubernetes support rkt containers runtime start from v 1.3 In devel: hyper_ (Hyper.sh), LXC AVOID LOCK-IN
  10. Page How to consume Kubernetes ? 28 • From Scratch

    - anywhere • Public Cloud ◦ GCE, Amazon, Azure • Private Cloud ◦ OpenStack (Murano, Magnum) ◦ CloudStack • Hosted • On premises VMs ◦ VMware • Local-machine Solutions ◦ MiniKube ◦ Kubeadm (alpha 1.4)
  11. Page Minikube 29 Develop and test K8s apps locally: •

    Provide access to all portable K8s features Develop against local K8s Cluster • Lightweight single-command installation • Works across Limux, Mac OSx and Windows • Include all dependencies • Local cluster can managed via kubectl • Built-in Dashboard Status: GA since Kubernetes 1.3 Check out: Minikube repo!
  12. Page Install kubelet and kubeadm on your hosts # apt-get

    install -y docker.io kubelet kubeadm kubectl kubernetes-cni Initializing your master: #kubeadm init Joining your nodes: #kubeadm join --token <token> <master-ip> Installing a pod network: # kubectl apply -f https://git.io/weave-kube daemonset "weave-net" created Kubeadm (alpha in Kubernetes 1.4) 30
  13. cloudops.com @cloudops_ Page Tools 31 • Native tools ◦ Kubernetes

    Web UI (Dashboard) ◦ Kubectl • Third-party tools ◦ Helm ◦ Kompose
  14. cloudops.com @cloudops_ Page Kubernetes Web UI (Dashboard) 32 (Optional) Deployed

    as an Addon Dashboard UI allows to: • get an overview of applications running on the cluster • deploy containerized applications to a Kubernetes cluster • troubleshoot containerized applications • manage the cluster and its resources itself Kubernetes 1.4 Dashboard UI exposes 90% of resources that accesible via kubectl API.
  15. cloudops.com @cloudops_ Page Kubernetes CLI (kubectl) 34 Can be installed

    on any machine able to access the API server $ kubectl run echoserver \ --image=gcr.io/google_containers/echoserver:1.4 \ --port=8080 deployment "echoserver" created
  16. cloudops.com @cloudops_ Page Kubernetes CLI (kubectl) 35 kubectl be used

    to manage several Kubernetes clusters Configure kubectl context on the local environments: • kubectl config set-cluster kubernetes --server=http://<master_IP>:8080 • kubectl config set-context kubelet-context --cluster=kubernetes --user="" • kubectl config use-context kubelet-context Verify kubectl Configuration and Connection: • kubectl config view The resulting kubeconfig file will be stored in ~/.kube/config and can be sourced at any time afterwards.
  17. Page Concept: Pods 37 Pod Git Synchronizer Node.js App Container

    Volume Consumers git Repo Logical Application Can be used to group multiple containers & shared volumes Containers within a pod are tightly coupled Shared namespaces • Containers in a pod share IP, port and IPC namespaces • Containers in a pod talk to each other through localhost Ephemeral
  18. Page Concept: Pods Create a single container pod and a

    deployment $ kubectl run example --image=nginx deployment "example" created Create a pod $ kubectl create -f mypod.yaml pod "mypod" created
  19. Page Working with configuration files Kubernetes supports two different file

    formats YAML and JSON. Each format can describe the same function of K8s: • YAML The YAML format is very simple with less syntax rules. Refer to http://www.yaml.org/spec/1.2/spec.html The following example uses the YAML format to set up the nginx pod: • JSON The JSON format is also simple and easy to read by humans, but more program-friendly. Because it has data types (number, string, Boolean, and object), it is popular to exchange the data between systems. Refer to http://json.org/ • SWAGGER There is an alternative way, because Kubernetes is also using swagger (http://swagger.io/) to generate the REST API; therefore, you can access swagger-ui via http://<kubernetes-master>:8080/swagger-ui/. Example of configs: https://github.com/kubernetes/kubernetes/tree/master/examples 39
  20. Page Concept: Labels 41 • Arbitrary metadata • Attached to

    any API object • Generally represent identity • Queryable by selectors – think SQL ‘select ... where ...’ • The only grouping mechanism – pods under a ReplicationController – pods in a Service – capabilities of a node (constraints) Example: “phase: Dev”
  21. Page Replication Controllers and Deployments Controller manages a set of

    pods • Makes sure that the cluster is in the specified state • Runs in Controller Manager Controller types • Replication controller (soon to be deprecated) Responsible for running the specified number of pod’s copies ("replicas") across the cluster • Deployment controller (prefered way: next gen. RC) Responsible for changing the actual state to the desired state at a controlled rate
  22. Page Feature: Rolling Update Node1 Node3 Node2 ghost Pod app

    v1 Service ghost Pod app v1 Pod app v1
  23. Page Feature: Rolling Update Node1 Node3 Node2 ghost Pod app

    v1 Service ghost Pod app v1 Pod app v1 Pod app v2
  24. Page Feature: Rolling Update Node1 Node3 Node2 ghost Pod app

    v1 Service ghost Pod app v1 Pod app v1 Pod app v2
  25. Page Feature: Rolling Update Node1 Node3 Node2 ghost Pod app

    v1 Service ghost Pod app v1 Pod app v1 Pod app v2
  26. Page Deployment - next gen. RC - Beta in Kubernetes

    1.3 64 64 ... Defines a desired state for logical group of • Pods • Replica Sets (RS) Deployment controller drives the actual state to the desired state at a controlled rate • Creates new resources, if necessary • Replaces the existing resources, if necessary Deployment can be • Updated • Rolled out • Rolled back
  27. Page Concept: Services 65 • A group of pods that

    act as one == Service – group == selector • Services Types: – Load balanced (from CloudProvider) – NodePort (Minikube) – ClusterIP (interal only) - - - -
  28. 1.2 • Deployments • DaemonSets • New UI • Simplified

    Deployments • Automated Cluster Management • Improved Scale 1.3 • Legacy application support • Cluster Federation • More nodes • In-cluster IAM • Scheduled jobs • Cluster autoscaling • Public cloud dashboard
  29. Page Kubernetes 1.4 release update 70 • Kubeadm - create

    K8s cluster with 2 commands • Extended stateful apps support ◦ Tested Helm Charts • Cluster federation for following resources: ◦ RS, Namespaces, Secrets, Events, Ingress for Multy-Zone Clusters • Nicer Kubernetes Dashboard • Infra enhancement and more!@
  30. Page How to consume Kubernetes ? 71 • From Scratch

    - anywhere • Public Cloud ◦ GCE, Amazon, Azure • Private Cloud ◦ OpenStack (Murano, Magnum) ◦ CloudStack • Hosted • Rancher
  31. Page Rancher on cloud.ca 72 Turnkey solution to run your

    private container service from a Canadian cloud provider to maintain data sovereignty trial.cloud.ca