kontit pomppimaan3

34
KONTIT POMPPIMAAN Docker, Kubernetes, OpenShift [email protected]

Upload: arto-santala

Post on 26-Jan-2017

53 views

Category:

Technology


2 download

TRANSCRIPT

Page 1: Kontit pomppimaan3

KONTIT POMPPIMAANDocker, Kubernetes, OpenShift

[email protected]

Page 2: Kontit pomppimaan3

HAASTEITA SOFTATUOTANNOSSA› Miten käyttöjärjestelmätason resursseja, muuttujia, säätöjä,

ympäristöä hallitaan?› Miten taataan että kehitys ja testiympäristöt ovat vastaavat ja

ympäristö ei muutu matkalla?› Miten voidaan käyttää resursseja tehokkaasti kun sovellus

muodostuu lukuisista osista, esim. kanta, palvelu1, palvelu2, palvelu3, ui, jne?

› Miten toimitaan kun kehitystiimissä on Windows, OSX ympäristöjä, ja testiympäristöissä CentOS/Ubuntu?

› Mites se DevOps?

Page 3: Kontit pomppimaan3

DOCKER› Container-malli, jossa jaetaan käyttöjärjestelmätason

kernel• Käynnistyy välittömästi, käyttää vähemmän muistia, jakaa

koneen resursseja tehokkaammin• Ei välitä ympäristöstään• Tuo riippuvuutensa mukanaan• Eristetty verkon ja resurssien osalta• Rakennetaan ja suoritetaan puhtaassa ympäristössä,

immutable container malli

https://www.docker.com/

https://www.slideshare.net/jpetazzo/docker-and-go-why-did-we-decide-to-write-docker-in-go

Page 4: Kontit pomppimaan3

MITÄ KAIKKEE?

Page 5: Kontit pomppimaan3

DOCKER IMAGET› Image = Sovelluspaketti, jossa kerroksittain muutoksia

• Pystytään uudelleenkäyttämään kerroksia suoraan, esim. Ubuntu/JDK/munjavasovellus

› Container = yksittäinen ’instanssi’ imagen pohjalta• Omat ympäristömuuttujat, omat portit, oma tiedostojärjestelmä• Ideana ei ole tunkea konttiin kaikkea mitä tarvitaan, vaan yhdistellä

kontteja

› Repository – paikka jonne sovelluspaketit varastoidaan ja mistä ne haetaan, esim. https://hub.docker.com

docker run ubuntu /bin/echo 'Hello world'docker run -t -i ubuntu /bin/bash

docker run hello-world

Page 6: Kontit pomppimaan3

MUT HEI, MIKSEI VAGRANT+ANSIBLE?

Page 7: Kontit pomppimaan3

DOCKER KÄYTTÖÖNOTTO› Docker Toolbox› Docker for Mac› Docker for Windows

› Tai ihan vaan tuttavallisesti: • brew cask install docker

Page 8: Kontit pomppimaan3

AJA JAVA YSILLÄ?› docker run -it --rm openjdk:9-jdk java –version

› docker run -it --rm openjdk:9-jdk

› docker run –d –p 8080:8080 -v /tmp:/java openjdk:9-jdk sh -c "cd /java; javac *.java; jar myapp.jar *; java –jar myapp.jar”

Page 9: Kontit pomppimaan3

MITEN HALLINNOIDAAN?› docker ps

› docker ps –a

› docker stop #CONTAINERID

› docker rm #CONTAINERID

› docker build –t munsofta .

› docker history munsofta

› docker logs #CONTAINERID

› docker save munsofta –o munsofta.tar

› docker load –i ./munsofta.tar

› docker rmi munsofta

Page 10: Kontit pomppimaan3

DOCKERFILE› Sensijaan että ajaisit dockeria komentoriviltä, voit

määrittää haluamasi konfiguraatiot tiedostoon› Tiedosto voidaan ajaa, toistaa, levittää, versioida, jne› Sovelluksen riippuvuudet ja tarpeet

• Docker build: rakennetaan paketti• Docker run: Potkaistaan käyntiin• Docker push: Julkaistaan repositoryyn• Docker pull: Noudetaan paketti repositorystä

Page 11: Kontit pomppimaan3

DOCKERFILEFROM openjdk:8VOLUME /tmpADD target/indexserver.jar app.jarRUN sh -c 'touch /app.jar'ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-Dspring.profiles.active=docker","-Xmx1024m","-jar","/app.jar"]

Page 12: Kontit pomppimaan3

DOCKERFILEFROM nginxCOPY nginx.conf /etc/nginx/nginx.conf

ENV NGINX_HOST foobar.comENV NGINX_PORT 80

EXPOSE 80

CMD nginx”, “-g”, “’daemon off;’”]

Page 13: Kontit pomppimaan3

DOCKERFILEFROM dockerfile/ubuntuRUN \ add-apt-repository -y ppa:nginx/stable && \ apt-get update && \ apt-get install -y nginx && \ rm -rf /var/lib/apt/lists/* && \ echo "\ndaemon off;" >> /etc/nginx/nginx.conf && \ chown -R www-data:www-data /var/lib/nginxVOLUME ["/etc/nginx/sites-enabled", "/etc/nginx/certs", "/etc/nginx/conf.d", "/var/log/nginx", "/var/www/html"]WORKDIR /etc/nginxCMD ["nginx"]EXPOSE 80 EXPOSE 443

Page 14: Kontit pomppimaan3

DOCKER REGISTRY› Hah, sille on tietysti oma image› Voit pullia sen ja alkaa ajamaan omaa priva-registryä jonne

voi pushia ja pullia Docker kontteja ja imageita

› docker pull registry› docker run –d –p5000:5000 registry

Page 15: Kontit pomppimaan3

DOCKER-COMPOSE› Docker-compose auttaa hallitsemaan useammasta

containerista koostuvia kokonaisuuksia, jotka pitäisi käynnistää yhdessä

› Versio 1 ja 2 välillä suuria eroja, esim. linkitys vs dependency ja network asetukset

https://github.com/vegasbrianc/docker-compose-demo

Page 16: Kontit pomppimaan3

DOCKER-COMPOSEversion: '2’services: elasticsearch: build: ./elastic environment: - ES_HEAP_SIZE=4g command: elasticsearch -Des.network.host=0.0.0.0 ports: - "9200:9200” - "9300:9300” volumes: - ./elastic/esdata:/usr/share/elasticsearch/data pdfindexer: build: ./indexserver ports: - "8080:8080” depends_on: - elasticsearch volumes: - ./indexserver/pdf-files:/pdf-files:ro

Page 17: Kontit pomppimaan3

DOCKER + STACK› Tulossa Docker 1.13 versiossa› Kuten nimi vihjaa, kokoelma yhteenkuuluvia palveluita› docker-cloud.yml› Containerien sijasta luo palveluita (Service)› Kuten docker-compose, mutta hieman enemmän

ympäristönhallintaa• Deploy strategy, dns servers, restart-on-stop, roles, etc• Eri stack tiedosto dev, staging, production, jne

https://docs.docker.com/docker-cloud/apps/stacks/

Page 18: Kontit pomppimaan3

DOCKER SWARM› Nyt päästään asiaan: Miten saada docker-ympäristöön

mukaan redundanssia, miten ajaa docker-kokonaisuuksia useampia rinnan?

› Docker Swarm on Docker-suunnalta tuleva ratkaisu tähän› Service = edustapalvelin/proxy abstraktio

https://docs.docker.com/swarm/install-manual/

Page 19: Kontit pomppimaan3

SWARM MODE: ACTIVE

Page 20: Kontit pomppimaan3

DOCKER SWARM› Swarm muodostuu virtuaalikoneiden klusterista, ainakin

yksi manager node ja yksi tai useampi worker node• Paikallisessa sandboxissa helpointa testata docker-machine

virtuaalikoneilla

Page 21: Kontit pomppimaan3

OSX TESTAILUA: VALMISTELUdocker-machine create --driver virtualbox manager1

docker-machine create --driver virtualbox worker1

docker-machine create --driver virtualbox worker2

https://github.com/docker/labs/tree/master/swarm-mode/beginner-tutorial

Page 22: Kontit pomppimaan3

OSX TESTAILUA: SWARM LUONTIdocker-machine ssh manager1 "docker swarm init --listen-addr $(docker-machine ip manager1) --advertise-addr $(docker-machine ip manager1)”

export worker_token=`docker-machine ssh manager1 "docker swarm join-token worker -q"`

docker-machine ssh worker1 "docker swarm join --token $worker_token --listen-addr $(docker-machine ip worker1) --advertise-addr $(docker-machine ip worker1) $(docker-machine ip manager1):2377"

docker-machine ssh worker2 "docker swarm join --token $worker_token --listen-addr $(docker-machine ip worker2) --advertise-addr $(docker-machine ip worker2) $(docker-machine ip manager1):2377"

Page 23: Kontit pomppimaan3

OSX TESTAILUA: KÄYTTÖ

docker-machine ssh manager1 docker node ls

docker-machine ssh worker1 docker swarm leavedocker-machine ssh worker2 docker swarm leavedocker-machine ssh manager1 docker swarm leave --force

Page 24: Kontit pomppimaan3

KUBERNETES› Googlella on ollut suuria tarpeita containerien käyttöön ja

heidän täytyi pystyä hallitsemaan niitä jo ennen kuin Docker Swarm saatiin aikaan

› Apuna hallinnassa on väline nimeltä Kubernetes: Sillä on päällekkäisyyttä Docker-compose ja Docker Swarm kanssa

› Erillinen CLI, erillinen API, erilliset yaml tiedostot› Alunperin suosittu, mutta Swam kirii kiinni kovaa vauhtia…

http://kubernetes.io/https://github.com/TheNewNormal/kube-cluster-osx

Page 25: Kontit pomppimaan3

OPENSHIFT› OpenShift on RedHat tekosia: Lisää työkaluja Docker ja

Kubernetes hallintaan› Voisi ajatella, että tämä tuo abstraktion Kuberneteksen

päälle, lisää hallintatyökaluja ja automatiikkaa› OpenShift on sekä ympäristö (Openshift online) että

työkalupakki, jota voi käyttää erillään, vaikka lokaalisti

Page 26: Kontit pomppimaan3

OPENSHIFT CLOUDFORMS

Page 27: Kontit pomppimaan3

DOCKER MONITOROINTI› Dockerin omat kilkkeet

• docker logs, docker ps, docker inspect, docker stats• echo -e "GET /containers/[CONTAINER_NAME]/stats

HTTP/1.0\r\n" | nc -U /var/run/docker.sock

› CAdvisor, Prometheus, Sensu, Logz.io› Scout, Data Dog, Sysdig, New Relic, Dynatrace, SignalFx

Page 28: Kontit pomppimaan3

TIPSUT JA TRIXXUT› Imageissa löytyy useita vaihtoehtoja, on esim. erityisiä ‘lean java’

imageita joissa vain minimit› Kun image muodostuu layereistä, on fiksua ajaa aina cleanupit

saman layer-komennon yhteydessä

› Containereille on hyvä aina antaa labeleita, jotta ne löytää helposti

› Labeleilla voi ryhmitellä containereita nopeasti eri suunnista, esim. • env=dev,staging,prod• layer=front,backend,db

Page 29: Kontit pomppimaan3

TIPSUT JA TRIXXUT› Image-kansion voi siirtää eri paikkaan tilansäästömielessä, esim.

muistikortilla• Paitsi nykyisessä Docker for Mac versiossa…• Teoriassa mahdollista linkittää…• mv

~/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/Docker.qcow2 /LargeDrive/Docker/Docker.qcow2

• ln -s /LargeDrive/Docker/Docker.qcow2 ~/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/Docker.qcow2

Page 30: Kontit pomppimaan3

TIPSUT JA TRIXXUT› Jos filu kasvaa lihavaksi, voi sen poistaa – huom siinä lähtee kaikki

imaget!• Quit Docker via menu• rm

~/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/Docker.qcow2

• Start Docker via Finder

Page 31: Kontit pomppimaan3

TIPSUT JA TRIXXUT› Miten kaikki/käyttämättömät imaget saa poistoon?

• docker rmi $(docker images –q)• docker rmi $(docker images --filter "dangling=true" -q --no-trunc)• docker system prune (Docker 1.13)

Page 32: Kontit pomppimaan3

DOCKER TUHMUUKSIA – ÄLÄ TEE!› Dataa tai logeja containerin sisällä – käytä volume

mappingiä!› Kovakoodattuja viittauksia ip-osoitteisiin, containerien

välillä – käytä linkkejä, networkkejä, serviceitä!› Uber containerit, jotka tekevät montaa asiaa yhtä aikaa –

separation of concerns!› Fatit imaget, paljon tarpeettomia välivaiheita ja kerroksia,

lihava pohjaimage› Credentiaaleja kontissa – sama kuin yleensä gitin kanssa

myös

Page 33: Kontit pomppimaan3

KIITOS!› Palautetta, lisää näkökantoja?

https://github.com/crystoll/kontitpomppimaan

Page 34: Kontit pomppimaan3