25
Konteinerizuojant standartinę WEB aplikaciją Migravimo į konteinerius realaus atvejo analizė AR ŪNAS ŠALTIS

Migravimo į konteinerius realaus atvejo analizė · •Docker –konteinerių vykdymo platforma; ... •Nuolatinė integracija/ nuolatinis diegimas (angl. Continuous Integration,

  • Upload
    others

  • View
    1

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Migravimo į konteinerius realaus atvejo analizė · •Docker –konteinerių vykdymo platforma; ... •Nuolatinė integracija/ nuolatinis diegimas (angl. Continuous Integration,

Konteinerizuojantstandartinę

WEB aplikaciją

Migravimo į konteineriusrealaus atvejo analizė

A R Ū N A S Š A LT I S

Page 2: Migravimo į konteinerius realaus atvejo analizė · •Docker –konteinerių vykdymo platforma; ... •Nuolatinė integracija/ nuolatinis diegimas (angl. Continuous Integration,

2

Terminai

• Konteineris (angl. Container) – aplikacijos virtualizacija (ne OS);

• Konteinerizavimas (angl. Containerisation) – procesas pritaikant aplikaciją dirbti konteineryje;

• Docker – konteinerių vykdymo platforma;

• Dockerfile – failas, kuris aprašo, kaip kuriamas konteineris;

• Konteinerių orkestravimas (angl. Orchestration) – konteinerių valdymo platforma;

• Nuolatinė integracija/ nuolatinis diegimas (angl. Continuous Integration, Continuous Delivery – CI/ CD) – mechanizmas, kai programinė įranga nuolatos papildomai diegiama.

Page 3: Migravimo į konteinerius realaus atvejo analizė · •Docker –konteinerių vykdymo platforma; ... •Nuolatinė integracija/ nuolatinis diegimas (angl. Continuous Integration,

3

Atvejis

• Objektas: Vienos didžiausių pastatų ūkio valdymo bendrovių Lietuvoje „Mano Būstas“ IT sistema.

• Kur: AWS debesyje.

• Problemos: Plečiamumas, patikimumas, korektiško CI/ CD nebuvimas.

• Problemų priežastis: migravimas į AWS debesį neatsižvelgiant į šiandienos galimybes bei paslaugų tiekėjo teikiamas paslaugas.

Page 4: Migravimo į konteinerius realaus atvejo analizė · •Docker –konteinerių vykdymo platforma; ... •Nuolatinė integracija/ nuolatinis diegimas (angl. Continuous Integration,

4

Kliento IT sistemos aprašymas

• Paslaugos pasiekiamos per WEB puslapius:• Per 50 pirmo lygmens domenų;

• Visi domenai turi SSL sertifikatus.

• Skirtingus domenus aptarnauja skirtingos WEB aplikacijos:

• >8 skirtingos aplikacijos;

• Naudojama vhost tipo izoliacija;

• Visos veikia tuose pačiuose virtualiuose serveriuose;

• SSL sesijos terminuojamos serveriuose;

• Dažnas aplikacijų atnaujinimas (kiekvieną dieną);

• Apkrova labai kinta laike.

Page 5: Migravimo į konteinerius realaus atvejo analizė · •Docker –konteinerių vykdymo platforma; ... •Nuolatinė integracija/ nuolatinis diegimas (angl. Continuous Integration,

5

Bu

vu

si arc

hit

ek

tūra

Elastic IP realūs

IP adresai

Network Load

Balancer

DEV aplinkaPROD aplinka

EC2 EC2SSL

SertifikataiSSL

Sertifikatai

Amazon EC2

Elastic IP realūs

IP adresai

Internetas

SSLSertifikatai

Redis RDS

Redis RDS

S3

Page 6: Migravimo į konteinerius realaus atvejo analizė · •Docker –konteinerių vykdymo platforma; ... •Nuolatinė integracija/ nuolatinis diegimas (angl. Continuous Integration,

6

Infrastruktūros problemos

• Patikimumas:• Vienos vhost aplikacijos klaida

trikdo kitų aplikacijų veiklą.

• Serverių plečiamumas:• Atsiradus poreikiui paleisti dar

vieną aplikaciją, paleidžiamos visos aplikacijos, ne tik tos, kurioms reikia papildomų resursų;

• Eikvojami veltui resursai.

...

PHP

Apache httpd

vhost1 - a aplikacija

vhost2 - a aplikacija

vhostn - a aplikacija

...

PHP

Apache httpd

vhost1 - a aplikacija

vhost2 - a aplikacija

vhostn - a aplikacija

1 – as EC2 mazgas 2 – as EC2 mazgas

Page 7: Migravimo į konteinerius realaus atvejo analizė · •Docker –konteinerių vykdymo platforma; ... •Nuolatinė integracija/ nuolatinis diegimas (angl. Continuous Integration,

7

CI/CD problemos

• Nelankstumas:• Patobulinus bet kurią aplikaciją,

kuriama nauja VM versija su visomis aplikacijomis.

• Patikimumas:• Keičiant VM į naujesnę versiją,

nutraukiamos visos prieš tai buvusių klientų versijos.

• Papildomi veiksmai:• SSL sertifikatai papildomai turi

būti patalpinti S3.

...

Code Build

1 – a aplikacija 2 – a aplikacija n – a aplikacija

EC2 VM šablonas

S3

SSLSertifikatai

Senos versijos EC2 VM

Naujos versijos EC2 VM

Pirminio kodo valdymo sistema

Page 8: Migravimo į konteinerius realaus atvejo analizė · •Docker –konteinerių vykdymo platforma; ... •Nuolatinė integracija/ nuolatinis diegimas (angl. Continuous Integration,

8

Naujos architektūros reikalavimai

• Programuotojams nereikia keisti kodo pagal naują architektūrą;

• Minimalus migravimo laikas į naują architektūrą;

• Interneto infrastruktūros elementų – DNS ir SSL – tiekimo kanalai išlieka tokie, kokie buvo anksčiau;

• Kaina yra svarbus faktorius.

Page 9: Migravimo į konteinerius realaus atvejo analizė · •Docker –konteinerių vykdymo platforma; ... •Nuolatinė integracija/ nuolatinis diegimas (angl. Continuous Integration,

9

Nauja architektūra

• Aplikacijos konteinerizuojamos;• Docker.

• Konteinerių valdymui naudojamas orkestratorius;• ECS (angl. Amazon Elastic Container Service).

• Konteinerių saugojimui naudojamas privatus registras;• ECR (angl. Amazon Elastic Container Registry).

• Srauto skirstymą bei SSL terminavimą atlieka srauto skirstytuvai (angl.Load balancer);

• Už plečiamumą, SSL sertifikatų valdymą bei CI/ CD yra atsakingos tam dedikuotos AWS paslaugos:

• SSL valdymas – ACM (angl. AWS Certificate Manager);• Konteinerių kūrimas – Code Build;• Konteinerių diegimas – Code Pipeline.

Page 10: Migravimo į konteinerius realaus atvejo analizė · •Docker –konteinerių vykdymo platforma; ... •Nuolatinė integracija/ nuolatinis diegimas (angl. Continuous Integration,

10

Na

uja

arc

hit

ektū

ra

SSL sertifikatai

AWS Certificate manager

80 prievadas 443 prievadas

Elastic IP realūs IP adresai

ECR Registry

Network Load

Balancer

Application Load

Balancer

Konteineriai

PROD aplinka

ECS Cluster

80 prievadas

RedisRDS

SSL sertifikatai

80 prievadas443 prievadas

Elastic IP realūs IP adresai

Network Load

Balancer

Application Load

Balancer

Konteineriai

DEV aplinka

ECS Cluster

80 prievadas

RedisRDS

S3

Code Build

Code Pipe

Internetas

Page 11: Migravimo į konteinerius realaus atvejo analizė · •Docker –konteinerių vykdymo platforma; ... •Nuolatinė integracija/ nuolatinis diegimas (angl. Continuous Integration,

11

Nau

ja a

rch

itektū

ra.

Ko

nte

ineri

ų o

rke

str

av

imas

SSL sertifikatai

AWS Certificate manager

80 prievadas 443 prievadas

Elastic IP realūs IP adresai

ECR Registry

Network Load

Balancer

Application Load

Balancer

Konteineriai

PROD aplinka

ECS Cluster

80 prievadas

RedisRDS

SSL sertifikatai

80 prievadas443 prievadas

Elastic IP realūs IP adresai

Network Load

Balancer

Application Load

Balancer

Konteineriai

DEV aplinka

ECS Cluster

80 prievadas

RedisRDS

S3

Code Build

Code Pipe

Internetas

Page 12: Migravimo į konteinerius realaus atvejo analizė · •Docker –konteinerių vykdymo platforma; ... •Nuolatinė integracija/ nuolatinis diegimas (angl. Continuous Integration,

12

AWS konteinerių orkestravimosistemos

• AWS siūlomos konteinerių orkestravimo sistemos:• ECS (Amazon Elastic Container Service) – Amazon sukurta, didelio našumo

konteinerių orkestravimo paslauga.

• EKS (Amazon Elastic Kubernetes Service) – Kubernetes tipo konteinerių orkestravimo paslauga.

• Skirtumai:• ECS mokama tik už EC2 resursus, EKS mokama papildomai už Kubernetes

infrastruktūrą.

• ECS yra labiau integruota su AWS teikiamomis paslaugomis, EKS yra labiau pritaikyta aptarnauti konteinerius, orientuotus darbui Kubernetes sistemoje.

Page 13: Migravimo į konteinerius realaus atvejo analizė · •Docker –konteinerių vykdymo platforma; ... •Nuolatinė integracija/ nuolatinis diegimas (angl. Continuous Integration,

13

ECS klasterio realizavimas

• Naudojant EC2 virtualias mašinas:• Maža kaina;

• Reikia numanyti galimą apkrovą, pagal tai parinkti EC2 tipą.

• Fargate:• Kaina žymiai didesnė;

• Nereikia rūpintis EC2 parinkimu ir priežiūra.

Page 14: Migravimo į konteinerius realaus atvejo analizė · •Docker –konteinerių vykdymo platforma; ... •Nuolatinė integracija/ nuolatinis diegimas (angl. Continuous Integration,

14

EC

S k

las

teri

s

ECS Cluster

...

Konteineris

Konteineris

Konteineris

Konteineris

Konteineris

Konteineris

1 - asEC2 mazgas

2 - asEC2 mazgas1

– a

aplik

acija

n - asEC2 mazgas

2 –

a ap

likac

ija

n –

a a

plik

acija

Application Load Balancer

...

...

Page 15: Migravimo į konteinerius realaus atvejo analizė · •Docker –konteinerių vykdymo platforma; ... •Nuolatinė integracija/ nuolatinis diegimas (angl. Continuous Integration,

15

Konteinerizavimo privalumai

• Patikimumas:• Konteineriai izoliuoja skirtingas aplikacijas.

• Aut. plečiamumas:• Kuriami nauji konteineriai;

• Kiekvienam konteineriui yra nurodomos resursų ribos (RAM, CPU), kurias viršijus kuriamas papildomas tos pačios aplikacijos konteineris.

• Pridedami nauji EC2 mazgai;

• Jei EC2 mazguose neužtenka resursų, prie ECS klasterio pridedamas papildomas EC2 mazgas.

• Apkrovai sumažėjus, resursai atlaisvinami.

Page 16: Migravimo į konteinerius realaus atvejo analizė · •Docker –konteinerių vykdymo platforma; ... •Nuolatinė integracija/ nuolatinis diegimas (angl. Continuous Integration,

SSL sertifikatai

AWS Certificate manager

80 prievadas 443 prievadas

Elastic IP realūs IP adresai

ECR Registry

Network Load

Balancer

Application Load

Balancer

Konteineriai

PROD aplinka

ECS Cluster

80 prievadas

RedisRDS

SSL sertifikatai

80 prievadas443 prievadas

Elastic IP realūs IP adresai

Network Load

Balancer

Application Load

Balancer

Konteineriai

DEV aplinka

ECS Cluster

80 prievadas

RedisRDS

S3

Code Build

Code Pipe

InternetasN

au

ja a

rch

itektū

ra.

Ap

kro

vo

sp

askir

sty

mas

Page 17: Migravimo į konteinerius realaus atvejo analizė · •Docker –konteinerių vykdymo platforma; ... •Nuolatinė integracija/ nuolatinis diegimas (angl. Continuous Integration,

17

AWS Tinklo apkrovos skirstytuvas

• Tinklo apkrovos skirstytuvas NLB (angl. Network Load Balancer);

• Skirsto apkrovas pagal IP adresus, TCP prievado numerius.

• Privalumai:• Galima priskirti norimą išorinį IP adresą.

• Trūkumai:• Terminuojamas tik vienas SSL sertifikatas;

• Negalima skirstyti apkrovos pagal URL.

Page 18: Migravimo į konteinerius realaus atvejo analizė · •Docker –konteinerių vykdymo platforma; ... •Nuolatinė integracija/ nuolatinis diegimas (angl. Continuous Integration,

18

AWS Aplikacijų srauto skirstytuvas

• Aplikacijų srauto skirstytuvas ALB (angl. ApplicationLoad Balancer);

• Skirsto apkrovas pagal URL informaciją.

• Privalumai:• Integracija su ECS.

• Trūkumai:• Palaiko tik 25-is SSL sertifikatus;• Negalima valdyti aptarnaujamo išorinio IP adreso, adresas

priskiriamas dinamiškai;• Su aptarnaujamo domeno DNS vardu susiejamas pagal

CNAME įrašą.

Page 19: Migravimo į konteinerius realaus atvejo analizė · •Docker –konteinerių vykdymo platforma; ... •Nuolatinė integracija/ nuolatinis diegimas (angl. Continuous Integration,

Apkrovos paskirstymo sprendimas

• Naudoti NLB + ALB

• NLB priskiriami Elastic IP adresai, kurie naudojami domenų DNS įrašuose

• Visą gaunamą srautą NLB perduoda ALB

• ALB terminuoja SSL srautą ir perduoda į konteinerius

• NLB ir ALB susieja AWS Lambda funkcijos• Jei dėl padidėjusios apkrovos atsiras papildomas

ALB, jis bus automatiškai susiejamas su NLB

• NLB skirsto apkrovą tarp ALB

• ALB skirsto apkrovą tarp konteinerių

SSL sertifikatai

HTTP HTTPS

Elastic IP realūs IP adresai

Network Load

Balancer

Application Load

Balancer

ECS Cluster

Internetas

Page 20: Migravimo į konteinerius realaus atvejo analizė · •Docker –konteinerių vykdymo platforma; ... •Nuolatinė integracija/ nuolatinis diegimas (angl. Continuous Integration,

20

Na

uja

arc

hit

ek

tūra

. S

SL

sert

ifik

atų

vald

ym

as

SSL sertifikatai

AWS Certificate manager

80 prievadas 443 prievadas

Elastic IP realūs IP adresai

ECR Registry

Network Load

Balancer

Application Load

Balancer

Konteineriai

PROD aplinka

ECS Cluster

80 prievadas

RedisRDS

SSL sertifikatai

80 prievadas443 prievadas

Elastic IP realūs IP adresai

Network Load

Balancer

Application Load

Balancer

Konteineriai

DEV aplinka

ECS Cluster

80 prievadas

RedisRDS

S3

Code Build

Code Pipe

Internetas

Page 21: Migravimo į konteinerius realaus atvejo analizė · •Docker –konteinerių vykdymo platforma; ... •Nuolatinė integracija/ nuolatinis diegimas (angl. Continuous Integration,

21

ALB SSL apribojimų sprendimas

• AWS SSL sertifikatai yra saugomi ACM resurse;• Programuotojams nereikia skirti laiko darbui su SSL.

• ALB importuoja SSL sertifikatus iš ACM:• Ne daugiau nei 25 sertifikatus;

• Viename sertifikate gali būti kelių domenų SSL sertifikatai:

• Multidomeniniai SSL sertifikatai SAN (angl. Subject Alternative Name);

• Komerciniai sertifikatų pardavėjai;

• Letsencrypt – nemokami sertifikatai;

• Padaryti automatiniai sertifikatų atnaujinimai.

• Naudojant SAN tipo sertifikatus, pavyksta 50 domenų sutalpinti į kelis sertifikatus.

Page 22: Migravimo į konteinerius realaus atvejo analizė · •Docker –konteinerių vykdymo platforma; ... •Nuolatinė integracija/ nuolatinis diegimas (angl. Continuous Integration,

22

Na

uja

arc

hit

ek

tūra

. C

I/C

D

sp

ren

dim

as SSL

sertifikatai

AWS Certificate manager

80 prievadas 443 prievadas

Elastic IP realūs IP adresai

ECR Registry

Network Load

Balancer

Application Load

Balancer

Konteineriai

PROD aplinka

ECS Cluster

80 prievadas

RedisRDS

SSL sertifikatai

80 prievadas443 prievadas

Elastic IP realūs IP adresai

Network Load

Balancer

Application Load

Balancer

Konteineriai

DEV aplinka

ECS Cluster

80 prievadas

RedisRDS

S3

Code Build

Code Pipe

Internetas

Page 23: Migravimo į konteinerius realaus atvejo analizė · •Docker –konteinerių vykdymo platforma; ... •Nuolatinė integracija/ nuolatinis diegimas (angl. Continuous Integration,

23

Įgyvendintas CI/ CD

sprendimas

...

1 – a aplikacija 2 – a aplikacija n – a aplikacija

Code Build

1 – os aplikacijos Dockerfile

2 – os aplikacijos Dockerfile

n – os aplikacijos Dockerfile

Code PipeECR

n – os aplikacijos naujos versijos konteineriai

Kitų aplikacijų konteineriai

Pirminio kodo valdymo sistema

n – os aplikacijos senos versijos konteineriai

ECS Cluster

Page 24: Migravimo į konteinerius realaus atvejo analizė · •Docker –konteinerių vykdymo platforma; ... •Nuolatinė integracija/ nuolatinis diegimas (angl. Continuous Integration,

24

CI/ CD sprendimas

• Pasiūlytas sprendimas:• Kiekvienai aplikacijai yra sukurtas individualus Docker failas konteineriui kurti;

• Konteinerių saugojimui yra naudojama privatus ECR konteinerių registras;

• AWS Code Build sistema pagal priminio kodo valdymo sistemos komandą kuria naują konteinerio versiją ir ją talpina į ECR registrą;

• AWS Code Pipeline paleidžia konteinerį naudodamas rolling update paradigmą.

• Privalumas:• Versijos keitimo metu nėra nutraukiamas paslaugos diegimas;

• ECR versijuoja konteinerius. Lengva grįžti prie senesnės versijos konteinerio.

Page 25: Migravimo į konteinerius realaus atvejo analizė · •Docker –konteinerių vykdymo platforma; ... •Nuolatinė integracija/ nuolatinis diegimas (angl. Continuous Integration,

25

Rekomendacijos

• Konteinerizavimo iššūkiai:• Dockerfile sukūrimas, kuris yra orientuotas į aplikaciją;

• Migravimo pas kitą paslaugų tiekėją metu Dockerfile failas nekinta;

• Konteinerių orkestravimo sistemos pasirinkimas.

• Kuriant sprendimą, reikia iš karto įvertinti CI/CD poreikį;

• Naudojant papildomas viešojo debesijos teikėjo paslaugas palengvinamas paslaugų diegimas, nereikia specialistams turėti kompetencijų, kurių retai reikia;

• Migravimo pas kitą paslaugų tiekėją metu reiks perkurti dalį infrastruktūros elementų.

• Diegimas susiduria su įvairiais apribojimais, todėl reikia būti pasiruošus ieškoti workaround‘ų.