39
1 Kubernetes Introduction Rafael Benevides & Edson Yanaga [email protected] / [email protected] @rafabene / @yanaga http://bit.ly/kubernetes-intro

Kubernetes for Java Developers

Embed Size (px)

Citation preview

Page 1: Kubernetes for Java Developers

1

Kubernetes Introduction

Rafael Benevides & Edson [email protected] / [email protected]

@rafabene / @yanagahttp://bit.ly/kubernetes-intro

Page 2: Kubernetes for Java Developers

Rafael BenevidesDirector of Developer Experience at Red HatApache DeltaSpike P.M.C

[email protected] @rafabene

Java Certifications:SCJA / SCJP / SCWCD / SCBCD / SCEA

JBoss Certifications: JBCD / JBCAA

Red Hat Certifications: OpenShift / Containers / Ansible

Other Certifications:SAP Netweaver / ITIL / IBM Software Quality

Page 3: Kubernetes for Java Developers

Edson YanagaDirector of Developer Experience at Red Hat

[email protected] @yanaga

Java Champion

Microsoft MVP

Page 4: Kubernetes for Java Developers

developers.redhat.com

http://developers.redhat.comhttp://developers.redhat.com

Page 5: Kubernetes for Java Developers

@rafabene / @yanaga

Why do you want to run your application inside containers?

Page 6: Kubernetes for Java Developers

@rafabene / @yanaga

● Lightweight footprint and minimal overhead,● Portability across machines,● Simplify DevOps practices,● Speeds up Continuous Integration,● Empower Microservices Architectures.● Isolation

ContainerAdvantages

Container Engine

Page 7: Kubernetes for Java Developers

@rafabene / @yanaga

A way to run a Linux container:

$ docker run -d <image-name>

A single and isolated Linux process running in a single machine

Page 8: Kubernetes for Java Developers

@rafabene / @yanaga

DevOps challenges for multiple containers

● How to scale?

● How to avoid port conflicts?

● How to manage them in multiple hosts?

● What happens if a host has a trouble?

● How to keep them running?

● How to update them?

● Where are my containers?

Node Node

Logger

Node

Node Node Node

Page 9: Kubernetes for Java Developers

@rafabene / @yanaga

Greek for “Helmsman”; also the root of the word “Governor” (from latin: gubernator)

● Container orchestrator

● Supports multiple cloud and bare-metal environments

● Inspired by Google’s experience with containers

● Open source, written in Go

Manage applications, not machines

Meet Kubernetes

Page 10: Kubernetes for Java Developers

@rafabene / @yanaga

Version 1.3

Hosted on GitHub

800+ contributors

34,000+ commits

16,000+ GitHub stars

Red Hat

HP

IBM

Mesosphere

Microsoft

Project Partners

CoreOS

Pivotal

SaltStack

VMWare

http://kubernetes.io/

https://github.com/kubernetes/kubernetes

Open Source community

Page 11: Kubernetes for Java Developers

Master

API Server

Service Layer

VirtualPhysical Private Public

PersistentStorage

Node Node

Logger

Node

Node Node Node

Dev

Ops

SCM(Git/Svn)

CI/CD

Automation

Routing LayerRegistry

SDN Overlay Network

Controllers- Scheduler- Replication- Services- Builds- Routes- Deployment

Kubernetes

OpenShift- Deployments- Builds- ImageStreams

Page 12: Kubernetes for Java Developers

@rafabene developers.redhat.com

Kubernetes Concepts

Pod ReplicationController

Service Label

One or More ContainersShared IPShared Storage VolumeShared ResourcesShared Lifecycle

Ensures that a specified number of pod replicas are running at any one time

Grouping of pods, act as one, has stable virtual IP and DNS name

Key/Value pairs associated with Kubernetes objects(e.g. env=production)

Page 13: Kubernetes for Java Developers

@rafabene / @yanaga

Concept: Pod

● Group of containers● Live and die together● Share:

○ IP○ Secrets○ Labels *○ Volumes *

* we will talk about these concepts later

Labels

Application

Administrative console

Log collector

IP: 10.x.x.x

Volume

Page 14: Kubernetes for Java Developers

@rafabene / @yanaga

Concept: POD

Defining a POD as YAML:

apiVersion: v1kind: Podmetadata: name: myPod labels: key: valuespec: containers: - name: mysql image: username/image - name: phpMyAdmin image: username/image2

key: value

myPOD

mysql

phpMy..

Page 15: Kubernetes for Java Developers

SCM(Git/Svn)

Master

API Server

Service Layer

VirtualPhysical Private Public

PersistentStorage

Node Node

Logger

Node

Node Node Node

Dev

Ops

CI/CD

Automation

Routing LayerRegistry

SDN Overlay Network

Controllers- Scheduler- Replication- Services- Builds- Routes- Deployment

Kubernetes

OpenShift- Deployments- Builds- ImageStreams

Page 16: Kubernetes for Java Developers

SCM(Git/Svn)

Master

API Server

Service Layer

VirtualPhysical Private Public

PersistentStorage

Node Node

Logger

Node

Node Node Node

Dev

Ops

CI/CD

Automation

Routing LayerRegistry

SDN Overlay Network

Controllers- Scheduler- Replication- Services- Builds- Routes- Deployment

Kubernetes

OpenShift- Deployments- Builds- ImageStreams

Page 17: Kubernetes for Java Developers

SCM(Git/Svn)

Master

API Server

Service Layer

VirtualPhysical Private Public

PersistentStorage

Node Node

Logger

Node

Node Node Node

Dev

Ops

CI/CD

Automation

Routing LayerRegistry

SDN Overlay Network

Controllers- Scheduler- Replication- Services- Builds- Routes- Deployment

Kubernetes

OpenShift- Deployments- Builds- ImageStreams

Page 18: Kubernetes for Java Developers

@rafabene / @yanaga

Concept: Replication Controllers

Defining a Replication Controller as YAML:apiVersion: v1kind: Podmetadata: name: myPod labels: key: valuespec: containers: - name: myPod image: username/image ports: - name: http containerPort: 8080

apiVersion: v1kind: ReplicationControllermetadata: name: myRCspec: replicas: 4 template: metadata: spec:

Page 19: Kubernetes for Java Developers

@rafabene / @yanaga

Concept: Labels

App: CoolEnv: DevVersion: 1.0

App: CoolEnv: ProdVersion: 1.0

App: CoolEnv: DevVersion: 2.0

App: CoolEnv: ProdVersion: 2.0

Everything in Kubernetes can have a label

Node

Logger

Node

NodeNode

Page 20: Kubernetes for Java Developers

@rafabene / @yanaga

Concept: Labels

App: CoolEnv: DevVersion: 1.0

App: CoolEnv: ProdVersion: 1.0

App: CoolEnv: DevVersion: 2.0

App: CoolEnv: ProdVersion: 2.0

Node

Logger

Node

NodeNode

Page 21: Kubernetes for Java Developers

@rafabene / @yanaga

Concept: Labels

App: CoolEnv: DevVersion: 1.0

App: CoolEnv: ProdVersion: 1.0

App: CoolEnv: DevVersion: 2.0

App: CoolEnv: ProdVersion: 2.0

Node

Logger

Node

NodeNode

Page 22: Kubernetes for Java Developers

@rafabene / @yanaga

Concept: Labels

App: CoolEnv: DevVersion: 1.0

App: CoolEnv: ProdVersion: 1.0

App: CoolEnv: DevVersion: 2.0

App: CoolEnv: ProdVersion: 2.0

Node

Logger

Node

NodeNode

Page 23: Kubernetes for Java Developers

@rafabene / @yanaga

Concept: Labels

App: CoolEnv: DevVersion: 1.0

App: CoolEnv: ProdVersion: 1.0

App: CoolEnv: DevVersion: 2.0

App: CoolEnv: ProdVersion: 2.0

Node

Logger

Node

NodeNode

Page 24: Kubernetes for Java Developers

@rafabene / @yanaga

Concept: Labels

App: CoolEnv: DevVersion: 1.0

App: CoolEnv: DevVersion: 2.0

App: CoolEnv: ProdVersion: 1.0

App: CoolEnv: ProdVersion: 2.0

Node

Logger

Node

NodeNode

Page 25: Kubernetes for Java Developers

@rafabene / @yanaga

Concept: Labels

metadata:

name: objectName

labels:

App: Cool

Env: Dev

Version: 1.0

Defining Labels as YAML:(can be placed in any object metadata)

App: CoolEnv: DevVersion: 1.0

Page 26: Kubernetes for Java Developers

@rafabene / @yanaga

Node 2

POD

App: CoolEnv: ProdVersion: 1.0

POD

ServiceLabels selector:● App=Cool● Env=Prod

IP: 172.x.x.xApp: NiceEnv: ProdVersion: 1.0

Concept: Services

Node 1

POD

Page 27: Kubernetes for Java Developers

@rafabene / @yanaga

Concept: Services

apiVersion: v1kind: Servicemetadata: name: myService labels: ...spec: ports: - port: 80 targetPort: 80 selector: App: Cool Env: Prod

Defining a Service as YAML:

myServiceLabels selector:● App=Cool● Env=Prod

IP: 172.x.x.x

Page 28: Kubernetes for Java Developers

@rafabene / @yanaga

Using Environment variables:

Using internal DNS: $ ping mysql

Service discovery inside Kubernetes

Page 29: Kubernetes for Java Developers

@rafabene / @yanaga

Other concepts

Rolling updatesPersistent Volumes

Page 30: Kubernetes for Java Developers

@rafabene / @yanaga

Admin Owned

Users Owned

Persistent Volume

GCE PD AWS LB

NFS GlusterFS

Persistent Volume Claim

POD Volume

● Admin provisions them, Users claim them

● High-level abstraction

● Pods can mount PVCs as Volumes

Concept: Persistent Volumes

Page 31: Kubernetes for Java Developers

@rafabene / @yanaga

Deployment Concept: Rolling Updates

Pod

ReplicationController

Pod Pod Pod

App: CoolVersion: 1.0

Version: 1.0Replicas: 4

Backend

ReplicationController

Version: 2.0Replicas: 1

PodPod Pod Pod

App: CoolVersion: 2.0

Version: 1.0Replicas: 3

Version: 2.0Replicas: 2

Version: 1.0Replicas: 2

Version: 2.0Replicas: 3

Version: 1.0Replicas: 1

Version: 2.0Replicas: 4

Page 32: Kubernetes for Java Developers

@rafabene / @yanaga

Kubernetes lab

Page 33: Kubernetes for Java Developers

@rafabene / @yanaga

Application Overview

Page 34: Kubernetes for Java Developers

@rafabene / @yanaga

Page 35: Kubernetes for Java Developers

@rafabene / @yanaga

Hello World Service - Greet

Guestbook Service - Create

Guestbook Service - Retrieve

Page 36: Kubernetes for Java Developers

@rafabene / @yanaga

Lab infrastructure

Hypervisor

RHEL VM Image

● OpenShift● Kubernetes● Docker

Container Development Kit

http://developers.redhat.com/products/cdk/download/

Page 37: Kubernetes for Java Developers

@rafabene / @yanaga

Kubernetes lab

VERY IMPORTANT

http://bit.ly/kubernetes-lab

Follow me on the Setup environment section!

Page 38: Kubernetes for Java Developers

developers.redhat.com

http://developers.redhat.comhttp://developers.redhat.com

Page 39: Kubernetes for Java Developers

@RAFABENE