Java Day Kharkiv - Next-gen engineering with Docker and Kubernetes

Preview:

Citation preview

Next-gen engineering with Docker and Kubernetes

:~ whoami:

Antons Kranga

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

Docker and Java

Motivation

dev Chuck Norris app ops

deploy

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

DockerfileDockerfile

FROM java:jdk

COPY chnorr.jar /app.jar

EXPOSE 8080

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

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

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 (!!!)

Rugged Docker

KubernetesCluster manager for your containers

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 ...

Kubernetes Architecutre

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

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

Things to rememberDIND makes you naked needs privileged mode

Do not abuse etcd of kubernetesyou can brake the platform

JenkinsBetter continuous delivery model

CI with Kubernetesdev push

push

ops

pullgitmaster

Compile &Unit test app.jar build

private registry Create pod

Chuck Norris app

pull

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

Things to remember

Workflows can be part of app-baselineShare workspace between slaves

Don’t forget private docker registry

DIND is evil but unavoidable

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

Questions?

Recommended