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

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ść

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

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?

Dziękuję za uwagę!