Истио је згодан алат за повезивање, обезбеђење и надгледање дистрибуираних апликација. Истио користи различите технологије за покретање и управљање софтвером у великом обиму, укључујући контејнере за паковање кода апликације и зависности за примену, и Кубернетес за управљање тим контејнерима. Стога, да бисте радили са Истио-ом, морате знати како функционише апликација са више сервиса заснованих на овим технологијама без Истио. Ако су вам ови алати и концепти већ познати, слободно прескочите овај водич и пређите право на одељак Инсталирање Истио-а на Гоогле Кубернетес Енгине (ГКЕ) или инсталирање екстензије Истио на ГКЕ.
Ово је водич корак по корак у којем ћемо проћи кроз цео процес од изворног кода до ГКЕ контејнера да бисмо вам кроз пример пружили основно разумевање ових технологија. Такође ћете видети како Истио користи моћ ових технологија. Ово претпоставља да не знате ништа о контејнерима, Кубернетес-у, сервисним мрежама или Истио-у.
задаци
У овом водичу ћете завршити следеће задатке:
Учење једноставне апликације хелло ворлд са више услуга.
Покрените апликацију из изворног кода.
Паковање апликације у контејнере.
Креирање Кубернетес кластера.
Постављање контејнера у кластер.
Пре него што почнеш
Пратите упутства да бисте омогућили Кубернетес Енгине АПИ:
У овом водичу можете користити Цлоуд Схелл, који припрема виртуелну машину г1-смалл у Гоогле Цомпуте Енгине-у са Линук-ом заснованим на Дебиан-у, или Линук или мацОС рачунаром.
Опција А: Коришћење Цлоуд Схелл-а
Предности коришћења Цлоуд Схелл-а:
Питхон 2 и Питхон 3 развојна окружења (укључујући виртуаленв) су потпуно конфигурисани.
Алатке командне линије гцлоуд, доцкер, git и кубецтл, које ћемо користити су већ инсталирани.
Пример апликације је написан у Питхон-у и састоји се од две компоненте које су у интеракцији помоћу ОДМОР:
сервер: једноставан сервер са једном крајњом тачком ДОБИТИ, /, који штампа "здраво свет" на конзоли.
лоадген: скрипта која шаље саобраћај ка сервер, са подесивим бројем захтева у секунди.
Покретање апликације из изворног кода
Да бисте истражили пример апликације, покрените је у Цлоуд Схелл-у или на рачунару.
1) У каталогу истио-самплес/сампле-аппс/хеллосервер трцати сервер:
python3 server/server.py
Приликом покретања сервер приказује се следеће:
INFO:root:Starting server...
2) Отворите други прозор терминала за слање захтева сервер. Ако користите Цлоуд Схелл, кликните на икону за додавање да бисте отворили другу сесију.
3) Пошаљите захтев на сервер:
curl http://localhost:8080
сервер одговара:
Hello World!
4) Из директоријума у који сте преузели узорак кода идите на директоријум који садржи лоадген:
cd YOUR_WORKING_DIRECTORY/istio-samples/sample-apps/helloserver/loadgen
Из перспективе умрежавања, цела апликација ради на једном хосту (локални рачунар или Цлоуд Схелл виртуелна машина). Стога можете користити лоцалхостза слање захтева сервер.
10) Престати лоадген и сервер, ентер Цтрл-ц у сваком прозору терминала.
11) У прозору терминала лоадген деактивирајте виртуелно окружење:
deactivate
Паковање апликације у контејнере
Да бисте покренули апликацију на ГКЕ-у, морате да спакујете узорак апликације − сервер и лоадген - у Контејнери. Контејнер је начин паковања апликације да би се изоловала од њеног окружења.
Да бисте упаковали апликацију у контејнер, потребно вам је Доцкерфиле. Доцкерфиле је текстуална датотека која дефинише команде за уградњу изворног кода апликације и њених зависности у Доцкер слика. Када се направи, слику отпремате у регистар контејнера као што је Доцкер Хуб или Registar kontejnera.
Пример већ има Доцкерфиле за сервер и лоадген са свим потребним командама за прикупљање слика. Испод - Доцкерфиле за сервер:
FROM python:3-slim as base
FROM base as builder
RUN apt-get -qq update
&& apt-get install -y --no-install-recommends
g++
&& rm -rf /var/lib/apt/lists/*
# Enable unbuffered logging
FROM base as final
ENV PYTHONUNBUFFERED=1
RUN apt-get -qq update
&& apt-get install -y --no-install-recommends
wget
WORKDIR /helloserver
# Grab packages from builder
COPY --from=builder /usr/local/lib/python3.7/ /usr/local/lib/python3.7/
# Add the application
COPY . .
EXPOSE 8080
ENTRYPOINT [ "python", "server.py" ]
Тим ФРОМ питхон:3-слим као основа каже Доцкер-у да користи најновије Питхон 3 слика као основа.
Тим ЦОПИ. . копира изворне датотеке у тренутни радни директориј (само у нашем случају сервер.пи) у систем датотека контејнера.
УЛАЗНА ТАЧКА дефинише команду која се користи за покретање контејнера. У нашем случају, ова команда је скоро иста као она коју сте користили сервер.пи из изворног кода.
Тим ЕКСПОСЕ указује на то сервер чека податке преко порта 8080. Овај тим није обезбеђује луке. Ово је нека врста документације која је потребна за отварање порта 8080 приликом покретања контејнера.
Припрема за контејнеризацију ваше апликације
1) Подесите следеће променљиве окружења. Заменити ПРОЈЕЦТ_ИД на ИД вашег ГЦП пројекта.
export PROJECT_ID="PROJECT_ID"
export GCR_REPO="preparing-istio"
Коришћење вредности ПРОЈЕЦТ_ИД и ГЦР_РЕПО означите Доцкер слику када је направите и гурнете је у приватни регистар контејнера.
2) Подесите подразумевани ГЦП пројекат за алатку командне линије гцлоуд.
gcloud config set project $PROJECT_ID
3) Подесите подразумевану зону за алатку командне линије гцлоуд.
gcloud config set compute/zone us-central1-b
4) Уверите се да је услуга регистра контејнера омогућена у ГЦП пројекту.
Прегледајте листу слика у спремишту и проверите да ли су слике отпремљене:
gcloud container images list --repository gcr.io/$PROJECT_ID/preparing-istio
Команда приказује називе новоотпремљених слика:
NAME
gcr.io/PROJECT_ID/preparing-istio/helloserver
gcr.io/PROJECT_ID/preparing-istio/loadgen
Креирање ГКЕ кластера.
Ови контејнери се могу покренути на виртуелној машини Цлоуд Схелл или на рачунару са командом доцкер рун. Али у производном окружењу, потребан вам је начин да централно оркестрирате контејнере. На пример, потребан вам је систем који обезбеђује да контејнери увек раде и потребан вам је начин да повећате и покренете додатне инстанце контејнера ако се промет повећа.
За покретање контејнерских апликација које можете користити ГКЕ. ГКЕ је платформа за оркестрацију контејнера која обједињује виртуелне машине у кластер. Свака виртуелна машина се зове чвор. ГКЕ кластери су засновани на систему управљања кластерима отвореног кода Кубернетес. Кубернетес обезбеђује механизме за интеракцију са кластером.
Тим гцлоуд креира истиореади кластер у ГЦП пројекту и подразумевану зону коју сте навели. Да бисте покренули Истио, препоручујемо да имате најмање 4 чвора и виртуелну машину н1-стандард-2.
Тим ствара кластер за неколико минута. Када је кластер спреман, команда даје нешто овако сообщение.
2) Наведите акредитиве у алату командне линије кубецтлда га користите за управљање кластером:
3) Сада можете да комуницирате са Кубернетес-ом преко кубецтл. На пример, следећа команда може да сазна статус чворова:
kubectl get nodes
Команда производи листу чворова:
NAME STATUS ROLES AGE VERSION
gke-istoready-default-pool-dbeb23dc-1vg0 Ready <none> 99s v1.13.6-gke.13
gke-istoready-default-pool-dbeb23dc-36z5 Ready <none> 100s v1.13.6-gke.13
gke-istoready-default-pool-dbeb23dc-fj7s Ready <none> 99s v1.13.6-gke.13
gke-istoready-default-pool-dbeb23dc-wbjw Ready <none> 99s v1.13.6-gke.13
Кључни концепти Кубернетеса
Дијаграм приказује апликацију на ГКЕ:
Пре него што примените контејнере у ГКЕ, научите кључне концепте Кубернетеса. Постоје везе на самом крају ако желите да сазнате више.
Чворови и кластери. У ГКЕ, чвор је виртуелна машина. На другим Кубернетес платформама, чвор може бити рачунар или виртуелна машина. Кластер је колекција чворова који се могу сматрати једном јединицом у којој примењујете контејнеризовану апликацију.
Подс. У Кубернетесу, контејнери раде у подовима. Под у Кубернетесу је недељива јединица. Под садржи један или више контејнера. Ви постављате серверске контејнере и лоадген у одвојеним махунама. Када постоји неколико контејнера у модулу (на пример, сервер апликација и прокси сервер), контејнерима се управља као један ентитет и деле под ресурсе.
Деплоиментс. У Кубернетесу, имплементација је објекат који је колекција идентичних подова. Примена покреће вишеструке реплике модула распоређених по чворовима кластера. Примена аутоматски замењује модуле који нису успели или не реагују.
Кубернетес сервис. Приликом покретања кода апликације у ГКЕ-у, веза између лоадген и сервер. Када сте покренули услуге на Цлоуд Схелл виртуелној машини или десктопу, послали сте захтеве на сервер у лоцалхост: КСНУМКС. Једном распоређени у ГКЕ, подови се извршавају на доступним чворовима. Подразумевано, немате контролу над којим чвором се под покреће, тако да ви подс нема трајних ИП адреса.
Да бисте добили ИП адресу за сервер, потребно је да дефинишете мрежну апстракцију на врху подова. То је оно што је Кубернетес сервис. Услуга Кубернетес обезбеђује трајну крајњу тачку за скуп подова. Има их неколико врсте услуга. сервер користи Распоређивање оптерећења, који обезбеђује спољну ИП адресу за контакт сервер изван кластера.
Кубернетес такође има уграђени ДНС систем који додељује ДНС имена (нпр. хеллосервер.дефаулт.цлустер.лоцал) услуге. Захваљујући томе, махуне унутар кластера комуницирају са другим подовима у кластеру на сталној адреси. ДНС име не може да се користи изван кластера, као што је Цлоуд Схелл или на рачунару.
Кубернетес манифестује
Када сте покренули апликацију из извора, користили сте императивну команду питхон3
сервер.пи
Императив подразумева глагол: „уради ово“.
Кубернетес користи декларативни модел. То значи да Кубернетесу не говоримо тачно шта да ради, већ описујемо жељено стање. На пример, Кубернетес покреће и зауставља подове по потреби да би стварно стање система било у складу са жељеним стањем.
Назначите жељено стање у манифестима или датотекама Иамл. ИАМЛ датотека садржи спецификације за један или више Кубернетес објеката.
Пример садржи ИАМЛ датотеку за сервер и лоадген. Свака ИАМЛ датотека наводи жељено стање објекта имплементације и Кубернетес услуге.
Одељак спец.темплате дефинише шаблон под. Постоји поље у спецификацији под слика, који специфицира име слике коју треба издвојити из регистра контејнера.
Распоређивање оптерећења: Клијенти шаљу захтеве на ИП адресу балансера оптерећења, која има сталну ИП адресу и доступна је изван кластера.
таргетПорт: као што се сећате, тим ЕКСПОСЕ 8080 в Доцкерфиле није обезбедио луке. Ви обезбеђујете луку 8080тако да можете контактирати контејнер сервер ван кластера. У нашем случају хеллосвц.дефаулт.цлустер.лоцал:80 (кратко име: хеллосвц) одговара порту 8080 Под ИП адресе хеллосервер.
лука: Ово је број порта на који ће друге услуге у кластеру слати захтеве.
лоадген.иамл
Деплоимент објецт то лоадген.иамл изгледати сервер.иамл. Разлика је у томе што објекат имплементације садржи одељак енв. Дефинише променљиве окружења које су потребне лоадген и које сте инсталирали када сте покренули апликацију из извора.
Време лоадген не прихвата долазне захтеве, за поље тип назначено ЦлустерИП. Овај тип обезбеђује трајну ИП адресу коју услуге у кластеру могу да користе, али ова ИП адреса није изложена спољним клијентима.
Заменити ПРОЈЕЦТ_ИД на ИД вашег ГЦП пројекта.
9) Сачувајте и затворите лоадген.иамл, затворите уређивач текста.
10) Поставите ИАМЛ датотеку у Кубернетес:
kubectl apply -f loadgen.yaml
По успешном завршетку, команда производи следећи код:
deployment.apps/loadgenerator created
service/loadgensvc created
11) Проверите статус махуна:
kubectl get pods
Команда показује статус:
NAME READY STATUS RESTARTS AGE
helloserver-69b9576d96-mwtcj 1/1 Running 0 58s
loadgenerator-774dbc46fb-gpbrz 1/1 Running 0 57s
12) Извуците евиденције апликација из под лоадген. Заменити ПОД_ИД на идентификатор из претходног одговора.
kubectl logs loadgenerator-POD_ID
13) Добијте спољне ИП адресе хеллосвц:
kubectl get service
Одговор команде изгледа отприлике овако:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
hellosvc LoadBalancer 10.81.15.158 192.0.2.1 80:31127/TCP 33m
kubernetes ClusterIP 10.81.0.1 <none> 443/TCP 93m
loadgensvc ClusterIP 10.81.15.155 <none> 80/TCP 4m52s
14) Пошаљите захтев на хеллосвц: заменити ЕКСТЕРНАЛ_ИП на спољну ИП адресу хеллосвц.
curl http://EXTERNAL_IP
Хајдемо на Истио
Већ имате апликацију распоређену на ГКЕ. лоадген може да користи Кубернетес ДНС (хеллосвц:80) за слање захтева сервери можете слати захтеве на сервер преко спољне ИП адресе. Иако Кубернетес има много функција, недостају неке информације о услугама:
Како услуге међусобно делују? Какви су односи између услуга? Како се саобраћај одвија између услуга? Да ли сте свесни тога лоадген шаље захтеве на сервер, али замислите да не знате ништа о апликацији. Да бисмо одговорили на ова питања, погледајмо листу покренутих подова у ГКЕ-у.
метрике. Колико дуго сервер одговара на долазни захтев? Колико захтева у секунди прими сервер? Да ли даје поруке о грешци?
Безбедносне информације. Саобраћај између лоадген и сервер само пролази ХТТП или од мТЛС?
Истио одговара на сва ова питања. Да би то урадио, Истио поставља помоћни прокси изасланик у свакој махуни. Енвои проки пресреће сав долазни и одлазни саобраћај до контејнера апликација. То значи да сервер и лоадген примати преко проки-ја споредног приколице Енвои-а и сав саобраћај од лоадген к сервер иде преко проксија изасланика.
Везе између Енвои проксија формирају мрежу услуга. Архитектура сервисне мреже пружа ниво контроле на врху Кубернетеса.
Пошто се Енвои проксији покрећу у сопственим контејнерима, Истио се може инсталирати на ГКЕ кластер без скоро никаквих промена у коду апликације. Али урадили сте нешто да бисте своју апликацију припремили за управљање од стране Истио-а:
Услуге за све контејнере. За распоређивање сервер и лоадген везан за Кубернетес сервис. Чак лоадген, који не прима долазне захтеве, постоји услуга.
Портови у услугама морају имати имена. Иако се сервисни портови могу оставити неименовани у ГКЕ-у, Истио захтева да наведете назив порта у складу са својим протоколом. У ИАМЛ датотеци порт за сервер звао хттпјер сервер користи протокол ХТТП... Ако сервис користи гРПЦ, ви бисте назвали луку грпц.
Распоређивања су означена. Због тога можете да користите Истио функције управљања саобраћајем, као што је подела саобраћаја између верзија исте услуге.
Инсталирање Истио-а
Постоје два начина да инсталирате Истио. Моћи омогући Истио на екстензији ГКЕ или инсталирајте верзију Истио-а отвореног кода на кластеру. Са Истио-ом на ГКЕ-у, можете лако управљати Истио инсталацијама и надоградњама током животног циклуса ГКЕ кластера. Ако желите најновију верзију Истио-а или више контроле над конфигурацијом Истио контролне табле, инсталирајте верзију отвореног кода уместо екстензије Истио на ГКЕ. Да бисте одлучили о приступу, прочитајте чланак Да ли ми треба Истио на ГКЕ?.
Изаберите опцију, прочитајте одговарајући водич и пратите упутства да бисте инсталирали Истио на свој кластер. Ако желите да користите Истио са својом новопостављеном апликацијом, омогући имплементацију бочне приколице за именски простор Уобичајено.
Чишћење
Да бисте избегли наплату ресурса које сте користили у овом водичу са налога Гоогле Цлоуд платформе, избришите кластер контејнера када инсталирате Истио и играте са примером апликације. Ово ће уклонити све ресурсе кластера, као што су рачунарске инстанце, дискови и мрежни ресурси.