Омода кардани ариза барои Истио

Омода кардани ариза барои Истио

Istio воситаи қулай барои пайвастшавӣ, ҳифз ва мониторинги барномаҳои тақсимшуда мебошад. Istio технологияҳои гуногунро барои идора ва идоракунии нармафзор дар миқёс истифода мебарад, аз ҷумла контейнерҳо барои бастабандии коди барномаҳо ва вобастагӣ барои ҷойгиркунӣ ва Kubernetes барои идоракунии ин контейнерҳо. Аз ин рӯ, барои кор бо Истио шумо бояд бидонед, ки замима бо хидматҳои сершумор дар асоси ин технологияҳо чӣ гуна кор мекунад бе он Истио. Агар ин асбобҳо ва мафҳумҳо ба шумо аллакай шинос бошанд, озод бошед, ки ин дастурро гузаред ва рост ба бахш гузаред. Насб кардани Istio дар Google Kubernetes Engine (GKE) ё насб кардани васеъкунӣ Истио дар GKE.

Ин як дастури зина ба зина аст, ки дар он мо тамоми равандро аз рамзи сарчашма то контейнери GKE мегузарем, то шумо бо мисол дар бораи ин технологияҳо фаҳмиши асосӣ ба даст оред. Шумо инчунин хоҳед дид, ки чӣ тавр Istio қудрати ин технологияҳоро истифода мебарад. Ин чунин мешуморад, ки шумо дар бораи контейнерҳо, Kubernetes, торҳои хидматрасонӣ ё Istio чизе намедонед.

вазифаҳо

Дар ин дарс шумо вазифаҳои зеринро иҷро хоҳед кард:

  1. Омӯзиши як барномаи оддии ҷаҳонии салом бо хидматҳои гуногун.
  2. Барномаро аз рамзи сарчашма иҷро кунед.
  3. Бастабандии барнома дар контейнерҳо.
  4. Эҷоди кластери Kubernetes.
  5. Ҷойгир кардани контейнерҳо дар кластер.

Пеш аз оғози кор

Барои фаъол кардани API-и Kubernetes Engine дастурҳоро иҷро кунед:

  1. Гузаштан ба Саҳифаи Engine Kubernetes дар консол Google Cloud Platform.
  2. Лоиҳа эҷод кунед ё интихоб кунед.
  3. То фаъол шудани API ва хидматҳои марбута интизор шавед. Ин метавонад чанд дақиқа тӯл кашад.
  4. Боварӣ ҳосил кунед, ки пардохт барои лоиҳаи Google Cloud Platform-и шумо танзим шудааст. Бифаҳмед, ки чӣ тавр фаъол кардани ҳисобкунӣ.

Дар ин дастур, шумо метавонед Cloud Shell-ро истифода баред, ки мошини виртуалиро омода мекунад g1-хурд дар Google Compute Engine бо Linux дар асоси Debian ё компютери Linux ё macOS.

Варианти A: Истифодаи Cloud Shell

Манфиатҳои истифодаи Cloud Shell:

  • Муҳити таҳияи Python 2 ва Python 3 (аз ҷумла вирус) пурра танзим карда шудаанд.
  • Асбобҳои сатри фармон gcloud, лутфан, рафтан и кубектл, ки мо истифода хоҳем кард, аллакай насб карда шудаанд.
  • Шумо якчанд интихоб доред муҳаррирони матн:
    1. Муҳаррири код, ки бо тасвири таҳрир дар болои равзанаи Cloud Shell кушода мешавад.
    2. Emacs, Vim ё Nano, ки аз сатри фармон дар Cloud Shell кушода мешаванд.

Барои истифода Абри Shell:

  1. Ба консоли GCP гузаред.
  2. Кнопкаро клик кунед Cloud Shell -ро фаъол созед (Фаъолсозии Cloud Shell) дар болои равзанаи консоли GCP.

Омода кардани ариза барои Истио

Дар қисми поёнӣ консол GCP Сеанси Cloud Shell бо сатри фармон дар равзанаи нав кушода мешавад.

Омода кардани ариза барои Истио

Варианти B: Истифодаи асбобҳои сатри фармон ба таври маҳаллӣ

Агар шумо дар компютери дорои Linux ё macOS кор кунед, шумо бояд ҷузъҳои зеринро танзим ва насб кунед:

  1. Фармоиш додан Муҳити таҳияи Python 3 ва Python 2.

  2. Cloud SDK -ро насб кунед бо асбоби сатри фармон gcloud.

  3. Set кубектл - асбоби сатри фармон барои кор бо Кубернитель.

    gcloud components install kubectl

  4. Set Нашри ҷамъиятии Docker (CE). Шумо асбоби сатри фармонро истифода хоҳед бурд лутфанбарои сохтани тасвирҳои контейнер барои барномаи намунавӣ.

  5. Воситаро насб кунед Назорати версияи GitБарои гирифтани аризаи намунавӣ аз GitHub.

Рамзи намунаро зеркашӣ кунед

  1. Рамзи сарчашмаро зеркашӣ кунед салом сервер:

    git clone https://github.com/GoogleCloudPlatform/istio-samples

  2. Ба феҳристи рамзи мисол равед:

    cd istio-samples/sample-apps/helloserver

Омӯзиши барнома бо хидматҳои гуногун

Аризаи намунавӣ дар Python навишта шудааст ва аз ду ҷузъе иборат аст, ки бо истифода аз онҳо ҳамкорӣ мекунанд РЕТ:

  • сервер: сервери оддӣ бо як нуқтаи ниҳоӣ Гирифтан, /, ки "салом ҷаҳон" -ро ба консол чоп мекунад.
  • бор кардан: скрипт, ки трафикро ба сервер, бо шумораи танзимшавандаи дархостҳо дар як сония.

Омода кардани ариза барои Истио

Иҷрои барнома аз коди манбаъ

Барои омӯхтани барномаи намунавӣ, онро дар Cloud Shell ё дар компютери худ иҷро кунед.
1) Дар каталог istio-samples/sample-apps/helloserver давидан сервер:

python3 server/server.py

Ҳангоми оғоз сервер зерин нишон дода мешавад:

INFO:root:Starting server...

2) Равзанаи дигари терминалро барои ирсол кардани дархостҳо кушоед сервер. Агар шумо Cloud Shell-ро истифода баред, тасвири иловаро барои кушодани сессияи дигар клик кунед.
3) Ирсоли дархост ба сервер:

curl http://localhost:8080

сервер ҷавоб медиҳад:

Hello World!

4) Аз директорияе, ки шумо рамзи намунаро зеркашӣ кардаед, ба директорияе, ки дорои он аст, равед бор кардан:

cd YOUR_WORKING_DIRECTORY/istio-samples/sample-apps/helloserver/loadgen

5) Тағйирёбандаҳои муҳити зеринро эҷод кунед:

export SERVER_ADDR=http://localhost:8080
export REQUESTS_PER_SECOND=5

6) Оғози вирус:

virtualenv --python python3 env

7) Муҳити виртуалиро фаъол кунед:

source env/bin/activate

8) Талаботро барои бор кардан:

pip3 install -r requirements.txt

9) Оғози бор кардан:

python3 loadgen.py

Ҳангоми оғоз бор кардан чизе монанди паёми зеринро нишон медиҳад:

Starting loadgen: 2019-05-20 10:44:12.448415
5 request(s) complete to http://localhost:8080

Дар равзанаи дигари терминал сервер паёмҳои зеринро ба консол мебарорад:

127.0.0.1 - - [21/Jun/2019 14:22:01] "GET / HTTP/1.1" 200 -
INFO:root:GET request,
Path: /
Headers:
Host: localhost:8080
User-Agent: python-requests/2.22.0
Accept-Encoding: gzip, deflate
Accept: */*

Аз нуқтаи назари шабакавӣ, тамоми барнома дар як ҳост (компютери маҳаллӣ ё мошини виртуалии Cloud Shell) кор мекунад. Аз ин рӯ, шумо метавонед истифода баред localhostба фиристодани дархостҳо сервер.
10) бас кардан бор кардан и сервер, ворид кунед Ctrl-c дар ҳар як равзанаи терминал.
11) Дар равзанаи терминал бор кардан муҳити виртуалиро ғайрифаъол кунед:

deactivate

Бастабандии барнома дар контейнерҳо

Барои иҷро кардани барнома дар GKE, шумо бояд барномаи намунавии − -ро баста кунед сервер и бор кардан - дар контейнерҳо. Контейнер як роҳи бастабандии барнома барои ҷудо кардани он аз муҳити он мебошад.

Барои бастабандии барнома ба контейнер, ба шумо лозим аст файли докер. файли докер файли матние мебошад, ки фармонҳоро барои сохтани коди ибтидоии барнома ва вобастагии он ба он муайян мекунад Тасвири Docker. Пас аз сохтан, шумо тасвирро ба феҳристи контейнерӣ ба монанди Docker Hub ё Феҳристи контейнерҳо.

Мисол аллакай дорад файли докер барои сервер и бор кардан бо тамоми фармонҳои зарурӣ барои ҷамъоварии тасвирҳо. Дар зер - файли докер барои сервер:

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" ]

  • гурӯҳ АЗ python:3-Slim ҳамчун асос ба Docker мегӯяд, ки охиринро истифода барад Python 3 тасвир хамчун асос.
  • гурӯҳ Нусха. . файлҳои сарчашмаро ба директорияи кории ҷорӣ нусхабардорӣ мекунад (танҳо дар ҳолати мо server.py) ба системаи файлии контейнер.
  • Нуктаи даромад фармонеро, ки барои оғоз кардани контейнер истифода мешавад, муайян мекунад. Дар ҳолати мо, ин фармон тақрибан ба ҳамон фармонест, ки шумо пештар иҷро мекардед server.py аз рамзи сарчашма.
  • гурӯҳ ИШК нишон медихад сервер интизори маълумот тавассути порт аст 8080. Ин даста нест портҳоро таъмин мекунад. Ин як навъ ҳуҷҷатест, ки барои кушодани порт лозим аст 8080 ҳангоми оғоз кардани контейнер.

Омодагӣ ба контейнери аризаи шумо

1) Тағйирёбандаҳои муҳити зеринро таъин кунед. Иваз кардан PROJECT_ID ба ID лоиҳаи GCP-и шумо.

export PROJECT_ID="PROJECT_ID"

export GCR_REPO="preparing-istio"

Истифодаи арзишҳо PROJECT_ID и GCR_REPO шумо тасвири Docker-ро ҳангоми сохтани он тег зада, онро ба Реестри хусусии Контейнер тела медиҳед.

2) Лоиҳаи пешфарзи GCP-ро барои абзори сатри фармон таъин кунед gcloud.

gcloud config set project $PROJECT_ID

3) Минтақаи пешфарзро барои абзори сатри фармон таъин кунед gcloud.

gcloud config set compute/zone us-central1-b

4) Боварӣ ҳосил кунед, ки хидмати Реестри контейнерҳо дар лоиҳаи GCP фаъол аст.

gcloud services enable containerregistry.googleapis.com

Сервери контейнерсозӣ

  1. Ба директорияе, ки намуна ҷойгир аст, равед сервер:

    cd YOUR_WORKING_DIRECTORY/istio-samples/sample-apps/helloserver/server/

  2. Бо истифода аз тасвир ҷамъ кунед файли докер ва тағирёбандаҳои муҳити зист, ки шумо қаблан муайян карда будед:

    docker build -t gcr.io/$PROJECT_ID/$GCR_REPO/helloserver:v0.0.1 .

Параметр -t теги Docker-ро ифода мекунад. Ин номи тасвирест, ки шумо ҳангоми ҷойгиркунии контейнер истифода мебаред.

  1. Тасвирро ба Реестри контейнер бор кунед:
    docker push gcr.io/$PROJECT_ID/$GCR_REPO/helloserver:v0.0.1

Контейнеризатсияи боркунанда

1) Ба директорияе, ки намуна ҷойгир аст, равед бор кардан:

cd ../loadgen

2) Тасвирро ҷамъ кунед:

docker build -t gcr.io/$PROJECT_ID/$GCR_REPO/loadgen:v0.0.1 .

3) Тасвирро ба Реестри контейнер бор кунед:

docker push gcr.io/$PROJECT_ID/$GCR_REPO/loadgen:v0.0.1

Рӯйхати тасвирҳоро дидан

Рӯйхати тасвирҳоро дар анбор баррасӣ кунед ва санҷед, ки тасвирҳо бор карда шудаанд:

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

Эҷоди кластери GKE.

Ин контейнерҳоро метавон дар мошини виртуалии Cloud Shell ё дар компютер бо фармон иҷро кард давидан докер. Аммо дар муҳити истеҳсолӣ ба шумо роҳе лозим аст, ки ба таври мутамарказ ташкил кардани контейнерҳоро ташкил кунед. Масалан, ба шумо системае лозим аст, ки боварӣ ҳосил кунад, ки контейнерҳо ҳамеша кор мекунанд ва ба шумо роҳи васеъ кардан ва афзоиш додани мисолҳои контейнерии иловагӣ дар сурати зиёд шудани трафик лозим аст.

Барои иҷро кардани барномаҳои контейнерӣ шумо метавонед истифода баред Г.К.Е.. GKE як платформаи оркестрсозии контейнер мебошад, ки мошинҳои виртуалиро ба кластер муттаҳид мекунад. Ҳар як мошини виртуалӣ гиреҳ номида мешавад. Кластерҳои GKE ба системаи идоракунии кластери кушодаи Kubernetes асос ёфтаанд. Kubernetes механизмҳои ҳамкорӣ бо кластерро таъмин мекунад.

Эҷоди кластери GKE:

1) Кластер эҷод кунед:

gcloud container clusters create istioready 
  --cluster-version latest 
  --machine-type=n1-standard-2 
  --num-nodes 4

гурӯҳ gcloud дар лоиҳаи GCP ва минтақаи пешфарз, ки шумо нишон додаед, кластери истинодиро эҷод мекунад. Барои идора кардани Istio, мо тавсия медиҳем, ки ҳадди аққал 4 гиреҳ ва мошини виртуалӣ дошта бошед n1-стандарт-2.

Даста кластерро дар чанд дақиқа эҷод мекунад. Вақте ки кластер омода аст, фармон чизе монанди ин мебарорад паём.

2) Дар асбоби сатри фармон маълумоти эътимодномаро пешниҳод кунед кубектлбарои истифода бурдани он барои идоракунии кластер:

gcloud container clusters get-credentials istioready

3) Акнун шумо метавонед бо Kubernetes тавассути кубектл. Масалан, фармони зерин метавонад ҳолати гиреҳҳоро пайдо кунад:

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

Консепсияҳои асосии Kubernetes

Диаграмма як барномаро дар GKE нишон медиҳад:

Омода кардани ариза барои Истио

Пеш аз ҷойгир кардани контейнерҳо дар GKE, мафҳумҳои асосии Kubernetes-ро омӯзед. Дар охири он пайвандҳо мавҷуданд, агар шумо хоҳед, ки маълумоти бештар гиред.

  • Гиреҳҳо ва кластерҳо. Дар GKE, гиреҳ як мошини виртуалӣ аст. Дар дигар платформаҳои Kubernetes, гиреҳ метавонад компютер ё мошини виртуалӣ бошад. Кластер маҷмӯаи гиреҳҳо мебошад, ки онҳоро як воҳиди ягона ҳисоб кардан мумкин аст, ки дар он шумо барномаи контейнершударо ҷойгир мекунед.
  • Подҳо. Дар Кубернетес контейнерҳо дар қуттиҳо кор мекунанд. Под дар Кубернетес як воҳиди тақсимнашаванда аст. Под як ё якчанд контейнерро нигоҳ медорад. Шумо контейнерҳои серверро ҷойгир мекунед ва бор кардан дар қуттиҳои алоҳида. Вақте ки дар як паҳлӯ якчанд контейнер мавҷуд аст (масалан, сервери барнома ва сервери прокси), контейнерҳо ҳамчун як воҳиди ягона идора карда мешаванд ва захираҳои podро мубодила мекунанд.
  • Ҷойгиркунӣ. Дар Кубернетес, ҷойгиркунӣ объектест, ки маҷмӯи қуттиҳои якхела мебошад. Ҷойгиркунӣ нусхаҳои сершумори подкҳоро дар саросари гиреҳҳои кластер тақсим мекунад. Ҷойгиркунӣ ба таври худкор подкладҳоеро, ки ноком шудаанд ё ҷавоб намедиҳанд, иваз мекунад.
  • Хадамоти Kubernetes. Ҳангоми иҷро кардани рамзи барнома дар GKE, пайвасти байни бор кардан и сервер. Вақте ки шумо хидматҳоро дар мошини маҷозӣ ё мизи кории Cloud Shell оғоз кардед, шумо ба он дархост фиристодаед сервер дар localhost: 8080. Пас аз ҷойгиркунӣ дар GKE, pods дар гиреҳҳои дастрас иҷро карда мешаванд. Бо нобаёнӣ, шумо назорат надоред, ки дар кадом гиреҳ кор мекунад, аз ин рӯ шумо қуттиҳо суроғаҳои IP доимӣ надоранд.
    Барои гирифтани суроғаи IP барои сервер, шумо бояд абстраксияи шабакаро дар болои pods муайян кунед. Ин ҳамон аст Хадамоти Kubernetes. Хидмати Kubernetes барои маҷмӯи подкҳо нуқтаи ниҳоии доимиро таъмин мекунад. Якчанд ҳастанд намудхои хизматрасонй. сервер истифода мебарад LoadBalancer, ки суроғаи IP-и берунаро барои тамос таъмин мекунад сервер аз берун аз кластер.
    Kubernetes инчунин дорои системаи дохилии DNS мебошад, ки номҳои DNS-ро таъин мекунад (масалан, helloserver.default.cluster.local) хизматрасонӣ. Ба шарофати ин, pods дар дохили кластер бо дигар подкастҳои кластер дар суроғаи доимӣ муошират мекунанд. Номи DNS-ро берун аз кластер истифода бурдан мумкин нест, масалан дар Cloud Shell ё дар компютер.

Кубернетес нишон медиҳад

Вақте ки шумо барномаро аз манбаъ иҷро кардед, шумо фармони императивиро истифода мебаред Python3

server.py

Императив феълро дар назар дорад: "ин корро кунед".

Kubernetes истифода мебарад модели декларативӣ. Ин маънои онро дорад, ки мо ба Кубернетес намегӯем, ки чӣ кор кардан лозим аст, балки ҳолати дилхоҳро тавсиф мекунем. Масалан, Кубернетес ҳангоми зарурат подкҳоро оғоз ва қатъ мекунад, то боварӣ ҳосил кунад, ки ҳолати воқеии система ба ҳолати дилхоҳ мувофиқат кунад.

Шумо ҳолати дилхоҳро дар манифест ё файлҳо нишон медиҳед ЯМЛ. Файли YAML дорои мушаххасоти як ё якчанд объектҳои Kubernetes мебошад.

Мисоли дорои файли YAML барои сервер и бор кардан. Ҳар як файли YAML ҳолати дилхоҳи объекти ҷойгиркунӣ ва хидмати Kubernetes -ро муайян мекунад.

server.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: helloserver
spec:
  selector:
    matchLabels:
      app: helloserver
  replicas: 1
  template:
    metadata:
      labels:
        app: helloserver
    spec:
      terminationGracePeriodSeconds: 5
      restartPolicy: Always
      containers:
      - name: main
        image: gcr.io/google-samples/istio/helloserver:v0.0.1
        imagePullPolicy: Always

  • Kind намуди объектро нишон медиҳад.
  • metadata.name номи паҳнкуниро муайян мекунад.
  • Майдони якум Махсусан тавсифи ҳолати дилхоҳро дар бар мегирад.
  • spec.replicas шумораи матлуби подахоро нишон медихад.
  • Фасли spec.шаблон як қолаби pod муайян мекунад. Дар мушаххасоти pod майдон мавҷуд аст Садо, ки номи тасвиреро, ки аз Феҳристи контейнерҳо гирифта мешавад, муайян мекунад.

Хизмат ба таври зерин муайян карда мешавад:

apiVersion: v1
kind: Service
metadata:
  name: hellosvc
spec:
  type: LoadBalancer
  selector:
    app: helloserver
  ports:
  - name: http
    port: 80
    targetPort: 8080

  • LoadBalancer: Мизоҷон дархостҳоро ба суроғаи IP-и тавозуни сарборӣ мефиристанд, ки суроғаи IP-и доимӣ дорад ва аз берун аз кластер дастрас аст.
  • ҳадафи порт: чи тавре ки шумо дар хотир доред, команда ФОШ 8080 в файли докер портхоро таъмин накарданд. Шумо портро таъмин мекунед 8080то ки шумо метавонед бо контейнер тамос гиред сервер берун аз кластер. Дар мавриди мо hellovc.default.cluster.local:80 (номи кӯтоҳ: hlosvc) ба порт мувофиқат мекунад 8080 Суроғаҳои IP Pod салом сервер.
  • бандаргоҳ: Ин рақами портест, ки дар он хидматҳои дигари кластер дархостҳо мефиристанд.

loadgen.yaml

Объекти ҷойгиркунӣ ба loadgen.yaml монанд server.yaml. Фарқият дар он аст, ки объекти ҷойгиркунӣ қисматро дар бар мегирад ҳас. Он тағирёбандаҳои муҳити заруриро муайян мекунад бор кардан ва шумо ҳангоми кор кардани барнома аз манбаъ насб кардаед.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: loadgenerator
spec:
  selector:
    matchLabels:
      app: loadgenerator
  replicas: 1
  template:
    metadata:
      labels:
        app: loadgenerator
    spec:
      terminationGracePeriodSeconds: 5
      restartPolicy: Always
      containers:
      - name: main
        image: gcr.io/google-samples/istio/loadgen:v0.0.1
        imagePullPolicy: Always
        env:
        - name: SERVER_ADDR
          value: "http://hellosvc:80/"
        - name: REQUESTS_PER_SECOND
          value: "10"
        resources:
          requests:
            cpu: 300m
            memory: 256Mi
          limits:
            cpu: 500m
            memory: 512Mi

Вақт бор кардан дархостхои воридшавандаро кабул намекунад, барои сахро намуди нишон дода шудааст ClusterIP. Ин намуд суроғаи IP-и доимиро таъмин мекунад, ки хидматҳо дар кластер метавонанд истифода баранд, аммо ин суроғаи IP ба мизоҷони беруна дучор намешавад.

apiVersion: v1
kind: Service
metadata:
  name: loadgensvc
spec:
  type: ClusterIP
  selector:
    app: loadgenerator
  ports:
  - name: http
    port: 80
    targetPort: 8080

Ҷойгир кардани контейнерҳо дар GKE

1) Ба директорияе, ки намуна ҷойгир аст, равед сервер:

cd YOUR_WORKING_DIRECTORY/istio-samples/sample-apps/helloserver/server/

2) Кушодан server.yaml дар муҳаррири матн.
3) Номро дар майдон иваз кунед Садо ба номи тасвири Docker-и худ.

image: gcr.io/PROJECT_ID/preparing-istio/helloserver:v0.0.1

Иваз кардан PROJECT_ID ба ID лоиҳаи GCP-и шумо.
4) Захира кунед ва пӯшед server.yaml.
5) Файли YAML -ро ба Kubernetes ҷойгир кунед:

kubectl apply -f server.yaml

Пас аз анҷоми бомуваффақият, фармон рамзи зеринро истеҳсол мекунад:

deployment.apps/helloserver created
service/hellosvc created

6) Ба директория дар куҷо равед бор кардан:

cd ../loadgen

7) Кушодан loadgen.yaml дар муҳаррири матн.
8) Номро дар майдон иваз кунед Садо ба номи тасвири Docker-и худ.

image: gcr.io/PROJECT_ID/preparing-istio/loadgenv0.0.1

Иваз кардан PROJECT_ID ба ID лоиҳаи GCP-и шумо.
9) Захира кунед ва пӯшед loadgen.yaml, муҳаррири матнро пӯшед.
10) Файли YAML -ро ба Kubernetes ҷойгир кунед:

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) Гузоришҳои барномаро аз подкаст хориҷ кунед бор кардан. Иваз кардан POD_ID ба идентификатор аз ҷавоби қаблӣ.

kubectl logs loadgenerator-POD_ID

13) Гирифтани суроғаҳои IP берунӣ hlosvc:

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) Ирсоли дархост ба hlosvc: иваз кунед EXTERNAL_IP ба суроғаи IP берунӣ hlosvc.

curl http://EXTERNAL_IP

Биёед Истио-ро гирем

Шумо аллакай як барномае доред, ки дар GKE ҷойгир карда шудааст. бор кардан метавонад Kubernetes DNS (Салом: 80) фиристодани дархостҳо ба серверва шумо метавонед дархостҳо фиристед сервер бо суроғаи IP берунӣ. Гарчанде ки Kubernetes дорои хусусиятҳои зиёд аст, дар бораи хидматҳо баъзе маълумот мавҷуд нест:

  • Хизматҳо чӣ гуна ҳамкорӣ мекунанд? Муносибатҳои байни хидматҳо чӣ гунаанд? Ҷараёни трафик байни хидматҳо чӣ гуна аст? Оё шумо медонед, ки бор кардан дархостҳо мефиристад сервер, аммо тасаввур кунед, ки шумо дар бораи барнома чизе намедонед. Барои ҷавоб додан ба ин саволҳо, биёед ба рӯйхати подкҳои иҷрошаванда дар GKE назар андозем.
  • Метрикҳо. Чанд муддат сервер ба дархости воридотӣ ҷавоб медиҳад? Сервер дар як сония чанд дархост қабул мекунад? Оё он паёмҳои хато медиҳад?
  • Маълумоти амниятӣ. Ҳаракати нақлиёт байни бор кардан и сервер танҳо мегузарад HTTP ё аз тарафи mTLS?

Истио ба хамаи ин саволхо чавоб медихад. Барои ин, Истио прокси-сервиро ҷойгир мекунад Энди дар ҳар як қуттӣ. Прокси фиристодаи ҳама трафики воридотӣ ва содиротӣ ба контейнерҳои барномаро бозмедорад. Ин чунин маъно дорад сервер и бор кардан тавассути прокси фиристодаи канори мошин ва тамоми трафик аз бор кардан к сервер тавассути прокси Фиристода мегузарад.

Пайвастшавӣ байни проксиҳои фиристодашуда як шабакаи хидматрасониро ташкил медиҳанд. Меъмории шабакаи хидматрасонӣ як қабати назоратро дар болои Kubernetes таъмин мекунад.

Омода кардани ариза барои Истио

Азбаски проксиҳои фиристодашуда дар контейнерҳои худ кор мекунанд, Истиро метавон дар болои кластери GKE бидуни тағирот дар коди барнома насб кард. Аммо шумо баъзе корҳоро анҷом додед, то аризаи худро барои идора кардани Истио омода созед:

  • Хидматҳо барои ҳама контейнерҳо. Ба ҷойгиркунӣ сервер и бор кардан ба хидмати Kubernetes алоқаманд аст. Ҳатто бор кардан, ки дархости воридотро қабул намекунад, хидмат вуҷуд дорад.
  • Портҳо дар хидматҳо бояд ном дошта бошанд. Гарчанде ки портҳои хидматрасонӣ метавонанд дар GKE бе ном гузошта шаванд, Istio аз шумо талаб мекунад, ки муайян кунед номи порт мувофики протоколи худ. Дар файли YAML порт барои сервер даъват карда мешавад httpзеро сервер протоколро истифода мебарад HTTP. Агар хизматрасонӣ истифода мешавад gRPC, шумо портро номбар мекунед grpc.
  • Ҷойгиркунӣ аломатгузорӣ карда мешавад. Аз ин рӯ, шумо метавонед аз хусусиятҳои идоракунии трафики Istio истифода баред, ба монанди тақсим кардани трафик байни версияҳои як хидмат.

Насб кардани Istio

Ду роҳи насб кардани Istio вуҷуд дорад. Метавонед Истио дар васеъшавии GKE -ро фаъол созед ё версияи кушодаи Istio -ро насб кунед дар кластер. Бо Istio дар GKE, шумо метавонед насбҳо ва такмилдиҳии Istio-ро дар тӯли давраи ҳаёти кластери GKE ба осонӣ идора кунед. Агар шумо хоҳед, ки версияи охирини Istio ё назорати бештари конфигуратсияи панели идоракунии Istio-и худро дошта бошед, ба ҷои васеъшавии Istio on GKE версияи кушодаасосро насб кунед. Барои муайян кардани равиш, мақоларо хонед Оё ба ман Истио дар GKE лозим аст?.

Интихобро интихоб кунед, дастури мувофиқро аз назар гузаронед ва дастурҳоро барои насб кардани Istio дар кластери худ иҷро кунед. Агар шумо хоҳед, ки Istio-ро бо замимаи нав ҷойгиршудаи худ истифода баред, ба амал баровардани ёрирасон имкон медихад барои фазои ном Пешфарз.

Тоза кардан

Барои он ки аз ҳисоби Google Cloud Platform барои захираҳое, ки дар ин дарс истифода кардаед, ситонида нашавад, пас аз насб кардани Istio ва бо барномаи намунавӣ бозӣ кардан кластери контейнерро нест кунед. Ин ҳама захираҳои кластер, аз қабили мисолҳои ҳисоббарор, дискҳо ва захираҳои шабакаро нест мекунад.

Чӣ оянда аст?

Манбаъ: will.com

Илова Эзоҳ