diff --git a/README.md b/README.md index f11220e..c908fff 100644 --- a/README.md +++ b/README.md @@ -1,21 +1,29 @@ -![alerantlogo](https://www.alerant.hu/img/logo.svg) -# BME PaaS labor -## Tudnivalók **Labor email elérhetőség:** alerant.bme.paas.labor@gmail.com --- -# Célkitűzés, tematika -A labor célja a következő témák áttekintése: -- **Alapműveletek konténerben futtatott alkalmazásokkal** - - Docker konténer létrehozása dockerfile vagy Docker Hub image alapján, - - Docker registry használata, - - a hoszt és a konténer kapcsolódásának vizsgálata (folyamat-azonosítók, portok, névterek), - - parancsok futtatása a konténerben, - - webszerver futtatása, elérése, módosítása. -- **OpenShift** - - konténer orchestration, - - deployment folyamatok, - - OpenShift architektúra áttekintése , - - OpenShift alapfogalmak áttekintése(Service, Pod, Route). +# Előzetes felkészülés (Opcionális) +- Az elméleti anyagok célja a téma áttekintése, a megértéshez szükséges hasznos ábrák és linkek gyűjteménye. +- Nem cél, hogy minden téma, fogalom részletesen leírásra kerüljön. Ezek a témák számos helyen, sokkal jobban dokumentálva vannak. +- Az alábbi elméleti anyagok a gyakorlat során részletesen bemutatásra kerülnek. +- Nincs beugró vagy számonkérés, ha előreolvasol, jobban össze fog állni az anyag a fejedben a gyakorlat végére. + +## Amennyiben előre szeretnél felkészülni, akkor a következők szerint javasolt a haladás: + - IaaS, PaaS közötti különbségek megértése + - Docker alapfogalmak áttekintése (container, container image, alap parancsok: exec, run, push, pull, search) + - Kubernetes alapfogalmak áttekintése: Pod, Controller, Node + +# Elméleti áttekintés +## IaaS, PaaS, SaaS +[IaaS, PaaS, SaaS áttekintés](docs/Elmelet1.md) + +## Docker +[Docker](docs/Elmelet2.md) +## OpenShift áttekintés +[OpenShift](docs/Elmelet3.md) + +--- + +# Hasznos linkek +[Linkek](docs/Linkek.md) --- diff --git a/_config.yml b/_config.yml new file mode 100644 index 0000000..5fa86fb --- /dev/null +++ b/_config.yml @@ -0,0 +1,6 @@ +theme: jekyll-theme-cayman + +title: Alerant - BME PaaS Labor +description: Elméleti áttekintés +show_downloads: "false" +google_analytics: UA-134639831-1 diff --git a/_layouts/default.html b/_layouts/default.html new file mode 100644 index 0000000..a2e9d81 --- /dev/null +++ b/_layouts/default.html @@ -0,0 +1,38 @@ + + + + + {% if site.google_analytics %} + + + {% endif %} + + +{% seo %} + + + + + + + + + +
+ {{ content }} + + +
+ + diff --git a/assets/css/style.scss b/assets/css/style.scss new file mode 100644 index 0000000..7d24405 --- /dev/null +++ b/assets/css/style.scss @@ -0,0 +1,6 @@ +--- +--- +$header-bg-color: #74C662 !default; +$header-bg-color-secondary: #74C662 !default; + +@import 'jekyll-theme-cayman'; diff --git a/common/images/ContainerVsVM.jpg b/common/images/ContainerVsVM.jpg new file mode 100644 index 0000000..d2fa9c5 Binary files /dev/null and b/common/images/ContainerVsVM.jpg differ diff --git a/common/images/abdeployment.png b/common/images/abdeployment.png new file mode 100644 index 0000000..885d1de Binary files /dev/null and b/common/images/abdeployment.png differ diff --git a/common/images/alerant.png b/common/images/alerant.png new file mode 100644 index 0000000..94baa0d Binary files /dev/null and b/common/images/alerant.png differ diff --git a/common/images/architecture.jpg b/common/images/architecture.jpg new file mode 100644 index 0000000..d1ebf5c Binary files /dev/null and b/common/images/architecture.jpg differ diff --git a/common/images/architecture.svg b/common/images/architecture.svg new file mode 100644 index 0000000..afe563a --- /dev/null +++ b/common/images/architecture.svg @@ -0,0 +1,2597 @@ + + + + + 2014-04-15 00:37Z + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/common/images/cloud_maturity_level.jpg b/common/images/cloud_maturity_level.jpg new file mode 100644 index 0000000..4e36fc2 Binary files /dev/null and b/common/images/cloud_maturity_level.jpg differ diff --git a/common/images/cloud_maturity_matrix.pdf b/common/images/cloud_maturity_matrix.pdf new file mode 100644 index 0000000..fca70a7 Binary files /dev/null and b/common/images/cloud_maturity_matrix.pdf differ diff --git a/common/images/container-layers.jpg b/common/images/container-layers.jpg new file mode 100644 index 0000000..00c30a2 Binary files /dev/null and b/common/images/container-layers.jpg differ diff --git a/common/images/deploy_flow.png b/common/images/deploy_flow.png new file mode 100644 index 0000000..0c34f1d Binary files /dev/null and b/common/images/deploy_flow.png differ diff --git a/common/images/deploy_flow1.png b/common/images/deploy_flow1.png new file mode 100644 index 0000000..20b5764 Binary files /dev/null and b/common/images/deploy_flow1.png differ diff --git a/common/images/docker_images_containers.png b/common/images/docker_images_containers.png new file mode 100644 index 0000000..ad23b63 Binary files /dev/null and b/common/images/docker_images_containers.png differ diff --git a/common/images/dockerarch.png b/common/images/dockerarch.png new file mode 100644 index 0000000..58dbbfd Binary files /dev/null and b/common/images/dockerarch.png differ diff --git a/common/images/dockercontainerimage.png b/common/images/dockercontainerimage.png new file mode 100644 index 0000000..8362d73 Binary files /dev/null and b/common/images/dockercontainerimage.png differ diff --git a/common/images/dockerpush.png b/common/images/dockerpush.png new file mode 100644 index 0000000..2fd1c0d Binary files /dev/null and b/common/images/dockerpush.png differ diff --git a/common/images/linux_containers.png b/common/images/linux_containers.png new file mode 100644 index 0000000..c25a729 Binary files /dev/null and b/common/images/linux_containers.png differ diff --git a/common/images/logo.svg b/common/images/logo.svg new file mode 100644 index 0000000..c5e588d --- /dev/null +++ b/common/images/logo.svg @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + diff --git a/common/images/network.jpg b/common/images/network.jpg new file mode 100644 index 0000000..ba586d1 Binary files /dev/null and b/common/images/network.jpg differ diff --git a/common/images/network2.png b/common/images/network2.png new file mode 100644 index 0000000..80b8a5a Binary files /dev/null and b/common/images/network2.png differ diff --git a/common/images/oci.png b/common/images/oci.png new file mode 100644 index 0000000..15597e6 Binary files /dev/null and b/common/images/oci.png differ diff --git a/common/images/oci2.png b/common/images/oci2.png new file mode 100644 index 0000000..10d51b4 Binary files /dev/null and b/common/images/oci2.png differ diff --git a/common/images/okd.png b/common/images/okd.png new file mode 100644 index 0000000..5f8d782 Binary files /dev/null and b/common/images/okd.png differ diff --git a/common/images/openshift.webp b/common/images/openshift.webp new file mode 100644 index 0000000..eca536e Binary files /dev/null and b/common/images/openshift.webp differ diff --git a/common/images/openshift_arch.png b/common/images/openshift_arch.png new file mode 100644 index 0000000..f4fc7ac Binary files /dev/null and b/common/images/openshift_arch.png differ diff --git a/common/images/openshift_arch2.png b/common/images/openshift_arch2.png new file mode 100644 index 0000000..e4b7100 Binary files /dev/null and b/common/images/openshift_arch2.png differ diff --git a/common/images/openshift_arch3.png b/common/images/openshift_arch3.png new file mode 100644 index 0000000..91cc0de Binary files /dev/null and b/common/images/openshift_arch3.png differ diff --git a/common/images/openshift_arch4.png b/common/images/openshift_arch4.png new file mode 100644 index 0000000..55f1e2c Binary files /dev/null and b/common/images/openshift_arch4.png differ diff --git a/common/images/openshift_arch5.png b/common/images/openshift_arch5.png new file mode 100644 index 0000000..d98f32b Binary files /dev/null and b/common/images/openshift_arch5.png differ diff --git a/common/images/openshift_arch6.png b/common/images/openshift_arch6.png new file mode 100644 index 0000000..b292795 Binary files /dev/null and b/common/images/openshift_arch6.png differ diff --git a/common/images/openshift_vs_origin.png b/common/images/openshift_vs_origin.png new file mode 100644 index 0000000..cb7535e Binary files /dev/null and b/common/images/openshift_vs_origin.png differ diff --git a/common/images/s2i.png b/common/images/s2i.png new file mode 100644 index 0000000..8015f71 Binary files /dev/null and b/common/images/s2i.png differ diff --git a/common/images/s2i_2.png b/common/images/s2i_2.png new file mode 100644 index 0000000..af65b17 Binary files /dev/null and b/common/images/s2i_2.png differ diff --git a/common/images/shared-volume.jpg b/common/images/shared-volume.jpg new file mode 100644 index 0000000..cd39b86 Binary files /dev/null and b/common/images/shared-volume.jpg differ diff --git a/common/images/windows_vs_linux.png b/common/images/windows_vs_linux.png new file mode 100644 index 0000000..2eea46c Binary files /dev/null and b/common/images/windows_vs_linux.png differ diff --git a/common/images/xaas.jpg b/common/images/xaas.jpg new file mode 100644 index 0000000..186a55c Binary files /dev/null and b/common/images/xaas.jpg differ diff --git a/docs/Elmelet1.md b/docs/Elmelet1.md new file mode 100644 index 0000000..d25a4c7 --- /dev/null +++ b/docs/Elmelet1.md @@ -0,0 +1,31 @@ +# IaaS, PaaS, SaaS +![XaaS](../common/images/xaas.jpg) +## IaaS = Infrastructure as a Service +Tipikusan HW(+OS) platformot biztosít a használói számára (pl. szükségem van egy 2 CPU-s, CentOS7-re 2G memóriával) + +- **Scope:** Infrastruktúra (virtuális gépek és image-ek, storage, hálózati elemek) +- **Előnyök:** erős host gépeken egységes/standard virtualizáció; rapid gépigénylés és létrehozás (akár runtime skálázással) +- **Célcsoport:** üzemeltetők, DevOps +- **Példák:** Amazon EC2, Rackspace, Google Compute Engine, OpenStack. Ennél a labornál az IaaS megoldást az OpenStack nyújtja! + +## PaaS = Platform as a Service +Tipikusan alkalmazásszervereket, middleware-ket, alkalmazás futtatókörnyezetet biztosít a használói számára (pl. szükségem van egy JBoss JEE szerverre, vagy egy NodeJs futtató környezetre) + +- **Scope:** Alkalmazás futtató környezetek (middleware-ek, alkalmazás platformok) +- **Előnyök:** egységes/standard alkalmazás fejlesztés és telepítési környezet; rapid platform igénylés és létrehozás (akár runtime skálázással) +- **Célcsoport:** alkalmazásfejlesztők +- **Példák:** OpenShift, Heroku, Google App Engine. Ennél a labornál a PaaS megoldást az OpenShift nyújtja! + + +## SaaS = Software as a Service +Tipikusan kész alkalmazások, azok szolgáltatásait biztosítja a használói számára (pl. szükségem van egy levelező rendszerre, CRM alkalmazásra, Webshopra stb.) + +- **Scope:** Alkalmazások, szolgáltatások +- **Előnyök:** azonnal elérhető, használható szolgáltatásom van; nincsenek fejlesztési költségek; egyszeri beruházsá helyett rendszeres díjazás +- **Célcsoport:** végfelhasználók +- **Példák:** Office Cloud, Google Apps (Forms, Calendar, ...) + +# Felhő technológiák érettségi szintjei +https://container-solutions.com/cloud-native-maturity-matrix/ + +![cn_maturity](../common/images/cloud_maturity_level.jpg) diff --git a/docs/Elmelet2.md b/docs/Elmelet2.md new file mode 100644 index 0000000..d140a67 --- /dev/null +++ b/docs/Elmelet2.md @@ -0,0 +1,80 @@ +# Docker +## Konténerek +- LXC, BSD Jails, Docker + - Chroot circa 1982,FreeBSD Jails circa 2000,Solaris Zones circa 2004, LXC circa 2008,Systemd-nspawn circa 2010-2013 + - Docker circa 2013 +- Linux kernel technológiákra épülő izolált környezet +- Izolált névterek (fs, net, ps, mount, ipc,...) +- Kiforrott, gyors, biztonságos, optimális erőforrás használat + +![containervsvm](../common/images/ContainerVsVM.jpg) +(Miben rossz ez az ábra?) + +## Container from scratch +- Példa konténer létrehozásra alap linux eszköztárral: https://ericchiang.github.io/post/containers-from-scratch/ +- https://opensource.com/article/18/1/history-low-level-container-runtimes + +## Alapfogalmak +- Docker image: A linux root fájlrendszer módosításainak rendezett és rétegelt gyűjteménye. Nem módosítható. A futó konténerek alapja, tartalmaz minden információt, hogy egy konténer példányosítható legyen belőle. +- Docker container: Egy image futásidejű példánya, egy izolált linux process hierarchia. Alapja egy Docker image, ami kiegészül futásidejű paraméterekkel, konfigurációkkal. +- Docker registry: Image-ek gyűjtőhelye +- Dockerfile: Parancsok, utasítások gyűjteménye. Egy alap image-en futtatva sorrendhelyesen az előbbi utasításokat egy új testreszabott image áll elő. + +https://docs.docker.com/engine/reference/glossary +![images_containers](../common/images/docker_images_containers.png) +![images_container_images](../common/images/dockercontainerimage.png) +![linux_containers](../common/images/linux_containers.png) + +## OCI +![oci_standards](../common/images/oci.png) +![oci_standards_rel](../common/images/oci2.png) + +## Docker architektúra +![dockerlinux](../common/images/dockerarch.png) +![dockerarch](../common/images/architecture.jpg) + +## Windows vs Linux +![dockerwindows](../common/images/windows_vs_linux.png) + +https://xebia.com/blog/deep-dive-into-windows-server-containers-and-docker-part-2-underlying-implementation-of-windows-server-containers/ + +## Rétegek +- Az image-en végzett utasítások újabb és újabb rétegeket képeznek. +- Egy image nem módosítható, a konténer példány is egy újabb rétegként jelenik meg. +- A konténer példány tartosítható, image-be menthető. +![containerlayers](../common/images/container-layers.jpg) + +## Perzisztens tárolók +- A docker containerek nem perzisztensek, tehát leállítások esetén a tárolt adatok elvesz(het)nek +- Perzisztens tár becsatolható a konténerekbe +![sharedvolumes](../common/images/shared-volume.jpg) + +## Hálózat +- A konténerek hálózatot tekintve is izoláltak lehetnek a hosttól (net namespace). +- Egy konténer jellemzően egy hoston futtatott Linux Bridge-hez kapcsolódik (de számtalan féle hálózati architektúra kialakítása lehetséges). +- A konténer explicit kinyithatja a hálózati portjait (port forward). +- A konténerek összeköthetőek egymással. + +## Legfontosabb parancsok +```shell +docker help --parancsok leírása +docker image pull --image letöltése +docker image search --image-ek keresése +docker container run --konténer példány indítása +docker container run -v --perzisztens köteg becsatolása +docker container run -it --interaktív terminál nyitása +docker container run -d --a konténer háttérfolyamatként futni fog +docker container run -p --port forward +docker container ps|top --futó konténerek +docker container inspect --konténer futás idejű paramétereinek a lekérdezése +docker container start|stop --konténer indítása, leállítása +``` + +## Docker ökoszisztéma +- Docker Machine - Docker containerek futtatása virtuális gépeken +- Docker Compose - Docker container stackek kezelése +- Docker Swarm - Docker container clusterezés + +## Docker GUI management +_docker container run -d -p 9000:9000 --privileged -v/var/run/docker.sock:/var/run/docker.sock portainer/portainer_ +http://localhost:9000 (passwd megadás, majd local, connect és voilá, van egy GUI a lokális docker környezet fölé) diff --git a/docs/Elmelet3.md b/docs/Elmelet3.md new file mode 100644 index 0000000..b630212 --- /dev/null +++ b/docs/Elmelet3.md @@ -0,0 +1,191 @@ +# OpenShift áttekintés +A Docker konténerek önmagukban még nem alkalmasak arra, hogy egy teljes PaaS megoldást nyújtsanak. + +A következő problémákra kell _még_ megoldás: +- A különböző konténerek összekapcsolása, management-je fapados, ha csak a Docker-re építkezünk. (Scheduling) +- Nincs megoldva a skálázás(akár dinamikusan), failover, high-availability. (Scaling) +- Alkalmazás buildelési, deployálási folyamatok támogatása. +- Tenant/Project izoláció (egy PaaS megoldásban nem láthatják egymás erőforrásait/projektjeit/alkalmazásait) + +Ezekre a problémákra vannak létező megoldások, technológiák: +- Kubernetes, Docker Compose, Docker Swarm - konténer menedzsment (Scheduling + Scaling) +- Alkalmazásfejlesztési módszertanok, eszközök: Git vagy más SCM, Jenkins,... +- Hálózati eszközök: Open vSwitch, Linux kernel technológiák +- Monitorozás: Hawkular + +Az OpenShift az előbbi problémákra megoldást nyújt, ráépülve a Docker konténer technológiára és más bevált eszközökre elsősorban a Kubernetes-re. + +# OpenShift OKD +OKD = The Origin Community Distribution of Kubernetes +- azaz egy Kubernetes disztribúció, amely optimalizált a CI/CD folyamatokra és a multi-tenant működésre +- korábban Origin (3.10 előtt), most már deklaráltan Kubernetes disztribúció +- korábban is a legnagyobb kollaborátor projekt, számos Kubernetes feature forrása, pl. Role Based Access Control(RBAC) + +[OpenShift történelem](https://blog.openshift.com/openshift-kubernetes-where-weve-been-and-where-were-going-part-1/) + +[OpenShift jövő](https://blog.openshift.com/openshift-kubernetes-where-weve-been-and-where-were-going-part-2/) + +[OpenShift vs Kubernetes](https://cloudowski.com/articles/10-differences-between-openshift-and-kubernetes/) + + +# Alapfogalmak +- **Project**: adminisztratív izoláció, az egyes szállítók külön-külön egymástól izolálva dolgozhatnak egy-egy projekten. A Node-ot kivéve minden OpenShift entitás/resource Project scopeú. +- **User**: az OpenShift felhasználói, akik tevékenysége jogosultságkezeléssel korlátozható +- **Container, Image, Registry**: Az OpenShift a Docker-t használja konténer technológiaként ezért ezek pontosan a Docker fogalmak. +- **Pod**: Egy vagy több konténer, közös tárterülettel, hálózattal. Telepítési, management egység. +- **Node**: Podokat futtató gép. +- **Service**: Egy belső hálózati portot reprezentál, amin -abstrakt módon- elérhetőek a mögé bekötött POD-ok ill. azok szolgáltatásai. Belső terhelés elosztóként működnek. +- **Build, BuildConfig**: Egy alkalmazás forráskódjából Docker image készül. Ez a folyamat a Build és ennek a paraméterezése a BuildConfig. +Az OpenShift alapegységei YAML ill. JSON formátumban is leírhatók. + +# OpenShift Architektúra +![openshift_arch2](../common/images/openshift_arch2.png) +![openshift_arch4](../common/images/openshift_arch4.png) +![openshift_arch6](../common/images/openshift_arch6.png) + +# Alkalmazásfejlesztés +![s2i_2](../common/images/s2i_2.png) + +## Build folyamat +https://docs.openshift.org/latest/dev_guide/application_lifecycle/new_app.html + +A következő módon lehet az OpenShift-en alkalmazásokat buildelni: + +1. Docker: ez gyakorlatilag a Dockerfile alapú buildelési folyamat +2. S2I -Source to Image: a forráskód és egy Builder docker image alapján lefordítja, összeállítja a végterméket (itt is egy Docker image-et) +3. Custom build - Teljesen customizált build folyamat, saját Builder image-el. +4. Jenkins Pipeline build + +A Buildeléshez is Docker containerek jönnek létre! Pl. a megadott forrást egy Java+Maven+Nexus -al konfigurált build container fordítja le. + +![openshift_arch5](../common/images/openshift_arch5.png) + +**BuildConfig** + +A buildelés konfigurációja, többek között leírja, hogy hol a forrás, mi a fordítás eredménye, milyen "stratégia" szerint fordítson, mi triggerelje a fordítást stb. + +**ImageStream** + +A fordítás eredménye egy Docker Image. Az egymást követő buildek láncolata egy ImageStream. +Egy ilyen ImageStream egy nézetet biztosít egy vagy több Docker image-re a címkéken keresztül (pl. cimke a webszerveren, db-n,stb.) + +### Forrás konvenciók +A build folyamatokhoz a forrásainknak a nyelvi ill. technológiai standardeket követni kell, pl. Java buildeléshez kell lenni egy pom.xml-nek - Maven build. +Ezen kívül a buildelési folyamat customizálható több ponton: + +1. Assemble script - az eredménytermék összecsomagolását lehet vele customizálni (pl. zipek, tarok, war-ok, stb.) +2. Run script - Hogyan kell majd futtatni az előállt eredményterméket. +3. Save-Artifacts - A build során használt csomagok, libek elmenthetők, hogy ne kelljen minden buildnél az összes - nem változott- függőséget letölteni. + +## Telepítési folyamat + +![appflow1](../common/images/deploy_flow1.png) +![appflow](../common/images/deploy_flow.png) + +**DeploymentConfig** + +Leírja a telepítési folyamat részleteit. + + +# OpenShift adminisztráció +1. OpenShift dashboard GUI felület: https://127.0.0.1:8443 (oc cluster up után) +2. oc CLI kliens + +## Authentikáció és Authorizáció +Jelenleg password nélkül be lehet lépni az előírt felhasználónevekkel. +A CLI OAuth tokennel is használható. + + +## Legfontosabb CLI parancsok +```shell +oc help +oc CMD --help +oc types --OpenShift alap entitások leírása +oc login --belépés +oc new-app --új alkalmazás létrehozása +#stb. lsd. gyakorlati anyagokban +``` + +# OpenShift skálázási lehetőségek +![scaling](../common/images/openshift_arch3.png) +## Replication Controller-ek +Felelősek, hogy mindig a meghatározott számú Pod fusson. Pl. ha leáll egy, akkor indít újat, stb. +Nem felelős azért, hogy mennyi is ez a Pod szám. Nem figyel forgalmat, terhelést, nem kalkulálja ki ezt a számot, csak végrehajt. +Runtime is állítható, de redeployment esetén csak akkor lesz érvényes, ha DC szinten állítottuk be. + +## Autoscaling +A Pod-ok erőforrás igényei alapján automatikus skálázás is lehetséges. + +- A Pod-ok létrehozásakor meg lehet adni a szükséges resource szükségleteket (Requests). +- Előbbi alapján már kalkulálható, hogy a Pod hol jöjjön létre (scheduling) +- Limit-ek, felső korlátok is megadhatóak resource-onként Pod-okhoz (mennyi a becsült korlát) + +https://www.youtube.com/watch?v=lk1IXYOs3WM + +# OpenShift hálózati kommunikáció +A következő hálózati problémákra ad megoldást az OpenShift +- Routing: hogyan érhetőek el kívülről az alkalmazásaink a PaaS-on +- Összetartozó Docker containerek (Pod-ok) hogyan kommunikáljanak egymással +- Újrainduló Pod-ok változó IP címeinek lekövetése. +- Projekt izoláció - nem láthatják egymást különböző projektek különböző alkalmazásai + +Illusztrált Kubernetes networking: +https://sookocheff.com/post/kubernetes/understanding-kubernetes-networking-model/ + +![networking](../common/images/openshift_arch.png) +## Routing +A fő problémát az jelenti, hogy a különböző Node-okon létrejövő Pod-okban futó alkalmazást, hogyan lehet kívülről elérni, használni. +A **Service** fogalom egy hálózati végpontot reprezentál, ez kívülről még nem érhető el. A Service egy "stabil" hálózati port (nem egy belső docker által osztott port), amelyen elérhető akár több POD által is nyújtott szolgáltatás (loadbalancer). + +**Service** + +- A service nem kötődik konkrét POD-hoz(hiszen az dinamikusan változhat), hanem ún. selector-ral lehet POD-ok címkéire hivatkozni +- Egy POD egy másik POD-dal Service-en keresztül kommunikálhat egy projekten belül. +- A projekten belüli POD-ok konténereiben környezeti változók jönnek létre az egyes Service-ekhez: SVC_NAME_SERVICE_ADDRESS, _PORT +- Az OpenShift belső DNS megoldása alapján is feldoldhatóak a Service-ek host nevei: SVC_NAME.PROJECT_NAME.svc.cluster.local + +A kívülről elérhetőség problémáját az OpenShift úgy oldja meg, hogy egy Router komponens segítségével biztosít belépést a külső hívóknak. + +Az egyes Node-okra kerül egy Router, egy HAProxy, amely fogadja a hálózati forgalmat és megkeresi a megfelelő Service-ket, amelyek felé delegálnia kell. +Pl. a :80 -as porton érkező forgalmat a Router a "frontend" címkével rendelkező Service-ek felé irányítja, ahonnan már a megfelelő Pod-ok elérhetőek. + +## Docker containerek közötti kommunikáció +A Kubernetes oldja meg, hogy egy Pod kap egy belső IP címet, mintha egy különálló Host gép lenne. Ezen a "virtualizált" hoston futnak a Docker containerek így azok képesek kommunikálni egymással. +Pod-ok egymással nem (így) kommunikálnak. Pod-ok más Pod-okkal Service-en keresztül kommunikálhatnak. + +## OpenShift SDN + +https://docs.openshift.com/enterprise/3.0/architecture/additional_concepts/sdn.html#architecture-additional-concepts-sdn + +- Open vSwitch alapú megoldás +- Az OpenShift a Pod-okat egy cluster network-be szervezni (etcd-ben regisztrált alhálózatok): 10.1.0.0/16 +- Node-onként alhálózatok: 10.1.0.0/24, 10.1.1.0/24,... (256 db alhálózat) +- VNID használat multitenant megoldásoknál + +A következő hálózati interfészeket hozza létre Node-onként: +1. br0 - OVS bridge, a Pod-ok ehhez kapcsolódnak (veth párokkal) +- tun0 - OVS port a br0-n az external network felé, Pod-ok default gateway (IP tables, NAT) +- vovsbr - Docker containerek felé +- vxlan0 - Internet felé, Remote container hozzáférésekhez +2. lbr0 - Docker Bridge, a Docker containerek ehhez kapcsolódnak (veth) +- vlinuxbr - Linux peer virtual Ethernet - Docker containerek eléréséhez + +![networking2](../common/images/network.jpg) + +![networking3](../common/images/network2.png) +Pod indulása + +1. A Docker beköti a containert veth párral az lbr0-ba +2. Az előbbi átkerül az OVS br0-ba +3. OpenFlow route szabályok rögzítése az OVS DB-be + +Példa hívási lánc: + +1. A és B konténer egy hoston van: A(eth0,vethA)-B(eth0,vethB) +A->eth0->vethA->br0->vethB->eth0->B +2. A és B konténer más hoston van: A(eth0,vethA)-B(eth0,vethB) +A->eth0->vethA->br0->vxlan0->br0->vethB->eth0->B +3. A és B konténer más hoston van, B pl. egy internetes cím: A(eth0,vethA) +A->eth0->vethA->br0->tun0->...->eth0->B + + diff --git a/docs/Linkek.md b/docs/Linkek.md new file mode 100644 index 0000000..a33fe8c --- /dev/null +++ b/docs/Linkek.md @@ -0,0 +1,11 @@ +# Hasznos linkek + +- Opensource blogs: +- Docker alapfogalmak: +- Kiemelkedő linkgyűjtemény, Docker: +- Docker gyakorlatok: +- Docker telepítése: +- OpenShift tananyagok: +- Minishift, OpenShift saját gépen: +- Openshift (Origin)OKD: +- Minikube, Kubernetes saját gépen: diff --git a/docs/_config.yml b/docs/_config.yml new file mode 100644 index 0000000..c419263 --- /dev/null +++ b/docs/_config.yml @@ -0,0 +1 @@ +theme: jekyll-theme-cayman \ No newline at end of file