Jak zbudować aplikacje z wykorzystaniem funkcjonalności windows server 2016...Lukasz Kaluzny
Zagadnienia:
Nowe funkcjonalności Microsoft Windows Server 2016 w kontekście budowy aplikacji typu cloud-native:
Zastosowanie Nano Servera, czyli odchudzonej wersji Windows Server 2016, oszczędniej korzystającej z zasobów IT.
Uruchamianie na Nano Serwerach WS2016 aplikacji napisanych w .NET, Javie, Pythonie (Django) czy JavaScript (Node.js).
Migracja - bez konieczności zmiany kodu - istniejących aplikacji do architektury opartej o kontenery. Kontenery to rozwiązania oparte na szybkiej wirtualizacji na poziomie procesów. Nie tworzą dodatkowych instancji jądra systemu operacyjnego. Na tym samym hoście można uruchomić większą ilość kontenerów niż maszyn wirtualnych. Uruchamianie i zamykanie kontenera jest też znacznie szybsze, niż uruchamianie i zamykanie maszyny wirtualnej.
Wspólna praca developerów i administratorów nad produktem, czyli DevOps z wykorzystaniem Windows Server 2016 i Visual Studio Team Services w chmurze Azure. Automatyczne budowanie obrazów kontenerów dla każdego nowego kodu i wdrażania ich w różne środowiska
Łatwiejsze zarządzanie obciążeniami aplikacji pomiędzy zasobami we własnej infrastrukturze i w chmurze Azure dzięki WS2016 oraz Azure Service Fabric.
Funkcjonalności Windows Server 2016 powstałe z myślą o wygodzie administratorów:
Nowa wersja PowerShell 5.0 - przynosząca lepsze funkcjonowanie powłoki linii poleceń oraz udoskonalony język skryptowy,
Azure Remote Server Management Tools – zdalne zarządzanie Nano i Windows Server 2016 z Azure,
PowerShell Direct,
Nested Virtualization jako wsparcie ułatwienia nauki i testów.
Bartosz Tkaczewski: Zarządzanie kontenerami może być proste, a nawet przyjemne. Na prezentacji dowiesz się, jak szybko uruchomić klaster na chmurze Googla oraz jak w szybki i wygodny sposób wdrożyć aplikację. Nie zabraknie liźnięcia technikaliów – tych podstawowych i tych nie do końca oczywistych. Aby wilk był syty, a i owca nadal beczała.
Link do repozytorium: https://github.com/tkaczu/uszanowanko-k8s
Wprowadzenie do Kubernetesa oraz omówieni korzyści K8S w kontekście mojego doświadczenia z dwóch startupów, jeden z branży mobile ecommerce i jeden FinTech.
Przenieś się do kontenera, czyli korzyści z Docker i Docker ComposeMariusz Bąk
Docker i Docker Compose to popularne wśród deweloperów narzędzia do konteneryzacji i orkiestracji kontenerów, które wypierają wcześniej stosowaną wirtualizację. Dzięki nim możemy opisywać infrastrukturę za pomocą kodu, utrzymywać jej spójność w ramach zespołu deweloperskiego oraz wersjonować ją. Znacznie ułatwia to rozwijanie złożonych z wielu usług aplikacji.
Prezentacja zawiera krótkie wprowadzenie do tych narzędzi oraz pokazuje kilka użytecznych i ułatwiających pracę trików. Prezentuje również stworzone przeze mnie open-source'owe narzędzie Feater, służące do dynamicznego tworzenia izolowanych środowisk testowych i demonstracyjnych. Dzięki wykorzystaniu przez nie konteneryzacji, można je szybko wdrożyć w typowym wykorzystującym Docker Compose projekcie
Kubernetes - 0 do 1 - 4Developers Warszawa 2019Michał Kurzeja
Kubernetes jest już praktycznie standardem jeśli chodzi o utrzymywanie i zarządzanie aplikacjami chmurowymi. Pozwala na łatwe skalowanie, wdrażanie nowych wersji w podejściu canary i rolling-upgrade, proste rollbacki, uruchamianie serverless i wiele więcej. Z pozoru może wydawać się trudny, ale tak naprawdę do uruchomienia wielu podstawowych scenariuszy nie potrzeba żadnej zaawansowanej wiedzy. Podczas prezentacji pokażę podstawowe założenia i jak składają się w jedną całość.
Jak zbudować aplikacje z wykorzystaniem funkcjonalności windows server 2016...Lukasz Kaluzny
Zagadnienia:
Nowe funkcjonalności Microsoft Windows Server 2016 w kontekście budowy aplikacji typu cloud-native:
Zastosowanie Nano Servera, czyli odchudzonej wersji Windows Server 2016, oszczędniej korzystającej z zasobów IT.
Uruchamianie na Nano Serwerach WS2016 aplikacji napisanych w .NET, Javie, Pythonie (Django) czy JavaScript (Node.js).
Migracja - bez konieczności zmiany kodu - istniejących aplikacji do architektury opartej o kontenery. Kontenery to rozwiązania oparte na szybkiej wirtualizacji na poziomie procesów. Nie tworzą dodatkowych instancji jądra systemu operacyjnego. Na tym samym hoście można uruchomić większą ilość kontenerów niż maszyn wirtualnych. Uruchamianie i zamykanie kontenera jest też znacznie szybsze, niż uruchamianie i zamykanie maszyny wirtualnej.
Wspólna praca developerów i administratorów nad produktem, czyli DevOps z wykorzystaniem Windows Server 2016 i Visual Studio Team Services w chmurze Azure. Automatyczne budowanie obrazów kontenerów dla każdego nowego kodu i wdrażania ich w różne środowiska
Łatwiejsze zarządzanie obciążeniami aplikacji pomiędzy zasobami we własnej infrastrukturze i w chmurze Azure dzięki WS2016 oraz Azure Service Fabric.
Funkcjonalności Windows Server 2016 powstałe z myślą o wygodzie administratorów:
Nowa wersja PowerShell 5.0 - przynosząca lepsze funkcjonowanie powłoki linii poleceń oraz udoskonalony język skryptowy,
Azure Remote Server Management Tools – zdalne zarządzanie Nano i Windows Server 2016 z Azure,
PowerShell Direct,
Nested Virtualization jako wsparcie ułatwienia nauki i testów.
Bartosz Tkaczewski: Zarządzanie kontenerami może być proste, a nawet przyjemne. Na prezentacji dowiesz się, jak szybko uruchomić klaster na chmurze Googla oraz jak w szybki i wygodny sposób wdrożyć aplikację. Nie zabraknie liźnięcia technikaliów – tych podstawowych i tych nie do końca oczywistych. Aby wilk był syty, a i owca nadal beczała.
Link do repozytorium: https://github.com/tkaczu/uszanowanko-k8s
Wprowadzenie do Kubernetesa oraz omówieni korzyści K8S w kontekście mojego doświadczenia z dwóch startupów, jeden z branży mobile ecommerce i jeden FinTech.
Przenieś się do kontenera, czyli korzyści z Docker i Docker ComposeMariusz Bąk
Docker i Docker Compose to popularne wśród deweloperów narzędzia do konteneryzacji i orkiestracji kontenerów, które wypierają wcześniej stosowaną wirtualizację. Dzięki nim możemy opisywać infrastrukturę za pomocą kodu, utrzymywać jej spójność w ramach zespołu deweloperskiego oraz wersjonować ją. Znacznie ułatwia to rozwijanie złożonych z wielu usług aplikacji.
Prezentacja zawiera krótkie wprowadzenie do tych narzędzi oraz pokazuje kilka użytecznych i ułatwiających pracę trików. Prezentuje również stworzone przeze mnie open-source'owe narzędzie Feater, służące do dynamicznego tworzenia izolowanych środowisk testowych i demonstracyjnych. Dzięki wykorzystaniu przez nie konteneryzacji, można je szybko wdrożyć w typowym wykorzystującym Docker Compose projekcie
Kubernetes - 0 do 1 - 4Developers Warszawa 2019Michał Kurzeja
Kubernetes jest już praktycznie standardem jeśli chodzi o utrzymywanie i zarządzanie aplikacjami chmurowymi. Pozwala na łatwe skalowanie, wdrażanie nowych wersji w podejściu canary i rolling-upgrade, proste rollbacki, uruchamianie serverless i wiele więcej. Z pozoru może wydawać się trudny, ale tak naprawdę do uruchomienia wielu podstawowych scenariuszy nie potrzeba żadnej zaawansowanej wiedzy. Podczas prezentacji pokażę podstawowe założenia i jak składają się w jedną całość.
PLNOG19 - Emil Gągała - Przewodnik nowoczesnego sieciowca po pasjonującym, No...PROIDEA
Większość z nas lubi podróżować. Zapraszam na egzotyczną “sieciową” podróż, gdzie poznamy nowe nieznane cywilizacje, odkryjemy na nowo koło z plemionami z github.com: Calico, Flannel, Canal, Weave, ale również spojrzymy z kosmosu na chmury, żeby zobaczyć, co oferują nam giganci stratosfery. Opowiem jak przygotować się do takiej wyprawy i jakie narzędzia się nam przydadzą. Na pewno w podróż warto wziąć słownik nowoczesnego sieciowca, żeby zrozumieć jak inni nazywają to, co my już dobrze znamy: subnet, load balancer, firewall. Jako, że jesteśmy przyjaźnie nastawieni na koniec zbudujemy mosty między naszą tradycyjną cywilizacją: „bare” i „virtual” metalu a Nowym Światem kontenerów i chmury.
http://plnog.pl
https://www.facebook.com/PLNOG/
https://twitter.com/PLNOG
Docker jest wspaniałą technologią. Przy pomocy Dockera w prosty sposób możemy rozwiązać jeden problem, a na jego miejsce stworzyć dwa inne, nowe, bardziej skomplikowane... Co jest powodem takiego stanu rzeczy? Czy przyczyną jest architektura Dockera? Brak zrozumienia? A może coś więcej?
LocalStack to framework udostępniający łatwe w użyciu mocki usług stosu AWS. Podczas prezentacji Maciej skorzystał z serwisu zbudowanego z użyciem serverlessowego Boilerplate autorstwa The Software House oraz skorzystał z takich usług AWS jak API Gateway, DynamoDB, Lambda, StepFunctions czy SQS. Następnie omówił podejście do testowania rozwiązania. Dzięki prezentacji możecie poznać wady i zalety LocalStack. A na koniec Maciej pokazuje przepływ testowy w GitHub Actions, który zwiększy pewność przyszłych zmian.
Wykład ze styczniowego spotkania grupy UW@IT pt. "Ansible w praktyce".
Ansible jest narzędziem wykorzystywanym do automatyzacji codziennych działań związanych z tworzeniem oraz utrzymaniem infrastruktury IT.
GET.NET - Osiołkowi w żłobie dano, czyli o tym jak hostować aplikacje na Mic...Michal Furmankiewicz
Azure oferuje wiele platform na których możesz uruchomić swoją aplikację. Każda ma swoje zalety i wady. Zrobiłem przegląd tych platform dla Ciebie. W prezentacji wyrażam swoją prywatną opinię.
Trudne jest zarządzanie własną infrastrukturą. Trochę prościej jest użyć chmury, jednak wciąż czeka nas sporo konfiguracji. A co, gdyby wszystkie potrzebne usługi skonfigurowały się “same”, a nam pozostało tylko doglądanie całości? AWS Elastic Beanstalk umożliwia zautomatyzowane skonfigurowanie środowiska w chmurze AWS pod konkretne aplikacje. Można dzięki niemu wygodnie uruchomić Dockerowe kontenery i właśnie tym zajmiemy się na prezentacji. Opowiemy pokrótce jak działa Beanstalk i przeprowadzimy deployment przykładowego programu). I to wszystko bez zastanawiania się nad infrastrukturalnymi szczegółami.
Laravel Poznań Meetup #3 - Uruchomienie i praca z Laravel w wirtualnym konten...HighSolutions Sp. z o.o.
Prezentacja, która miała miejsce 2018-04-25 w Poznaniu. Wykonanie: Marek Tenus (HighSolutions).
Jak zainstalować i skonfigurować Dockera? Czym się różni od innych rozwiązań? Jakie są korzyści z korzystania z Dockera?
PLNOG19 - Emil Gągała - Przewodnik nowoczesnego sieciowca po pasjonującym, No...PROIDEA
Większość z nas lubi podróżować. Zapraszam na egzotyczną “sieciową” podróż, gdzie poznamy nowe nieznane cywilizacje, odkryjemy na nowo koło z plemionami z github.com: Calico, Flannel, Canal, Weave, ale również spojrzymy z kosmosu na chmury, żeby zobaczyć, co oferują nam giganci stratosfery. Opowiem jak przygotować się do takiej wyprawy i jakie narzędzia się nam przydadzą. Na pewno w podróż warto wziąć słownik nowoczesnego sieciowca, żeby zrozumieć jak inni nazywają to, co my już dobrze znamy: subnet, load balancer, firewall. Jako, że jesteśmy przyjaźnie nastawieni na koniec zbudujemy mosty między naszą tradycyjną cywilizacją: „bare” i „virtual” metalu a Nowym Światem kontenerów i chmury.
http://plnog.pl
https://www.facebook.com/PLNOG/
https://twitter.com/PLNOG
Docker jest wspaniałą technologią. Przy pomocy Dockera w prosty sposób możemy rozwiązać jeden problem, a na jego miejsce stworzyć dwa inne, nowe, bardziej skomplikowane... Co jest powodem takiego stanu rzeczy? Czy przyczyną jest architektura Dockera? Brak zrozumienia? A może coś więcej?
LocalStack to framework udostępniający łatwe w użyciu mocki usług stosu AWS. Podczas prezentacji Maciej skorzystał z serwisu zbudowanego z użyciem serverlessowego Boilerplate autorstwa The Software House oraz skorzystał z takich usług AWS jak API Gateway, DynamoDB, Lambda, StepFunctions czy SQS. Następnie omówił podejście do testowania rozwiązania. Dzięki prezentacji możecie poznać wady i zalety LocalStack. A na koniec Maciej pokazuje przepływ testowy w GitHub Actions, który zwiększy pewność przyszłych zmian.
Wykład ze styczniowego spotkania grupy UW@IT pt. "Ansible w praktyce".
Ansible jest narzędziem wykorzystywanym do automatyzacji codziennych działań związanych z tworzeniem oraz utrzymaniem infrastruktury IT.
GET.NET - Osiołkowi w żłobie dano, czyli o tym jak hostować aplikacje na Mic...Michal Furmankiewicz
Azure oferuje wiele platform na których możesz uruchomić swoją aplikację. Każda ma swoje zalety i wady. Zrobiłem przegląd tych platform dla Ciebie. W prezentacji wyrażam swoją prywatną opinię.
Trudne jest zarządzanie własną infrastrukturą. Trochę prościej jest użyć chmury, jednak wciąż czeka nas sporo konfiguracji. A co, gdyby wszystkie potrzebne usługi skonfigurowały się “same”, a nam pozostało tylko doglądanie całości? AWS Elastic Beanstalk umożliwia zautomatyzowane skonfigurowanie środowiska w chmurze AWS pod konkretne aplikacje. Można dzięki niemu wygodnie uruchomić Dockerowe kontenery i właśnie tym zajmiemy się na prezentacji. Opowiemy pokrótce jak działa Beanstalk i przeprowadzimy deployment przykładowego programu). I to wszystko bez zastanawiania się nad infrastrukturalnymi szczegółami.
Laravel Poznań Meetup #3 - Uruchomienie i praca z Laravel w wirtualnym konten...HighSolutions Sp. z o.o.
Prezentacja, która miała miejsce 2018-04-25 w Poznaniu. Wykonanie: Marek Tenus (HighSolutions).
Jak zainstalować i skonfigurować Dockera? Czym się różni od innych rozwiązań? Jakie są korzyści z korzystania z Dockera?
2. Kilka słów o Dockerze i kontenerach
Docker to platforma opensource'owa służąca do
tworzenia i wdrażania aplikacji kontenerowych
oraz zarządzania nimi.
Umożliwia ona pakowanie aplikacji w kontenery,
czyli standardowe wykonywalne komponenty
łączące kod źródłowy aplikacji z zależnościami i
bibliotekami systemu operacyjnego wymaganymi
do uruchomienia tego kodu w dowolnym
środowisku.
3. Jak działają kontenery?
Użycie kontenerów jest możliwe dzięki funkcjom izolowania procesów i
wirtualizacji, które są wbudowane w jądro Linuxa.
Funkcje te noszą nazwę grup kontrolnych (cgroups) i służą do przydzielania
zasobów do procesów. Pierwsze implementacje pojawiły się w 2006 roku,
gdy programiści z Google'a wpadli na pomysł rozszerzenia idei grup
procesów, które określili jako "process containers". Funkcjonalność została
dodana do jądra Linuxa w wersji 2.6.24 (styczeń 2008). Od tego czasu
kontrolery cgroups rozwijały się, a ich druga wersja została dostarczona wraz
z jądrem w wersji 4.5 (marzec 2017).
Innymi funkcjami wykorzystywanymi przez Dockera są przestrzenie nazw,
służące do ograniczania dostępu procesów do innych zasobów lub
obszarów systemu albo wglądu w te zasoby lub obszary.
4. Kontrolery cgroups v1
• cpu – ograniczenie zużycia czasu procesora
• cpuacct – rejestrowanie zużycia czasu procesora
• cpuset – przypisanie do zbioru CPU
• memory – rejestrowanie i ograniczanie zużycia pamięci procesów, pamięci jądra dla procesów, itp.
• devices – kontrola użycia mknod
• freezer – kontrola pracy (zatrzymywanie/wznawianie) wszystkich procesów
• net_cls – kontrola ruchu sieciowego
• blkio – kontrola dostępu do urządzeń blokowych
• perf_event – monitorowanie zużycia zasobów
• net_prio – priorytety interfejsów sieciowych
• hugetlb – kontrola dostępu do dużych stron
• pids – kontrola liczby procesów należących
Control groups v2 różnią się interfejsem i funkcjonalnościami, jednak są to niekoniecznie duże zmiany (np.
cpu w v2 łączy cpu i cpuacct), część z nich jest taka sama jak w v1, m. in. pids, perf_event, rdma, a inne
są następnikami kontrolerów z poprzedniej wersji.
5. Wracając do Dockera... Zalety
• Lekkość - kontenery zawierają tylko procesy OS i zależności niezbędne do
wykonania kodu, zajmują więc mało miejsca (w przeciwieństwie do VM)
• Większa efektywność wykorzystania zasobów - dzięki lekkości kontenerów
można odpalić znacznie więcej instancji na tym samym sprzęcie
• Większa produktywność - programiści nie muszą się przejmować
tworzeniem własnego środowiska na VM od zera (nawet jeśli korzystają z
Vagranta, jest to raczej słabsze i wolniejsze rozwiązanie)
• Szybkość działania - uruchamianie i restart VM zajmuje zwykle tyle, ile
(re)start zwykłego systemu. W przypadku kontenerów proces ten jest
znacznie szybszy, dzięki czemu dużo bardziej nadają się do użycia np. w
narzędziach CI (Continuous Integration)
6. Docker w akcji
Instalacja: Install Docker Engine on Debian | Docker Documentation
1. Pobranie i uruchomienie obrazu z dowolną dystrybucją (Image Repository)
$ docker run --rm -it --name test alpine:latest /bin/sh
/ # cat /etc/os-release
$ docker images
Ostatnia komenda wyświetli rozmiar wszystkich obrazów w systemie, alpine zajmuje ~5.6MB
2. Stworzenie własnego obrazu z aplikacją i uruchomienie kontenera + podpięcie się do niego
$ cat Dockerfile
FROM debian:bullseye
RUN dpkg --add-architecture i386
RUN apt-get update && apt-get -y dist-upgrade
RUN apt-get install -y python3 htop
COPY app /app
RUN ls -al /app
RUN echo "some step"
CMD python3 /app/app.py
$ cat app/app.py
import time
import datetime
while True:
print(datetime.datetime.now().strftime("%H:%M:%S"))
time.sleep(1)
$ docker build --tag="example01" . < Dockerfile
$ docker run --rm –it example01
02:31:29
02:31:30
02:31:31
... (detach by CTRL+P CTRL+Q)
$ docker ps # get CONTAINER ID or NAME to attach later
$ docker attach [id/name]
02:35:35
02:35:36
02:35:37
… (detach again)
$ docker exec –it [id/name] /bin/bash
root@[container-id]:/# htop
7. Klastry
Klaster to zbiór współpracujących komputerów mogący być postrzegany
jako jednolity system. Klastry złożone są z węzłów (node), których celem jest
wykonanie jakiegoś zadania, które zarządzane jest przez software, np.
Kubernetes czy Docker Swarm. Architektura tych aplikacji różni się
i przejdziemy do tego później :)
8. Kubernetes (K8s)
Kubernetes (stylizowany na k8s) to otwarte oprogramowanie służące do
automatyzacji procesów uruchamiania, skalowania i zarządzania aplikacjami
w kontenerach. Gospodarzem tego projektu o otwartym kodzie źródłowym
jest Cloud Native Computing Foundation (CNCF).
Prace nad projektem Kubernetes rozpoczęli trzej inżynierowie Google: Joe
Beda, Brendan Burns i Craig McLuckie, a później dołączyli do nich inni
pracownicy Google. Pracowali oni wcześniej nad projektem Borg, który
również służył do zarządzania klastrami. Pierwsze wydanie platformy
Kubernetes nastąpiło w 2014 roku.
Ciekawostka: Kubernetes wewnątrz Google nazywał się jednak inaczej –
jego nazwą był Project 7, nawiązując do postaci Borga ze Star Treka. O
poprzedniej nazwie przypomina logo, w którym ster ma 7 ramion.
9. Architektura Kubernetes (Control Plane)
Kubernetes Master (Control Plane) to jednostka główna, jej zadaniem jest
zarządzanie zadaniami (kontrolowanie obciążenia) oraz komunikacja z innymi
obiektami. Należą do niego:
• etcd – demon opisujący stan klastra w dowolnym momencie. Jest używany
przez serwer API w celu monitorowania klastra i wykrywania zmian
wprowadzonych przez developera/operatora
• Serwer API – kluczowy komponent umożliwiający komunikację (wewnętrzną i
zewnętrzną). API używa JSONa, a dane przesyłane są poprzez HTTP
• Scheduler – komponent zarządzający rozdzielaniem zadań na podstawie
dostępnych zasobów, jego głównym celem jest balansowanie workloadem
tak, aby nie wykraczaćpoza dostępne zasoby
• Controller Manager – komponent zarządzający innymi kontrolerami:
• Replication Controller – skalowanie i replikacja podów w klastrze i tworzenie
nowych, w razie gdy któryś się wysypie
• DaemonSet Controller – kontrolowanie, czy na każdej maszynie (lub kilku)
działa dokładnie jeden pod
• Job Controller – uruchamianie podów, które działają do końca działania
klastra (np. skrypty działające w tle czy demony)
10. Architektura Kubernetes (Nodes)
Kubernetes Nodes (nazywani workerami lub minionami) to
miejsca, w które kontenery są oddelegowane. Każdy node w
klastrze musi mieć uruchomione poniżej wymienione
komponenty:
• Kubelet – odpowiedzialność za stan działania każdego
node'a, zapewnienie poprawnego działania wszystkich
kontenerów w obrębie node'a. Zajmuje się startowaniem,
zatrzymywaniem i utrzymywaniem kontenerów z aplikacjami.
Zadania do wykonania są przekazywane do Kubeleta z
Control Plane'a
• Kube-proxy – proxy do komunikacji sieciowej i
równoważenia obciążenia. Odpowiedzialny jest za
poprawne route'owanie ruchu do prawidłowych
kontenerów na podstawie IP i portu przychodzących żądań
• Kontener/y umieszczone w podzie – "mikroserwis" na
najniższym poziomie. Przetrzymują aplikację, biblioteki i ich
zależności. Mogą być uwidocznione poprzez zewnętrzny
adres IP. Od pierwszej wersji wspierane są kontenery
Dockerowe, a w 2016 roku wszedł support dla rkt.
11. Architektura Kubernetes (pozostałe)
Przestrzenie nazw (Namespaces) zapewniają
podział zarządzanych zasobów w taki sposób,
aby tworzyły one rozłączne zbiory. Ich domyślnym
celem użycia są środowiska z wieloma
użytkownikami (zwykle należących do różnych
zespołów/projektów), a nawet oddzielenie
środowisk devowych, testowych i produkcyjnych.
DaemonSets są odpowiedzialne za scheduling
podów. Zwykle zajmuje się tym
algorytm Schedulera, jednak w niektórych
przypadkach może zajść konieczność
uruchomienia poda w każdym node w klastrze,
np. w celu włączenia loggera, ingress controllera
(czyli load balancera), czy serwisów storage.
12. Pody
Pod jest najmniejszą jednostką możliwą do uruchomienia w Kubernetes. Jest to grupa skonteneryzowanych komponentów,
składa się z jednego lub więcej kontenerów i zagwarantowane jest to, że kontenery wewnątrz poda znajdują się w tym samym
node.
Każdy z nich ma przypisany unikalny adres IP w obrębie klastra, co pozwala aplikacji na użycie portów bez istnienia ryzyka, że
któreś z nich się pokryją. Wszystkie kontenery należące do tego samego poda mogą się ze sobą komunikować, jednak w
przypadku komunikacji pomiędzy podami konieczne jest użycie IP poda. Przy tworzeniu klastrów należy jednak uważać na to,
aby nie korzystać z IP poda bezpośrednio, jako że adresy są nietrwałe (po restarcie IP może ulec zmianie, a w przypadku resetu
kilku podów jednocześnie, mogą się one nawet "wymienić" adresami). Komunikacja ta powinna korzystać więc z usług (ang.
Services), któreprzechowują zależności pomiędzy targetema wybranymadresemIP poda.
Pod może definiować wolumeny, takie jak dyski lokalne czy sieciowe, które udostępnia kontenerom wewnątrz tego poda.
Zarządzanie podami może odbywać się manualnie poprzez API Kubernetes, lecz zadanie zarządzania można oddelegować
do kontrolera. Wolumeny są podstawą funkcjonalności ConfigMaps i sekretów.
13. Serwis (Services)
Serwis w Kubernetes to abstrakcyjny obiekt, który definiuje logiczny zbiór podów oraz
politykę dostępu do nich. Serwisy pozwalają na swobodne łączenie zależnych podów.
Zwykle definiuje się je w YAMLu (co jest zalecane) lub w JSONie, tak jak wszystkie obiekty
w Kubernetes.
Mimo, że każdy pod ma swój unikatowy adres IP, te adresy nie są dostępne poza klastrem,
o ile nie zostaną udostępnione za pomocą Serwisu. Serwis umożliwia aplikacji przyjmować
ruch przychodzący i mogą one być wystawiane zewnątrz poprzez określenie typu w
ServiceSpec. Domyślnie jest to ClusterIP (wystawia serwis poprzez wewnętrzny adres IP w
klastrze, a serwis jest dostępny tylko wewnątrz klastra). Innymi sposobami są NodePort,
LoadBalancer oraz ExternalName (przypisanie do DNS). W przypadku ostatniego typu nie
stosujemy LabelSelectora.
Zbiór podów obsługiwany przez Serwis jest zazwyczaj określany przez LabelSelector. Serwis
kieruje przychodzący ruch do grupy podów korzystając właśnie z etykiet i selektorów.
Dzięki temu, gdy jeden pod się zepsuje, może być on zastąpiony przez nowy bez
negatywnego wpływu na działanie aplikacji. Detekcją nowych podów I kierowaniem
ruchu pomiędzy zależnymi podami zajmują się właśnie Serwisy.
Etykiety mogą być używane na wiele sposobów:
• Mogą dzielić obiekty na deweloperskie, testowe i produkcyjne
• Osadzać znaczniki (tagi) określające wersje
• Klasyfikować obiekty przy użyciu znaczników
14. Wolumeny, ConfigMaps, Sekrety
Systemy plików w kontenerach Kubernetes są zwykle
efemeryczne. Oznacza to, że po restarcie
poda, wszystkie dane znikną. Aby tego zachowania
uniknąć, można wykorzystać wolumeny Kubernetes,
zapewniające dostęp do trwałej pamięci, która może
być współdzielona przez kontenery wewnątrz poda.
Wolumeny są podstawą dla funkcjonalności ConfigMaps
oraz sekretów. ConfigMaps zapewniają dostęp do
konfiguracji poprzez widoczny system plików w
kontenerze, a sekrety odpowiedzialne są za
zapewnianie danych dostępowych (klucze SSH, tokeny
OAuth, hasła) autoryzowanym kontenerom w celu
uzyskania np. zdalnych zasobów w bezpieczny sposób.
Sekrety są znacznie bezpieczniejszym rozwiązaniem niż
umieszczanie wrażliwych danych w definicji poda lub
obrazie kontenera.
15. ReplicaSets, StatefulSets
Celem ReplicaSets jest utrzymanie stabilnego zbioru replik/kopii
uruchomionych podów i zwykle jest używany w celu zagwarantowania
dostępności określonej liczby identycznych podów. Można również
powiedzieć, że ReplicaSets to mechanizm pozwalający Kubernetesowi
utrzymać liczbę instancji, które zostały zadeklarowane dla danego poda.
Oznacza to, że jeśli jakiś pod przestanie działać, ReplicaSets utworzy nowy w
miejscepoprzedniego.
Korzystając ze StatefulSets jesteśmy w stanie utworzyć zbiór podów, w którym
każdy pod ma swoją "tożsamość". Do takich podów można przypisać
połączenia sieciowe, czy wolumeny, co pozwala na łatwy powrót poda do
poprzedniego stanu po np. restarcie. Zaletą tego rozwiązania jest łatwość w
utrzymaniu baz danych czy modeli master-slave, jednak za mechanizmy
recovery odpowiadamy sami – z tego powodu warto by było napisać jakiś
skrypt, który zautomatyzowałby podnoszenie się podów.
16. Replication Controllers, Deployments
Replication Controller zarządza systemem w taki
sposób, aby liczba działających podów zgadzała się z
liczbą podów zadeklarowaną w ReplicaSet.
Deployment jest wysokopoziomowym mechanizmem
zarządzania dla ReplicaSets. Zadaniem Replication
Controllera jest utrzymanie wielkości ReplicaSets, a
Deployment zarządza tym co dzieje się z ReplicaSet.
Kiedy deploymenty są skalowane, zmienia się
definicja ReplicaSet, a następnie Replication
Controller zarządza utrzymaniem zadeklarowanego
stanu.
17. minikube, kubectl
minikube to narzędzie pozwalające uruchomić Kubernetes lokalnie. Tworzy
on klaster Kubernetes składający się z jednego węzła na PC, dzięki czemu w
łatwy sposób można wypróbować jak działa Kubernetes, lub wykorzystać go
do codziennej pracy. Aby go uruchomić, musimy mieć zainstalowanego na
sprzęcie Dockera oraz kubectl i wystarczy, że wywołamy polecenie
minikube start, aby stworzyć wspomniany wcześniej klaster.
kubectl to narzędzie służące do ogólnopojętego zarządzania klastrami
Kubernetes. Dzięki niemu można wdrażać aplikacje, podglądać i zarządzać
zasobami klastrów oraz przeglądać logi.
Instrukcja do instalacji znajduje się tu: Install and Set Up kubectl on Linux |
Kubernetes, a dokumentacja toola tu: Overview of kubectl | Kubernetes.
18. Docker Swarm
Docker Swarm, podobnie jak Kubernetes, jest narzędziem do
orkiestracji kontenerów w różnych środowiskach
infrastrukturalnych. To platforma open source, której kod
źródłowy jest dostępny na licencji Apache 2.0. Swarm jest
dostarczany i wspierany przez firmę Mirantis (Mirantis przejęło
platformę od Dockera w 2020 roku).
Docker Swarm służy do zarządzania pojedynczymi
elementami i całymi klastrami (grupami maszyn fizycznych lub
wirtualnych) korzystając z Docker Engine. Ułatwia tym samym
proces zarządzania aplikacją, przyspiesza nowe wdrożenia,
zdejmuje z developerów wiele czynności DevOps, takich jak
dopasowywanie oprogramowania pod konkretne
wymagania infrastruktury. Bezbłędnie pracuje ze wszystkimi
aplikacjami wykorzystującymiDockera do konteneryzacji.
19. Funkcjonalności Docker Swarma
• Zarządzanie klastrami zintegrowane z Docker Engine - wykorzystując Docker Engine CLI można stworzyć cały klaster, a następnie nim
zarządzać. Nie potrzebujemy więc żadnego dodatkowego oprogramowania poza Dockerem.
• Zdecentralizowany design – Docker Engine nie rozróżnia specjalizacji ról węzłów w trakcie deploymentu, przez co możemy z jednego
miejsca stworzyć workerów i managerów (jedno miejsce oznacza tu wspólny obraz).
• Skalowalność - dla każdego serwisu można zadeklarować liczbę zadań do wykonania, a przy skalowaniu w dół lub w górę, swarm
manager automatycznie adaptuje się do zmian poprzez dodawanie lub usuwanie zadań w celu utrzymania oczekiwanego stanu.
• Utrzymywanie pożądanego stanu – węzęł swarm manager ciągle monitoruje stan klastra i śledzi wszelkie odchyły od pożądanego
stanu. Oznacza to, że gdy któreś repliki padną, to manager odtworzyte repliki.
• Dedykowana warstwa sieciowa – Docker sam zarządza połączeniami pomiędzy elementami klastra oraz kontenerami tworząc sieci
typu overlay (tunelowane) bez potrzeby ich ręcznego konfigurowania.
• "Odkrywanie" serwisów (service discovery) - węzły swarm managerów przypisują każdemu serwisowi w swarmie unikalną nazwę DNS i
zarządzają obciążeniem na uruchomionych kontenerach. Dzięki nazwom DNS jesteśmy w stanie odpytywać wszystkie kontenery w
klastrze poprzez serwer DNS wbudowany w Swarm.
• Zarządzanie obciążeniem - można wystawić porty do zewnętrznego load balancera. Wewnętrznie Swarm pozwala na
wyspecyfikowanie jak powinny zostać rozdystrybuowane kontenery z aplikacjami pomiędzy nodami.
• Bezpieczeństwo - każdy node w swarmie wymaga uwierzytelnianie TLS oraz szyfrowanie w celu zabezpieczenia komunikacji pomiędzy
węzłami.
• Płynne aktualizacje (rolling updates) - możliwość płynnego aktualizowania aplikacji w trakcie działania klastra oraz cofania się do
poprzedniej wersji.
20. Manager Node
Węzeł Managera zajmuje się zarządzaniem klastrem a
jego zadaniami są:
• utrzymanie stanu klastra,
• schedulowanie serwisów,
• udostępnianie API HTTP swarma.
Zwykle powinniśmy mieć więcej niż jeden Manager
Node, jednak mimo że działanie klastra na pojedynczym
managerze jest dobre dla testów, to jakiekolwiek
problemy kończą się wtedy koniecznością zbudowania
klastra od nowa.
Zaleceniem od zespołu Docker jest uruchamianie
nieparzystej liczby Manager Node'ów, a zalecaną
maksymalną liczbą uruchomionych Managerów jest 7.
Dzięki temu klaster złożony z n Managerów może
przetrwać (n-1)/2 niedziałających Managerów
jednocześnie.
21. Worker Node
Węzeł Worker jest instancją Docker Engine
odpowiedzialną za uruchamianie kontnenerów.
Każdy węzeł Worker wymaga co najmniej
jednego działającego Managera i nie jest w
stanie działać samoczynnie. Domyślnie wszystkie
Manager Nodes są również Workerami.
W przypadku zarządzania jednowęzłowym
klasterm możemy korzystać z poleceń do
tworzenia serwisów, a scheduler zajmie się
przydzielaniem zadań na lokalnej maszynie.
Aby wielowęzłowy klaster uruchamiał zadania
tylko na Worker Node'ach, musimy zmienić
dostępność Manager Node'ów na Drain.
22. Zamiana ról Managera i Workera
Pomimo pełnienia różnych ról, można wypromować każdego Workera na
Managera poprzez uruchomienie polecenia docker node promote.
Operacja ta może być szczególnie przydatna w przypadku maintenance'u
Manager Node'a lub przerwy w jego działaniu.
23. Serwisy
W celu deployowania obrazu aplikacji w trybie Swarm, potrzebujemy stworzyć
serwis. Zwykle serwis jest obrazem dla mikroserwisu w kontekście jakiejś większej
aplikacji, np. serwer HTTP, baza danych czy inny typ wykonywalnej aplikacji jaką
chcemy uruchomić.
Tworząc serwis, musimy wybrać obraz kontenera do użycia i jakie komendy
chcemy uruchomić w działających kontenerach. Ponadto, należy zdefiniować
poniższe opcje dla serwisu:
• Port na którym Swarm udostępnia serwis poza Swarmem,
• Sieć tunelowądla serwisu w celu połączenia się do innych serwisów Swarm
• Limit wykorzystania pamięci oraz CPU
• Polityka rolling updates
• Liczba replik obrazu mająca być uruchomiona w Swarmie
24. Serwisy, zadania i kontenery
W trakcie deploymentu serwisu do swarma, swarm manager
przyjmuje naszą definicję serwisu jako pożądany stan dla serwisu.
Następnie scheduluje serwis na węzłach jako jeden lub wiele replik
zadań. Zadania działają niezależnie od siebie na każdym węźle.
Jako przykład weźmy sytuację, w której chcielibyśmy uruchomić load
balancer na trzech instancjach listenera HTTP. Diagram obok
pokazuje serwis HTTP listenera z trzema replikami, gdzia każda z trzech
instancji listenera jest zadaniem w swarmie.
Kontener jest izolowanym procesem. W modelu trybu swarm, każde
zadanie wywołuje dokładnie jeden kontener. Analogią do zadania
może być slot, w który scheduler wrzuca zadanie, a następnie gdy
kontener jest uruchomiony, scheduler rozpoznaje, że wybrany task jest
w uruchomione. Jeśli kontener nie przejdzie health check'a lub
padnie (z jakiejkolwiek przyczyny), task również kończy się.
Healthcheck to sposób na sprawdzenie, czy kontener działa w
oczekiwany sposób, np. poprzez cykliczne wywoływanie jakiegoś
polecenia, takiego jak request do serwera HTTP.
25. Zadania i scheduling
Zadanie jest atomową jednostką dla swarmowego
schedulera. W trakcie deklaracji pożądanego stanu
serwisu poprzez stworzenie serwisu lub
zaktualizowanie go, orkiestrator dąży do określonego
stanu poprzez wykonywanie zadań. Jeżeli któryś z
tasków się nie powiedzie (np. poprzez crash
kontenera lub nieprzejście healthcheck'a),
orkiestrator stworzy nowy task, który replikuje
poprzedni.
Zadanie jest jednokierunkowym mechanizmem i
może występować w następujących stanach: NEW,
PENDING, ASSIGNED, ACCEPTED, PREPARING,
STARTING, RUNNING, COMPLETE, FAILED, SHUTDOWN,
REJECTED, ORPHANED, REMOVE.
Diagram po prawej stronie pokazuje w jaki sposób
swarm mode obsługuje żądanie stworzenia serwisu i
przypisuje zadania do workerów.
26. Porównanie K8s i Swarma
Kubernetes Docker Swarm
Definicja i instalacja aplikacji
Wdrożenie poprzez kombinację podów, serwisów
lub mikroserwisów oraz deploymentu.
Wdrożenie przez serwisy lub mikroserwisy w
klastrach.
Dostępność aplikacji
Wysoka, deployment umożliwia rozmieszczenie
podów pośród nodeów, nawet w przypadku awarii.
Ponadto serwisy z load-balancingiem wyłapują
niesprawne pody i zastępują je nowymi.
Wysoka, serwisy można replikować w nodeach, a
swarm manager odpowiada za cały
klaster i zarządza rozłożeniem zasobów wśród
wszystkich workerów.
Load Balancing
Wbudowany, jednak wymaga ręcznej
konfiguracji i aktywacji. Pody zdefiniowane jako
serwisy mogą być w ykorzystane jako load balancer
(poprzez kontroler ingress).
Swarm posiada komponent DNS, który zarządza
żądaniami wysyłanymi do serwisów. Serwisy mogą
być uruchamiane na portach określonych przez
użytkownika lub przypisane automatycznie.
Aktualizacje (rolling updates)
Zrealizowane w podobny sposób, w obu przypadkach jesteśmy w stanie określić liczbę jednocześnie
prowadzonych aktualizacji (poprzez wybranie maksymalnej liczby niedostępnych podów lub wprost).
Health check
Dwa rodzaje health checków: liveness
(responsywność aplikacji) oraz readiness (gotowość
aplikacji). K8s ma wbudowany mechanizm logów.
Ogranicza się do serwisów, gdy jakiś kontener nie
przejdzie healthchecka, uruchomiony zostaje nowy.
Użytkownik może zdefiniować własny healthcheck.
Networking
Płaski model sieci, wszystkie pody mogą się ze sobą
komunikować, a zasady sieci określają jak bardzo
dostępne są pody.
Użytkownik może stworzyć sieć tunelową (overlay)
oraz mostkową (bridge), które umożliwiają
komunikację między wieloma hostami i wewnątrz.
Wydajność i skalowalność
Dla v1.18: max 5 000 nodeów, do 150 000 podów,
do 300 000 kontenerów, do 100 podów na node.
Na każdego Swarm Managera przypada max 1 000
workerów oraz 30 000 kontenerów.
27. Zalety i wady Kubernetesa i Swarma
Kubernetes Docker Swarm
Zalety
• Jest wspierany przez Cloud Native
Computing Foundation (CNCF).
• Bardzo duża społeczność, ponad 1200
kontrybutorów z 50000 commitami.
• Narzędzie open-source działające na
większości systemów operacyjnych.
• Łatwa organizacja usług dzięki podom.
• Łatwy w instalacji, szybka konfiguracja.
• Swarm jest wbudowany w Docker
Engine, jest jednym z komponentów
Dockera.
• Jest łatwiejszy do nauczenia się niż
Kubernetes.
• Bardzo dobrze zintegrowany z Docker
Compose i Docker CLI, jako że jest to
jedna rodzina tooli.
Wady
• Instalacja może być dość
skomplikowana (korzystaliśmy z
minikube, więc było łatwiej), krzywa
uczenia jest barzdo stroma.
• Wymaga osobnego tool'a do
zarządzania, jednym z takich narzędzi
jest kubectl.
• Jest niekompatybilny z Docker CLI oraz z
Dockerem Compose.
• Ograniczona funkcjonalność w stosunku
do K8s.
• Ograniczona odporność na błędy.
• Mniejsza społeczność.
28. Bibliografia
• Czym jest Docker? - Polska | IBM
• cgroups(7) - Linux manual page (man7.org)
• namespaces(7) - Linux manual page (man7.org)
• cgroups - Wikipedia
• Kubernetes — co to jest? | Kubernetes
• Kubernetes - Wikipedia
• Monitoring Kubernetes in Production: How To Guide – Sysdig
• minikube start | minikube (k8s.io)
• InteractiveTutorial - Creating a Cluster | Kubernetes
• Kubernetes vs. Docker Swarm– porównanie
• How swarmmode works - Docker
Oraz pozostałe linki znajdujące się na slajdach.