AWS Elastic Container Service
w praktyce
v1.1.0
O mnie
- System Engineer w Xstream Polska od Listopada 2013
- ...not ops anymore, but not dev yet...
- mail: kaszpir @ gmail
- irc: _KaszpiR_
Skróty
- AMI - Amazon Machine Image
- AWS - Amazon Web Services
- AZ - Availability Zone
- ECS - Elastic Container Service
- ELB - Elastic Load Balancer
- SG - Security Group
- VPC - Virtual Private Cloud
- IAM - Identity Access Management
AWS ECS - co to jest?
- usługa do zarządzania kontenerami
- przejście na ECS gdy Elastic Beanstalk to za mało a AWS Lambda jest za słabe
- wspiera wyłącznie konteneryzację typu Docker
- alternatywa dla Kubernetesa czy Docker Swarm
- integruje się ściśle z ekosystemem AWS
- procesy ciągle działające procesy czy też jednokrotnego użycia (batch)
AWS ECS - limity
- nie wspiera uruchamiania poza AWS
- nie posiada Service Discovery
- płacisz tylko za zwykłe używanie instancji EC2 i transfery, sama usługa ECS jest za darmo
- usługa wymaga VPC
- nie we wszystkich regionach usługa jest dostępna
- pamiętaj skąd zasysasz kontenery - internet is slow
- tip: sprawdź limity EC2 na koncie w danym regionie
* Service Discovery trzeba zrobić samemu, np consul
Integracja z AWS
- można podłączyć pod ELB
- IAM per EC2 czy też kontener
- wskazany autoscaling EC2
- scaling na podstawie własnych metryk w CloudWatch
- Elastic Container Registry
Integracja poza AWS
- kompatybilność z Docker'em w wersji 1.12.6 (stan na 2017.01.18)
- komunikacja z DockerHub'em, także prywatne repozytoria
- tip: to Ty masz się integrować z AWS a nie na odwrót :)
Komponenty
- cmdb + api + web
- klaster
- zadanie
- usługa
Usługa ECS i API
- AWS w swojej infrastrukturze daje panel zarządzania zadaniami, klastrami i usługami
- web interface albo AWS API, np boto
- ecs-cli - umie konwertować docker-compose
Klaster ECS
- grupa instancji EC2
- sugerowane uruchamianie na AWS Linux AMI ECS Optimized
- może być inny Linux / Windows
- autoscaling na poziomie AWS EC2
- tip: klaster może mieć 0 instancji
Klaster ECS
- na każdej instancji EC2 uruchamiana jest usługa Docker'a i kontener z ECS Agentem (linux) lub proces (win)
- ECS Agent rejestruje się się do wybranego klastra
- ECS Agent rozmawia z lokalną usługą Dockera - kontroluje cykl życia zadania
Zadanie (task)
- zadanie składa się z co najmniej 1 kontenera
- definicja kontenera odzwierciedla definicję Dockerową
- zadanie posiada status - aktywny/nieaktywny
- ograniczenia co do położenia, limity, czy jest krytyczny
- wersjonowanie - ale uwaga na asynchroniczny web intefrace
- zadanie można uruchomić na klastrze, albo zamienić w usługę
Usługa (service)
- usługa składa się z zadania w danej wersji
- usługa są wersjonowane - więc można zmienić kompletnie definicję między wersjami
- usługa w danej wersji jest uruchamiana na klastrze
- usługa ma informacje o ilości jej wystąpień, np multi-az
- rolling updates z zachowaniem ciągłości pracy
Rozstawienie klastra
Rozstawienie klastra
- instancje - typy instancji, rodzaje dysków
- ASG - rozmieszczenie AZ, placement-groups, subnety, SG, ACL
- wybór systemu operacyjnego
- tuning systemu - ulimit, tcp, kernel...
- automatyzacja w/w
- inne zasoby - EFS
Rozstawianie usługi
- czas między uruchomieniem a rejestracją klastra
- prędkość zasysania kontenerów przez Dockera
- prędkość zależy od instancji, strefy, regionu
- czas od aktywacji usługi do jej realnego działania
Utrzymanie
Utrzymanie...
- uwaga na wersje dockera
- dyski, dyski, dyski - domyślna wielkość dysków w AWS ECS AMI za mała
- sprzątanie po dockerze - disk full, wiszące taski deploymentu
- brak zasobów do rozstawienia usług - np pamięć
Wydajność
- domyślna konfiguracja nadaje się na 'hello world'
- limity na kontener
- docker --network=host (a wtedy consul registrator jest zbędny)
- sr-iov czyli bierz nowszy sprzęt
- nie wsadzaj Javy do kontenera
- ECS reserved memory i dzięki za OOM killera
Koszty
Koszty
- nie używasz, to wyłącz
- specjalizacja - klaster per usługa
- ASG i skalowanie w wybranych porach liczby instancji
- zmiana ilości kontenerów danego typu w zależności od godziny
- instancje reserved i spot
Logowanie i metryki
Logowanie i metryki
- logowanie z dockera do hosta
- CloudWatch Logs i inne
- CloudTrail
- zewnętrzne systemy
Inne
- consul agent + dhcp client
- śmierć instancji EC2 i trzymanie stanu w dockerze
- aplikacje i ELB
- LATEST EVERYTHING!!!!!!!1111oneeleven
Trochę ...dlaczego?
Trochę ...dlaczego?
- vendor lock z premedytacją
- agresywny development
- puppet za wolny i przez to także za drogi
- multi-tenancy i skalowanie
- brak czasu - bierzemy to co jest
- potrzeba lepszej separacji infrastruktury od aplikacji
Największe problemy
Największe problemy
- migracja z EC2 Classic do VPC
- nowe narzędzia (CloudFormation/docker/Java)
- nowe warstwy w stosie aplikacji
- stan wiedzy na temat całości systemu
- odpowiedzialność
- utrzymanie kilku różnych wersji infrastruktury i aplikacji
Największe sukcesy
- lepsza współpraca w zespołach
- AWS może być opłacalny ;)
- wydajność taka jak wcześniej
- szybsza integracja innych technologii i development
Co jeszcze kuleje
Co jeszcze kuleje
- docker sam z siebie
- autoscaling
- stateful containers
- java w kontenerze
- dokładniejsze metryki
- memento mori
Pytania?