Sektor finansowy w kontenerach?
Są typy projektów, które lubimy i „czujemy” oraz takie, których wolimy unikać. Doradztwo przy projektach związanych z rozwojem infrastruktury IT należy do tych, które sprawiają mi największą frajdę, szczególnie, gdy mogę jednocześnie współpracować z fantastycznym zespołem specjalistów z inleo. Przybliżę Wam mały wycinek naszej pracy doradczej, którą realizowaliśmy ją dla jednej z największych firm sektora finansowego w Polsce.
Przyszło nam się mierzyć, nie tylko z ograniczeniami natury biznesowej czy technicznej, ale także prawnej, związanej ze specyfiką sektora bankowego. Warto też zaznaczyć, że zamawiający zatrudnia zespół wysokiej klasy specjalistów z praktycznie każdej dziedziny IT, który na bieżąco weryfikował i testował nasze propozycje.
Skupię się na dwóch obszarach tego projektu, które obejmują fragmenty zagadnień compute oraz storage.
Technologiczne aspekty projektu musiały wpisywać się w ogólnie przyjętą przez klienta strategię rozwoju systemów teleinformatycznych rozbudowy aplikacji. Zaczynaliśmy pracę, mając postawione jasne technologiczne i biznesowe cele, jakie należało osiągnąć. Wśród najważniejszych technologicznych założeń należy wymienić:
- Dążenie do unifikacji wewnętrznych usług poprzez ich standaryzację i kreowanie ich za pomocą zdefiniowanych w katalogu elementów infrastruktury i aplikacji.
- Dążenie do dalszej mikrosegmentacji serwisów poprzez modularyzację ich budowy oraz odejście od natywnego wykorzystywania maszyn wirtualnych na rzecz konteneryzacji. W tym obszarze zamawiający preferował wykorzystanie klastrów Kubernetes, lecz dopuszczał on też inne rozwiązania.
- Docelowe rozwiązanie konteneryzacyjne ma działać w lokalnych centrach zamawiającego, ale w przyszłości powinno pozwalać na przenoszenie aplikacji na nim działających lub ich rozciąganie do chmury publicznej bez wprowadzania istotnych zmian w budowie aplikacji czy samego klastra.
- Architektura powinna zapewniać elastyczność w budowaniu rozwiązań w zależności od specyficznych wymagań projektu, zespołu czy aplikacji. Jednocześnie nie może być mowy o żadnych kompromisach w obszarach bezpieczeństwa i redundancji czy odporności na awarie.
- Zarządzanie infrastrukturą powinno być w miarę możliwości całkowicie zautomatyzowane, wpisywać się w przyjęty model Continuous Deployment oraz uwzględniać wewnętrzne standardy rozliczania kosztów usług.
Realizując projekt widzieliśmy już jakie są preferencje naszego klienta co do technologii czy kierunku, w którym chciałby rozwijać swoją infrastrukturę, co nie znaczy, że skupiliśmy się jedynie na dopracowaniu jego wizji. Wręcz przeciwnie! Każdy z pomysłów był poddawany gruntownej analizie i uzupełnieniom o dodatkowe propozycje.
Konteneryzacja
W zaproponowanym rozwiązaniu platformę compute dla aplikacji stanowią kontenery, a dokładniej klastry Kubernetes. Nie są one jednak uruchamiane natywnie na poszczególnych hostach, lecz wewnątrz maszyn wirtualnych. Rozwiązanie takie pozwala łączyć ze sobą pozytywne aspekty zarówno wirtualizacji jak i konteneryzacji. Ważnym aspektem w tym projekcie jest także zapewnienie zgodności z uwarunkowaniami prawnymi dla sektora finansowego w Polsce. Wirtualizacja pozwala na stałe przepisanie zasobów maszyny wirtualnej do konkretnej aplikacji, projektu czy departamentu. Zapewniona jest w ten sposób, izolacja zasobów sprzętowych dla każdej aplikacji, w każdym z centrów przetwarzania danych, w każdej ze stref bezpieczeństwa. Mechanizmy te są dobrze znane, udokumentowane i akceptowane przez instytucje nadzoru finansowego, zatem ich wykorzystanie stanowi podstawę bezpieczeństwa i pozytywnego przejścia niezbędnych audytów. Jednocześnie wykorzystywane są wszystkie zalety mikrosegmentacji, które daje konteneryzacja.
Dlaczego Kubernetes?
Jako system orkiestracji zapewnia on możliwość wdrażania aplikacji w oparciu o pody, serwisy (w tym mikroserwisy) i całe deploymenty. Zapewnia on zaawansowany mechanizm skalowania i wysoką dostępnością aplikacji na nim uruchomionych. Nie bez znaczenia jest też fakt, że jest to natywnie dostępny system Konteneryzacji we wszystkich wiodących usługach chmury publicznej – Azure Kubernetes Services (AKS) czy Amazon Elastic Kubernetes Service (EKS).
W opisywanym projekcie, ze względów bezpieczeństwa przyjęto założenie, że klastry Kubernetes nie są rozciągane pomiędzy centrami danych. Jeżeli aplikacja logicznie ma być pomiędzy nie rozciągnięta, to powoływane są niezależne klastry zarówno w każdym z centrów przetwarzania danych czy chmurze publicznej. Jednocześnie w przyszłości możliwe jest rozciągnięcie klastrów, gdyby wymagania biznesowe i techniczne uległy zmianie.
Kolejnym ważnym założeniem, uwzględnionym w naszej propozycji, jest przyjęcie modelu Immutable Infrastructure.
Polega on na tym, że po powołaniu do życia infrastruktury, zarówno zwirtualizowanej, jak i skonteneryzowanej, nie dokonuje się ich modyfikacji. Oznacza to, że w przypadku awarii lub aktualizacji, uruchamia się nowe klastry Kubernetes , a następnie usuwa stare. Takie podejście pozwala na wprowadzenie modelu opisywanego jako Chaos Engineering, w tym, przede wszystkim, metodologii Choas Monkey i Chaos Testing.
Planowana platforma konteneryzacyjna, miała być oparta o infrastrukturę zapewniającą odpowiednią redundancję warstwy kontrolnej (control plane).
W przygotowanej koncepcji, każdy klaster Kubernetes zarządzany jest przez minimum trzy węzły z zachowaniem zasady nieparzystości węzłów zarządzających, celem zapewnienia kworum. Samo etcd, czyli kluczowy komponent pozwalający zachować stan klastra oraz jego konfigurację, skonfigurowany zostanie w modelu Stacked etcd, w którym kontener obsługujący magazyn etcd uruchamiamy jest w każdym z węzłów tworzących warstwę control-plane. Rozwiązanie takie zmniejsza liczbę węzłów, którymi trzeba zarządzać w ramach klastra. Wymaga to jednak synchronizacji danych pomiędzy węzami, aby zapewnić spójność przechowywanych informacji. Z punktu widzenia wymogów bezpieczeństwa jest to jednak rozwiązanie preferowane – przestrzeń dyskowa dla etcd zawiera się w przestrzeni dyskowej wskazanego węzła klastra.
Wniosek?
Budowa infrastruktury w oparciu o Kubernetes bardzo dobrze wpisuje się w strategię naszego klienta pozwalającą na tworzenie katalogu usług w swojej infrastrukturze, czyli zestawu klocków, z których następnie budowane są aplikacje oraz powiązanych z nimi zestawu niezbędnych działań konfiguracyjnych na infrastrukturze teleinformatycznej. Klocki te, w dalszej przyszłości, pozwalają na elastyczne alokowanie zasobów, odporność na awarię, a także szacowanie kosztów, które muszą zostać poniesione na wdrożenie i utrzymanie aplikacji.
Storage
Zarówno wirtualizacja jak i konteneryzacja niosą za sobą konkretne wymagania dotyczące rozwiązań storage.
W realizowanym projekcie rekomendowaliśmy użycie oprogramowania NetApp Trident.
Jest to rozwiązanie open-source zaprojektowane od podstaw, aby pomóc spełniać specyficzne wymagania dotyczące trwałości aplikacji kontenerowych. Trident dostarcza nie tyle dostęp do przestrzeni dyskowej, co interfejs tłumaczący skomplikowane wymagania kontenerów i działających w nich aplikacji, w zautomatyzowaną i zorganizowaną odpowiedź infrastruktury. Co ważne, oprogramowanie obsługuje systemy do zarządzania danymi znane z lokalnych centrów przetwarzania danych, takie jak ONTAP, Element czy SANtricity, ale także usługę Azure NetApp Files, czy Cloud Volumes w AWS. Integracja z Kuberetes realizowana jest przez odpowiedni plugin.
Działanie NetApp Trident w Kubernetes opiera się o trzy podstawowe rodzaje obiektów opisujących pamięci masowe i operacje:
- Persistent Volume (PV) – opisują sposób połączenia z urządzeniami pamięci masowej za pomocą NFS lub iSCSI. Zawierają takie parametry jak pojemność, typ dostępu, protokół czy politykę.
- Persistem Volume Clain (PVC) – to żądanie dostępu do zasobów pamięci generowane przez aplikację. Zawiera co najmniej informacje o rozmiarze i trybie dostępu.
- Storage Class – to określenie zdefiniowanej przez administratora klasy pamięci na podstawie predefiniowanych właściwości.
- Aplikacja tworzy PVC zgodnie z specyfikacją Storage Class
- Trident zostaje poinformowany o zapotrzebowaniu
- Trident tworzy zasób dyskowy
- Trident tworzy PV
- Kubernetes tworzy powiązanie z PV I PVC
Kubernetes na żądanie aplikacji zdefiniowane w PVC przypisuje jej PV, który pasuje do określonych w PVC wymagań. Sama pamięć typu storage nie jest podłączona do węzłów Kubernetes aż do momentu zainicjowania poda. Po utworzeniu instancji kontenera na hoście kubelet, montuje urządzenia magazynujące bezpośrednio w kontenerze.
NetApp ma dodatkową zaletę – pozwala na uruchomienie wirtualnej instancji macierzy w chmurze publicznej, umożliwiając tym samym, proste przenoszenie danych pomiędzy lokalnymi instalacjami w centrum przetwarzania danych a cloudem.
Administrator uzyskuje jednolite narzędzie do zarządzania zasobami dyskowymi dla wszystkich środowisk. Takie rozwiązanie wpisuje się nie tylko w wymagania wysokiej dostępności, lecz także długoterminowej strategii tworzenia hybrydowych rozwiązań opartych, zarówno o lokalne centra przetwarzania danych, jak i chmurę publiczną.
Podsumowując:
Świat aplikacji niewątpliwie zmierza w kierunku mikrosegmentacji realizowanej, między innymi poprzez konteneryzację. Infrastruktura teleinformatyczna musi podążać za tymi zmianami. Aplikacja nie działa przecież zawieszona w próżni, a samej infrastruktury nie budujemy by stała bezczynnie. Konteneryzacja stawia przed architektami i administratorami zupełnie nowe spektrum wyzwań.
W tym artykule ledwo liznęliśmy czubka góry lodowej.
Pingback: Cloudian niczym rycerz na białym koniu? » Inleo - Infrastruktura i architektura IT, Konteneryzacja, Datacenter, Private Cloud, PM