Idea „konteneryzacji” zadomowiła się na dobre w świecie Linuxa. Ostatnie lata pokazują zmianę myślenia Microsoftu w bardzo ciekawym kierunku, tzn. do podejścia OSS i większej współpracy z innymi firmami. Nie dziwi więc, że dziura w ofercie natywnych rozwiązań w temacie kontenerów musiała zostać zapełniona. W ramach Open Container Initiative i współpracy z twórcami Dockera, Microsoft przygotował własną wersję silnika, będącego hybrydą rozwiązań z Windowsa, Hyper-V i Dockera, pozwalającego na używanie kontenerów na systemach Windows Server 2016 (Core, Nano) i Windows 10. Rozwiązania te nie są jeszcze gotowe do masowego użycia na produkcji, ale widać, że jest to droga, której Microsoft łatwo nie porzuci. Dlatego warto już dzisiaj zapoznać się z możliwościami tych rozwiązań – jak to wszystko działa, jak zacząć, co można, a z czym są jeszcze problemy.
3. So, what is a container?
„Operating-system-level virtualization is a server
virtualization method in which the kernel of an operating
system allows the existence of multiple isolated user-
space instances, instead of just one. Such instances,
which are sometimes called containers, software
containers,[1] virtualization engines (VEs) or jails [...]”
https://en.wikipedia.org/wiki/Operating-system-level_virtualization
4. And why should I care…
Classic virtualization vs physical machine
Portability
Trending (well, not Windows Containers…yet)
34. Architecture on Linux…
Operating System
File System Other
containerd + runc
libcontainerd
API
libnetwork graph plugins
Docker Engine
Docker Client Docker Compose Docker Swarm Registry
Namespaces/Cgroups
35. Architecture on Linux… and …
Operating System
Namespaces/Cgroups File System Other
containerd + runc
libcontainerd
API
libnetwork graph plugins
Docker Engine
Docker Client Docker Compose Docker Swarm Registry
36. ... And on Windows
Operating System
File System Other
Compute Service
libcontainerd
API
libnetwork graph plugins
Docker Engine
Docker Client Docker Compose Docker Swarm Registry
Namespaces/Cgroups
42. When container is running
Windows Kernel
Session
Manager
Security
Manager
Other
Docker
Engine
Compute
Service
Host User Mode
System
Processes
Container
Management
Job Object Network Storage
System
Processes
Application
Processes
Windows Container
43. Hyper-V isolation mode
Windows Kernel
Session
Manager
Security
Manager
Other
Docker
Engine
Compute
Service
Host User Mode
System
Processes
Container
Management
Job
Object
Network Storage
System
Processes
Application
Processes
Windows Container
Windows Kernel
System
Processes
Guest
Compute
Service
Virtual Machine
44. Windows Server – which one to use?
Windows Server
Windows Server Nano
Windows Server Core
46. In summary
Should I learn it? Yes
Should I use it in production? Not really
47. In summary
Should I learn it? Yes
Should I use it in production? Not really
Links
https://msdn.microsoft.com/en-us/virtualization/windowscontainers/about/about_overview
https://hub.docker.com
https://github.com/MSledzinski/FDDDemo
Programowanie hobby zawodowo
Windows containers wzbudizlo zainteresowanie
Plan
Szybko – pytania na koniec
Odizolowanie grupy procesów od innych – spójna całość, np. virtualy system operacyjny
Nie trzeba emulacji sprzętu jak hiper-v czy kvm
Mamy więcej zasobów do dyspozycji – więc i więcej kontenerów
Problem – pomiędzy dwoma biegunami – virutal i one-machine
Portowalny – cały system
Linux dawno – spotify, uber
Windows – młode rozwiązanie, zyskuje popularność - General Availability 2016 – 2 months ago i dzieje się – zmiany w kernelu windows
Runtime – uruchomienie, nadwzór
Image – opis + pliki które stanowią zawartość, warstwowy – ogromna siła – współdzielony obraz, cache
Pyrzklad system 10GB, Webserver 60 MB, apka 10 MB
Repozytorium – współdzielenie
Trochę tak jakby dać komuś lapka
Sturkutra, gramatyka –da dockera
Trzeba zbudować - uruchomić
Dockerignore wspomnieć
CPU grzeje
Akurat wyszło dość dobrze, bvo często gorzej
Mamy windows z IISem w kontenerze!
Mamy windows z IISem w kontenerze!
Idea linux stara
MS do OCI, 2015 koncpet, Ogłosozne general availability w wrześniu 2016
API 1:1 – przejście łatwe
General availability 2016
nie ma nic wspólnego z ubuntu/bashem na windowśie, powersehllem w ubuntu
Prosto zacząć,
NA/CG – ograniczanie dostępu i też widocznośći zasobób, tak że widzi część a myśli że to wszystko – procesy, użytkownicy
Klientci na górze korzystający z API wystawionego przez silnik dockera, ten ma w sobie wiadomo – bilbioteki, i zdolnośc do obsługi pluginów
Libcontainerd używa containerd i runc do uruchamiania i nadzorowaniw konetenerów itd
A pod spodem funckjonalność na poziomie jądra która pozwala realizaowac te koncepty izolacji
Control groups – cgroups
Namespaces – pid, net, mnt, ipc
File System – layers, AUFS, vfs
Wizualnie wksazac- gdzie nie ma zmiany – czerwoan ramka
+ slajd z winobj + silos
Jak zobaczycie API jest to samo, własciwie 1:1, tooling jest mocno w rozwoju jeszczem, ale przez to że api to samo, tooling na nim działa jak compse czy swarm
MS przyłaczyał się do OCI -> OCF
Nie ma tyle różnic – containerd+runc znikają, ale pojaiwa sie compute service
Control groups – wykoarzystany koncpet JobObject
Namepsaves – object namespacse – silos, networking
Fiel system – registry, union-like filesystem
Compute servive – niskopoziomowe API, nie jest jeszcze publiczne dostępne, bo często się zmienia, więc ciężko byłoby dokłądać featury i zapewniąć kompatybilność wsteczna, troche jak containerd, zarządza kontenerami i trackuje jak są uruchomione, staje się abstrakcją dla bardzo niskopoziomoiwcych funkcjonalności wystawionych przez kernel, więc odcina dockera engine od kernela
Object namespaces
Silos – ma swoje regsitry, proces ids, file system networking
Dodatkowo – resource control
Zmiana roota dla kontenera
Hoist user mode – czyli to co działa w windowsie
Konerner ma swój widok systemu
Ale co sie rzuca w oczy to że mamy System i Application processes – w liuxie wystarczy nam jeden process operujacy na tym wpsólny m kernelu
Container to taki user mode
To jest troche histora windowsa – w linuxie sys calls robione sa bezpośrednio do kernela, a windows przez zbiór DLL (do winapi), w user mode jest ta granica że jak sie chce coś zrobić na kernelu to przez DLL
Ale żeby DLL jedna byłą musi byći druga zależna, a tamata przykładowo robi jakiś RPC zakłądając że jakiś seriws działą w tle – choć żeby roibć zapyutania DNS
Więc ciezko mieć pojedynczy proces
W kontenerze startuje smss process – taki init i n łąduje sporo rzeczy, pracujażęby to ograniczać
Maszyna bezstanowa jest
Komunikacja po SMB żeby dostać się do host file systemu
To na co wiele osób narzkeało – to bezpieczeńśtwo – słuchając o contenerach to już jednak nie ma się takiego wrażenia jak na virtualce – że można otwrozyć cokolwkie jakiś link itd dla zabawaya - pliki jednak się mieszają, przesztrzeń adresowa nie jest w pełni odizolowana a
Niektóre sytuacje wymagają lepszej izolacji – jakiś multitenancy czy obostrzenia prawne
Postanowiono obsłużyć tą sytuacje odpalająć niewidzialne dla użytkownika maszyny virtualne z hyper-v, jest to tylko jeden przełącznik przy uruchamianiu kontenrea i tyle
Domyślenyw windows 10 – bo ciężko było windows server odpalać inaczej na 10 – jednak są róznice, inne zależności itd
Api do dockera jest jednakowe, używanie takie samo, develpoment taki sam
Może się wydawać że to powrót do tego z czeog chciało sięuciec – troche tak, ale zrobionow to sprytnie – stwrozone specjalną maszyne writualną ze spejclaną dystrybucja windowsa, która jest kompletnie bezstanowa, wiec nie operauje zbytnio na dysku, a to co musi jest wspomagane chace files sharing z pomocą vmbus, dzieli pliki z hostem przez smb
Maszyna ta jest startowana raz, zamrażana i potem kolonowana – cały memory snapshot i do nich wstrzykimkiwany ejst konetner
Kosztowność o zasoby – miedzy VM a container
Windows server
Licencjonowane per core
Datcanter – dla cloud, mocno zvirutalizwoanych środowisk – nielimtowane kontenery, storage spaces direct, sotrage repolica
Standard – mniejszych, 2 konternery z hyperv
Ale Nano server nie ma osobnej licencji jest częscią Servera
Licencje – 2 HpV na standard, unlimtied na DataCanter
WSC – obcięty do maximum windows server tak aby uruchomienie większości rzeczy nie było zbytnio problematyczne, .net działą spoko na nich – ale od 3.5 tak, starsze gorezej, ale widać że jest wielki – ale ten base jest współdzielony
.net > 3.5 są już zależności
100+
NANO – decelowa chmura
Zminiejszona liczba featureów – wyleciał UI, fax server – szybszy start, restart
Mniejsza piowierzchnia ataku
Mniej bugów
Nastwaiony na powershell, winrm
Nie installery klasyczna a package itd
To też widać po sposobie instalacji - Najprościej go zainstalowć dociągająć odpowiedni moduł ps’a i tam jest New-NanoServerImage
Raczej pod .net core – ciężko zainstalować zależności, cięższy deploy
Windows 10 znacznie wicej problemów niż server 2016
Windows 10 znacznie wicej problemów niż server 2016
Windows 10 znacznie wicej problemów niż server 2016