Projekt i wdrożenie środowiska k8s opartego na Amazon EKS
Klient, którego przypadek opisujemy to norweska firma oferująca bezpieczne bramki oraz nie zawodne i bezpieczne urządzania IoT oparte na nowoczesnych otwartych standardach, które wspierają rozwiązania z zakresu bezpieczeństwa, inteligentnego domu i opieki zdrowotnej. Dzięki produktom Klienta użytkownicy mogą wykorzystywać istniejące już możliwości IoT oraz rozwijać je wraz z rozwojem narzędzi Klienta. W razie potrzeby firma wspiera również swoich klientów w modyfikacji oprogramowania i oferuje moduły radiowe dostosowujące produkty klienta do świata IoT.
POCZĄTEK WSPÓŁPRACY
W momencie nawiązania współpracy Infrastruktura Klienta zbudowana była w chmurze AWS na klastrach Kubernetes w systemie kOps. Do tej pory po stronie Klienta za rozwój i utrzymanie infrastruktury odpowiadał DevOps z którym współpraca została zakończona. Sytuacja była o tyle problematyczna, że nie było nikogo, kto płynnie mógłby przejąć infrastrukturę i zająć się koordynacją deploymentu, dopracowaniem CiCD, czy doprowadzeniem do końca rozpoczętych wdrożeń w ramach infrastruktury.
Zlecenie dotyczyło więc zajęcia się niezwykle rozległą infrastrukturą, którą musieliśmy odkryć sami kawałek po kawałku. Naszym pierwszym zadaniem było dogłębne poznanie i zrozumienie zastanego środowiska, określenie co jest niezbędne do poprawnego działania aplikacji, jakie są zależności pomiędzy różnymi elementami infrastruktury i rozłożenie na części pierwsze deploymentu poskładanego z dziesiątek templatek, kodów i konfiguracji.
MIGRACJA I OPTYMALIZACJA
Cały proces nauki, był jedynie wstępem, który przygotował nas do migracji infrastruktury Klienta do nowego środowiska opartego na Amazon EKS. Dzięki pełnemu zrozumieniu i uporządkowaniu starej infrastruktury, łatwiej było nam wdrożyć poszczególne środowiska na nowym klastrze. Proces wymagał od nas napisania od nowa wszystkich helmów. Przygotowaliśmy również generyczny pipeline, dzięki któremu deploy działa ze 100% skutecznością, zarówno na środowisku developerskim jak i produkcyjnym.
Kiedy już poznaliśmy środowisko w najdrobniejszych szczegółach rozpoczęliśmy proces planowania migracji zasobów ze starego środowiska k8s do nowego, opartego o Amazon EKS. Cała operacja odbywała się „obok” działającej produkcji, której praca w żaden sposób nie mogła być zakłócona. Bardzo dużym wyzwaniem było nienaruszenie rozległej sieci zależności, które występowały pomiędzy narzędziami znajdującymi się na starym klastrze, a serwisami które pracowały już na nowym. Jednocześnie konsultowaliśmy z Klientem nowe rozwiązania, które niezbędne były do rozwoju aplikacji Klienta.
Jedną z ważniejszych optymalizacji, którą wdrożyliśmy już na samym początku współpracy, było usprawnienie systemu powiadomień klientów korzystających z aplikacji Klienta, którego zadaniem było alarmowanie ich w sytuacjach zagrożenia takich jak zalanie czy pożar.
Grupa maszyn z zewnętrznym IP była whitelistowana w firmie, która fizycznie obsługiwała wysyłkę powiadomień oraz ewentualne powiadomienie odpowiednich służb ratunkowych. W momencie, w którym instancje z „doczepionym” IP terminowały się, należało w sposób ręczny na nowo „podczepić” im IP. Gdyby czynność ta nie została wykonana, alarm zwyczajnie mógłby nie zadziałać. Poprawiliśmy to rozwiązanie tworząc grupy nodeów, które za pośrednictwem nategateway wychodzą z klastra produkcyjnego ze stałym numerem IP. Pod nim ulokowane są maszyny, które łączą się poprzez Gateway. W ten sposób usunęliśmy spore ograniczenie w funkcjonalności aplikacji i zagwarantowaliśmy całodobowe działanie powiadomień.
ZARYS INFRASTRUKTURY
Jak już wspomniano, środowisko Klienta składa się z klastra developerskiego i produkcyjnego. Na froncie infrastruktury znajduje się AWS Route53 i ACM, następnie load balancery AWS, które zarządzane są z poziomu klastra. Każdy z klastrów posiada swój VPC, natomiast do zarządzania danymi wykorzystywane są: RDS oraz posgreSQL i mySQL.
NARZĘDZIA SKŁADAJĄCE SIĘ NA WARSTWY APLIKACJI:
- Amazon VPC - warstwa, w której definiowana jest organizacja sieci
- AWS Route53 – obsługuje domeny wykorzystywane przez aplikacje
- Amazon EKS – do obsługi klastrów kubernetes
- AWS Certificate Manager – do obsługi certyfikatów SSL
- Amazon SES
- Amazon EFS
- Amazon RDS
- AWS Cognito
- AWS S3
PODSUMOWANIE
Współpracę z Klientem nawiązaliśmy w bardzo trudnym dla niego momencie, bez możliwości „nauczenia się” infrastruktury, od osób które zajmowały się nią wcześniej. Sami poznaliśmy wszystkie zastosowane rozwiązania, uporządkowaliśmy infrastrukturę i poprawiliśmy najważniejsze elementy. Tak przygotowaną infrastrukturę zmigrowaliśmy na nowe środowisko k8s oparte na Amazon EKS, wdrażając jednocześnie najlepsze praktyki i rozwiązania gwarantujące stabilną pracę aplikacji Klienta. Napisaliśmy od nowa rozległy pipeline CICD, umożliwiając regularny i bezpieczny deploy. Obecnie pracujemy nad rozwojem środowiska m.in. w zakresie nowego Terraforma, świadczymy usługi doradcze oraz całodobową opiekę administracyjną nad zasobami Klienta.
PYTANIA? SKONTAKTUJ SIĘ Z NAMI
Czytaj również:
Przejęcie opieki i projekt infrastruktury w chmurze AWS dla ZTM Warszawa
Projekt i wdrożenie środowiska w chmurze AWS dla aplikacji mobilnej Droids on Roids