java day kharkiv - next-gen engineering with docker and kubernetes

21
Next-gen engineering with Docker and Kubernetes

Upload: antons-kranga

Post on 16-Apr-2017

578 views

Category:

Technology


1 download

TRANSCRIPT

Page 1: Java Day Kharkiv - Next-gen engineering with Docker and Kubernetes

Next-gen engineering with Docker and Kubernetes

Page 2: Java Day Kharkiv - Next-gen engineering with Docker and Kubernetes

:~ whoami:

Antons Kranga

Cloud architect and full-stack developer with ~15 years in Java technology

Page 3: Java Day Kharkiv - Next-gen engineering with Docker and Kubernetes

Docker and Java

Page 4: Java Day Kharkiv - Next-gen engineering with Docker and Kubernetes

Motivation

dev Chuck Norris app ops

deploy

Page 5: Java Day Kharkiv - Next-gen engineering with Docker and Kubernetes

Docker

Guest OSVM

Guest OS

Container engine

Container engine

Hypervisor

VM

Applications isolated inside containersRapid deployment

Focuses on service is inside container

dev ops

Focuses on env outside container

Dockerfileis a contract

Page 6: Java Day Kharkiv - Next-gen engineering with Docker and Kubernetes

DockerfileDockerfile

FROM java:jdk

COPY chnorr.jar /app.jar

EXPOSE 8080

ENTRYPOINT ["java", "-jar", "/app.jar"]

Page 7: Java Day Kharkiv - Next-gen engineering with Docker and Kubernetes

WorkflowDockerfile

FROM java:jdk

COPY chnorr.jar /app.jar

EXPOSE 8080

ENTRYPOINT ["java", "-jar", "/app.jar"]

dev

Java code &Dockerfile

Compile &Unit test

chnorr.jar build registry(private or public)

push ops

pull

Container engine

docker run

Page 8: Java Day Kharkiv - Next-gen engineering with Docker and Kubernetes

Things to rememberContainers have ephemeral. Persistent volumes should be managed separatelyApp logs > /dev/stdout. Logs will be streamed to log collector service

Use environment variables to inject configuration parameters inside container Do not use ENV vars for secrets

Use private registry to distribute containers

Containers != VM (!!!)

Page 9: Java Day Kharkiv - Next-gen engineering with Docker and Kubernetes

Rugged Docker

Page 10: Java Day Kharkiv - Next-gen engineering with Docker and Kubernetes

KubernetesCluster manager for your containers

Page 11: Java Day Kharkiv - Next-gen engineering with Docker and Kubernetes

Docker needs Platform

Guest OSVM

Guest OS

Container engine

Container engine

Hypervisor

VM

Docker is just a container engine many things are not there

• Networking• Storage• Service discovery• Container scheduling• Placement and load

balancing• Routing• Self healing ...

Page 12: Java Day Kharkiv - Next-gen engineering with Docker and Kubernetes

Kubernetes Architecutre

Page 13: Java Day Kharkiv - Next-gen engineering with Docker and Kubernetes

Logical view

Serviceports80,443

10.0.1.10

container

container

10.0.1.11

container

container

load balancer services pods rc

labels labels

labels labels

Page 14: Java Day Kharkiv - Next-gen engineering with Docker and Kubernetes

Chuck Norris pod exampleService

apiVersion: v1kind: Servicemetadata: name: chuck-norris labels: name: chuck-norris-servselector: chuck: norris spec: type: LoadBalancer clusterIP: 10.0.1.10 ports: - name: http port: 80

Replication ControllerapiVersion: v1kind: ReplicationControllermetadata: name: chuck-norris labels: chuck: norris spec: replicas: 3 selector: name: chuck-norristemplate: metadata: labels: name: chuck-norrisspec: containers: - name: chuck image: akranga/chnorr:1.0.0 ports: - name: http containerPort: 8080

port exposed in Dockerfile

Page 15: Java Day Kharkiv - Next-gen engineering with Docker and Kubernetes

Things to rememberDIND makes you naked needs privileged mode

Do not abuse etcd of kubernetesyou can brake the platform

Page 16: Java Day Kharkiv - Next-gen engineering with Docker and Kubernetes

JenkinsBetter continuous delivery model

Page 17: Java Day Kharkiv - Next-gen engineering with Docker and Kubernetes

CI with Kubernetesdev push

push

ops

pullgitmaster

Compile &Unit test app.jar build

private registry Create pod

Chuck Norris app

pull

Page 18: Java Day Kharkiv - Next-gen engineering with Docker and Kubernetes

Putting all togetherjenkins

ports80 jenkins_master

load balancer services pods storage

jenkins_java_slave

jenkins_kube_slave

jenkins_docker_slave

jenkinsports80 private_registry

chnorrgreen

ports80 chucknorris:b24

chucknorris:b25chnorrlatest

ports80

cloudstorage

cloudstorage

Page 19: Java Day Kharkiv - Next-gen engineering with Docker and Kubernetes

Things to remember

Workflows can be part of app-baselineShare workspace between slaves

Don’t forget private docker registry

DIND is evil but unavoidable

Page 20: Java Day Kharkiv - Next-gen engineering with Docker and Kubernetes

Grab hands-on practice labs here:https://github.com/akranga/kube-workshop

Page 21: Java Day Kharkiv - Next-gen engineering with Docker and Kubernetes

Questions?