Budowa infrastruktury opartej na technologii Kubernetes i opieka nad zasobami
Dla naszego Klienta, nowoczesnej firmy cloud native, która wszystkie swoje zasoby przechowuje w chmurze, a przy tym jednego z liderów rynku energii odnawialnej, świadczyliśmy usługi w zakresie doradztwa, projektowania, budowy i opieki nad infrastrukturą w chmurze Amazon Web Services.
Początek współpracy i infrastruktura
Klient, nawiązując z nami współpracę, posiadał już infrastrukturę opartą na klastrach Kubernetesowych w AWS. Początkowo, jego intencją, było powierzenie nam jedynie opieki nad istniejącym środowiskiem. Po przeprowadzeniu standardowego przeglądu infrastruktury Klienta, zaproponowaliśmy jednak wprowadzenie szeregu zmian, których celem była optymalizacja szybkości działania, obniżenie kosztów czy wdrożenie podejścia IaC. Biorąc pod uwagę bardzo profesjonalne podejście Klienta do wdrażania i wykorzystania nowych technologii, wspólnie podjęliśmy decyzję o zbudowaniu całej infrastruktury od podstaw, zgodnie z najlepszymi praktykami rekomendowanymi przez AWS.
Spostrzeżenia Hostersów, dotyczące możliwości optymalizacji naszej infrastruktury, okazały się niezwykle trafne, przez co od samego początku zyskaliśmy przekonanie o potrzebie ich wdrożenia. Dzięki tej decyzji, dysponujemy obecnie niezwykle nowoczesnym środowiskiem, opartym o technologię Kubernetes, stworzonym w podejściu IaC.
Decydując się na wdrożenie rozwiązań zaproponowanych przez Hostersów, zyskaliśmy środowisko bezpieczne, bezawaryjne i idealnie dopasowane do naszych potrzeb!
Metodologia
Cała infrastruktura została zaprojektowana i wdrożona w metodologii IAC z wykorzystaniem narzędzi Terraform i Helm. Do zarządzania kodem infrastruktury, przygotowaliśmy osobny kontener.
Terraform służy do zarządzania całą infrastrukturą w ramach AWS. Zawiera opis wszystkich elementów tego środowiska (AWS IAM, AWS VPC, Amazon EKS, Amazon ECR, Amazon RDS, AWS EC2). Kod budujący, jest wspólny dla środowiska produkcyjnego, testowego i developerskiego, natomiast zmienne zdefiniowane dla obu środowisk, zostały zdefiniowane do osobnych plików.
Helm - wykorzystaliśmy do wdrożenia głównych narzędzi w ramach klastra Kubernetes (Traefik, dashboard, Filebeat, Prometheus, RBAC). Do każdego ze środowisk (testowego i produkcyjnego) przygotowaliśmy osobne pliki definiujące dany serwis. Przygotowaliśmy też skrypty, pozwalające na wdrożenie usług w ramach klastra Kubernetes.
Dla całego projektu stworzyliśmy trzy konta (Prod, Dev i Test). Użytkownicy oraz grupy w ramach AWS IAM ustanawiane są ręcznie (z wyłączeniem kodu infrastruktury), natomiast role i polityki tworzone są w kodzie infrastruktury.
Wszystkie mikroseroserwisy zostały uruchomione w ramach odrębnych (dla każdego środowiska) klastrów Kubernetes. Do zarządzania ruchem w ramach klastrów, zastosowaliśmy Traefik. Zgodnie z dobrymi praktykami, dla każdego klastra skonfigurowaliśmy osobne usługi, odpowiedzialne za ruch wewnętrzny i zewnętrzny. W ramach każdego z klastrów wdrożyliśmy również stack Prometheus, za pomocą którego zbierane są metryki ze wszystkich mikroserwisów. Do wyświetlania zebranych danych, wykorzystaliśmy Grafanę. Co ważne, dostęp do powyższych usług, ze względów bezpieczeństwa, nie jest możliwy z Internetu.
Elementy infrastruktury
Punktem wejściowym do infrastruktury Klienta, odpowiedzialnym za zarządzanie strefami DNS w ramach domen jest CloudFlare, który odpowiada nie tylko za ruch zewnętrzny, ale i wewnętrzny. W ramach usługi ElasticCloud uruchomiliśmy ElasticSearch i Kibanę, które wspólnie odpowiadają za zbieranie logów aplikacyjnych
Pozostałe narzędzia
W ramach projektu wykorzystaliśmy również:
- AWS Lambda – do skalowania obrazków oraz generowania raportów
- AWS S3 - na potrzeby przechowywania stanu infrastruktury zarządzanej przez Terraform oraz plików wykorzystywanych przez aplikację
- Amazon API Gateway – jedna z usług, która dzięki komunikacji z funkcją Lambda jest odpowiedzialna za generowanie raportów
- Amazon CloudWatch – narzędzie wykorzystywane na potrzeby monitoringu usług uruchomionych w ramach infrastruktury - między innymi metryk dla usługi RDS
Podsumowanie
Zaprojektowaliśmy i uruchomiliśmy infrastrukturę w środowisku AWS, opartą o klastry Kubernetes, w podejściu zgodnym z IAC. Dzięki zastosowaniu szeregu narzędzi AWS, udało nam się zoptymalizować koszty związane z utrzymaniem infrastruktury, a efektem naszej pracy jest stabilna i bezpieczna infrastruktura, która od momentu powstania nie uległa żadnej awarii.
PYTANIA? SKONTAKTUJ SIĘ Z NAMI
Zobacz również:
Opieka administracyjna nad infrastrukturą BiotCloud
Wdrożenie i opieka nad infrastrukturą chmurową w AWS dla Displate
Projekt, budowa i uruchomienie infrastruktury w AWS dla firmy Roler.
Migracja serwisu edukacyjnego EduNect do chmury AWS