ఇస్టియో కోసం అప్లికేషన్‌ను సిద్ధం చేస్తోంది

ఇస్టియో కోసం అప్లికేషన్‌ను సిద్ధం చేస్తోంది

Istio — это удобный инструмент для соединения, защиты и мониторинга распределенных приложений. В Istio используются разные технологии для масштабного запуска ПО и управления им, включая контейнеры для упаковки кода приложения и зависимостей для развертывания и Kubernetes — для управления этими контейнерами. Поэтому для работы с Istio вы должны знать, как приложение с несколькими сервисами на основе этих технологий работает లేకుండా ఇస్టియో. ఈ సాధనాలు మరియు భావనలు మీకు ఇప్పటికే తెలిసి ఉంటే, ఈ ట్యుటోరియల్‌ని దాటవేయడానికి సంకోచించకండి మరియు నేరుగా విభాగానికి వెళ్లండి Google Kubernetes ఇంజిన్ (GKE)లో ఇస్టియోను ఇన్‌స్టాల్ చేస్తోంది లేదా పొడిగింపును ఇన్‌స్టాల్ చేయడం Istio on GKE.

ఇది దశల వారీ మార్గదర్శి, ఇక్కడ మేము సోర్స్ కోడ్ నుండి GKE కంటైనర్ వరకు మొత్తం ప్రక్రియ ద్వారా ఈ సాంకేతికతలను ఒక ఉదాహరణ ద్వారా మీకు ప్రాథమికంగా అర్థం చేసుకుంటాము. ఈ సాంకేతికతల శక్తిని ఇస్టియో ఎలా ప్రభావితం చేస్తుందో కూడా మీరు చూస్తారు. కంటైనర్లు, కుబెర్నెట్స్, సర్వీస్ మెష్‌లు లేదా ఇస్టియో గురించి మీకు ఏమీ తెలియదని ఇది ఊహిస్తుంది.

పనులు

ఈ ట్యుటోరియల్‌లో, మీరు ఈ క్రింది పనులను పూర్తి చేస్తారు:

  1. బహుళ సేవలతో సరళమైన హలో వరల్డ్ అప్లికేషన్‌ను నేర్చుకోవడం.
  2. సోర్స్ కోడ్ నుండి అప్లికేషన్‌ను అమలు చేయండి.
  3. Упаковка приложения в контейнеры.
  4. Создание кластера Kubernetes.
  5. కంటైనర్‌లను క్లస్టర్‌లో అమర్చడం.

మీరు ప్రారంభించడానికి ముందు

Следуйте инструкциям, чтобы включить Kubernetes Engine API:

  1. వెళ్ళండి страницу Kubernetes Engine Google క్లౌడ్ ప్లాట్‌ఫారమ్ కన్సోల్‌లో.
  2. ప్రాజెక్ట్‌ను సృష్టించండి లేదా ఎంచుకోండి.
  3. Подождите, пока включится API и связанные службы. Это может занять несколько минут.
  4. మీ Google క్లౌడ్ ప్లాట్‌ఫారమ్ ప్రాజెక్ట్ కోసం బిల్లింగ్ సెటప్ చేయబడిందని నిర్ధారించుకోండి. Узнайте, как включить выставление счетов.

ఈ ట్యుటోరియల్‌లో, మీరు వర్చువల్ మిషన్‌ను సిద్ధం చేసే క్లౌడ్ షెల్‌ను ఉపయోగించవచ్చు Google కంప్యూట్ ఇంజిన్‌లో g1-చిన్నది డెబియన్ ఆధారిత Linux లేదా Linux లేదా macOS కంప్యూటర్‌తో.

Вариант А: использование Cloud Shell

Преимущества использования Cloud Shell:

  • పైథాన్ 2 మరియు పైథాన్ 3 అభివృద్ధి వాతావరణాలు (సహా virtualenv) పూర్తిగా కాన్ఫిగర్ చేయబడ్డాయి.
  • కమాండ్ లైన్ సాధనాలు gCloud, డాకర్, వెళ్ళండి и kubectl, которые мы будем использовать, уже установлены.
  • మీరు ఎంచుకోవడానికి అనేకం ఉన్నాయి టెక్స్ట్ ఎడిటర్లు:
    1. కోడ్ ఎడిటర్, который открывается значком редактирования в верхней части окна Cloud Shell.
    2. Emacs, Vim или Nano, которые открываются из командной строки в Cloud Shell.

ఉపయోగించడానికి క్లౌడ్ షెల్:

  1. GCP కన్సోల్‌కి వెళ్లండి.
  2. బటన్ క్లిక్ చేయండి Activate Cloud Shell GCP కన్సోల్ విండో ఎగువన (క్లౌడ్ షెల్‌ను సక్రియం చేయండి).

ఇస్టియో కోసం అప్లికేషన్‌ను సిద్ధం చేస్తోంది

దిగువ భాగంలో GCP కన్సోల్ కమాండ్ లైన్‌తో క్లౌడ్ షెల్ సెషన్ కొత్త విండోలో తెరవబడుతుంది.

ఇస్టియో కోసం అప్లికేషన్‌ను సిద్ధం చేస్తోంది

Вариант Б: использование инструментов командной строки локально

Если вы будете работать на компьютере с Linux или macOS, нужно настроить и установить следующие компоненты:

  1. అనుకూలీకరించండి среду разработки Python 3 и Python 2.

  2. క్లౌడ్ SDKని ఇన్‌స్టాల్ చేయండి కమాండ్ లైన్ సాధనంతో gCloud.

  3. ఇన్స్టాల్ kubectl — инструмент командной строки для работы с Kubernetes.

    gcloud components install kubectl

  4. ఇన్స్టాల్ Docker Community Edition (CE). మీరు కమాండ్ లైన్ సాధనాన్ని ఉపయోగిస్తారు డాకర్నమూనా అప్లికేషన్ కోసం కంటైనర్ చిత్రాలను రూపొందించడానికి.

  5. Установите инструмент контроля версий GitGitHub నుండి నమూనా అప్లికేషన్‌ను పొందడానికి.

నమూనా కోడ్‌ని డౌన్‌లోడ్ చేయండి

  1. సోర్స్ కోడ్‌ను డౌన్‌లోడ్ చేయండి helloserver:

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

  2. ఉదాహరణ కోడ్ డైరెక్టరీకి వెళ్లండి:

    cd istio-samples/sample-apps/helloserver

బహుళ సేవలతో అప్లికేషన్‌ను అన్వేషించడం

నమూనా అప్లికేషన్ పైథాన్‌లో వ్రాయబడింది మరియు ఉపయోగించి పరస్పర చర్య చేసే రెండు భాగాలను కలిగి ఉంటుంది REST:

  • సర్వర్: ఒక ముగింపు బిందువుతో సాధారణ సర్వర్ పొందండి, /, ఇది కన్సోల్‌కు "హలో వరల్డ్"ని ప్రింట్ చేస్తుంది.
  • లోడ్జెన్: ట్రాఫిక్‌ని పంపే స్క్రిప్ట్ సర్వర్, с настраиваемым числом запросов в секунду.

ఇస్టియో కోసం అప్లికేషన్‌ను సిద్ధం చేస్తోంది

సోర్స్ కోడ్ నుండి అప్లికేషన్‌ను అమలు చేస్తోంది

నమూనా అప్లికేషన్‌ను అన్వేషించడానికి, దాన్ని క్లౌడ్ షెల్‌లో లేదా మీ కంప్యూటర్‌లో అమలు చేయండి.
1) కేటలాగ్‌లో istio-నమూనాలు/నమూనా-యాప్‌లు/helloserver పరుగు సర్వర్:

python3 server/server.py

ప్రారంభంలో సర్వర్ отображается следующее:

INFO:root:Starting server...

2) అభ్యర్థనలను పంపడానికి మరొక టెర్మినల్ విండోను తెరవండి సర్వర్. మీరు క్లౌడ్ షెల్‌ని ఉపయోగిస్తుంటే, మరొక సెషన్‌ను తెరవడానికి యాడ్ ఐకాన్‌ని క్లిక్ చేయండి.
3) ఒక అభ్యర్థనను పంపండి సర్వర్:

curl http://localhost:8080

server отвечает:

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:

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: */*

నెట్‌వర్కింగ్ దృక్కోణం నుండి, మొత్తం అప్లికేషన్ ఒకే హోస్ట్ (స్థానిక కంప్యూటర్ లేదా క్లౌడ్ షెల్ వర్చువల్ మెషీన్)పై నడుస్తుంది. అందువలన మీరు ఉపయోగించవచ్చు localhost, чтобы отправлять запросы к సర్వర్.
10) ఆపడానికి లోడ్జెన్ и సర్వర్, నమోదు చేయండి Ctrl-c ప్రతి టెర్మినల్ విండోలో.
11) టెర్మినల్ విండోలో లోడ్జెన్ వర్చువల్ పర్యావరణాన్ని నిష్క్రియం చేయండి:

deactivate

కంటైనర్‌లలో అప్లికేషన్‌ను ప్యాక్ చేయడం

GKEలో అప్లికేషన్‌ను అమలు చేయడానికి, మీరు నమూనా అప్లికేషన్ - ప్యాకేజీని ప్యాకేజీ చేయాలి సర్వర్ и లోడ్జెన్ - లో కంటైనర్లు. కంటైనర్ అనేది అప్లికేషన్‌ను దాని వాతావరణం నుండి వేరుచేయడానికి ప్యాకేజీ చేయడానికి ఒక మార్గం.

అప్లికేషన్‌ను కంటైనర్‌లో ప్యాక్ చేయడానికి, మీకు ఇది అవసరం Dockerfile. Dockerfile — это текстовый файл, где определяются команды для сборки исходного кода приложения и его зависимостей в డాకర్ చిత్రం. После сборки вы загружаете образ в реестр контейнеров, например Docker Hub или కంటైనర్ రిజిస్ట్రీ.

В примере уже есть Dockerfile కోసం సర్వర్ и లోడ్జెన్ చిత్రాలను సేకరించడానికి అవసరమైన అన్ని ఆదేశాలతో. క్రింద - Dockerfile కోసం సర్వర్:

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-స్లిమ్ బేస్ లేటెస్ట్‌ని ఉపయోగించమని డాకర్‌కి చెబుతుంది образ Python 3 ఒక బేస్ గా.
  • జట్టు కాపీ. . копирует исходные файлы в текущий рабочий каталог (в нашем случае только server.py) కంటైనర్ యొక్క ఫైల్ సిస్టమ్‌కు.
  • ENTRYPOINT కంటైనర్‌ను ప్రారంభించడానికి ఉపయోగించే ఆదేశాన్ని నిర్వచిస్తుంది. మా విషయంలో, ఈ కమాండ్ మీరు అమలు చేయడానికి ఉపయోగించిన దానితో సమానంగా ఉంటుంది server.py из исходного кода.
  • జట్టు బహిర్గతం అని సూచిస్తుంది సర్వర్ పోర్ట్ ద్వారా డేటా కోసం వేచి ఉంది 8080. ఈ బృందం కాదు పోర్టులను అందిస్తుంది. Это что-то вроде документации, которая нужна, чтобы открыть порт 8080 కంటైనర్ను ప్రారంభించినప్పుడు.

మీ అప్లికేషన్‌ను కంటెయినరైజ్ చేయడానికి సిద్ధమవుతోంది

1) కింది ఎన్విరాన్మెంట్ వేరియబుల్స్ సెట్ చేయండి. భర్తీ చేయండి PROJECT_ID на идентификатор своего проекта GCP.

export PROJECT_ID="PROJECT_ID"

export GCR_REPO="preparing-istio"

విలువలను ఉపయోగించడం PROJECT_ID и GCR_REPO вы помечаете образ Docker, когда собираете и отправляете его в частный Container Registry.

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. ఉపయోగించి చిత్రాన్ని సమీకరించండి Dockerfile మరియు మీరు ముందుగా నిర్వచించిన ఎన్విరాన్మెంట్ వేరియబుల్స్:

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

పరామితి -t డాకర్ ట్యాగ్‌ని సూచిస్తుంది. కంటైనర్‌ను అమలు చేస్తున్నప్పుడు మీరు ఉపయోగించే చిత్రం పేరు ఇది.

  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.

ఈ కంటైనర్‌లను క్లౌడ్ షెల్ వర్చువల్ మెషీన్‌లో లేదా కమాండ్‌తో కంప్యూటర్‌లో అమలు చేయవచ్చు డాకర్ రన్. Но в производственной среде нужен способ централизованно оркестрировать контейнеры. Например, нужна система, которая следит, чтобы контейнеры всегда работали, и нужен способ увеличивать масштаб и запускать дополнительные экземпляры контейнеров, если трафик возрастет.

కంటెయినరైజ్డ్ అప్లికేషన్‌లను అమలు చేయడానికి మీరు ఉపయోగించవచ్చు జి.కె.ఇ.. GKE అనేది కంటెయినర్ ఆర్కెస్ట్రేషన్ ప్లాట్‌ఫారమ్, ఇది వర్చువల్ మిషన్‌లను క్లస్టర్‌గా కలుపుతుంది. ప్రతి వర్చువల్ మిషన్‌ను నోడ్ అంటారు. GKE క్లస్టర్‌లు ఓపెన్ సోర్స్ Kubernetes క్లస్టర్ మేనేజ్‌మెంట్ సిస్టమ్‌పై ఆధారపడి ఉంటాయి. కుబెర్నెటెస్ క్లస్టర్‌తో పరస్పర చర్య చేయడానికి మెకానిజమ్‌లను అందిస్తుంది.

GKE క్లస్టర్‌ను సృష్టిస్తోంది:

1) క్లస్టర్‌ను సృష్టించండి:

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

జట్టు gCloud создает кластер istioready в проекте GCP и зоне по умолчанию, которые вы указали. Чтобы запустить Istio, рекомендуем иметь хотя бы 4 узла и виртуальную машину n1-ప్రామాణిక-2.

బృందం కొన్ని నిమిషాల్లో క్లస్టర్‌ను సృష్టిస్తుంది. క్లస్టర్ సిద్ధంగా ఉన్నప్పుడు, కమాండ్ ఇలాగే అవుట్‌పుట్ చేస్తుంది сообщение.

2) కమాండ్ లైన్ సాధనంలో ఆధారాలను అందించండి kubectlక్లస్టర్‌ని నిర్వహించడానికి దీన్ని ఉపయోగించడానికి:

gcloud container clusters get-credentials istioready

3) ఇప్పుడు మీరు Kubernetes ద్వారా కమ్యూనికేట్ చేయవచ్చు kubectl. ఉదాహరణకు, కింది ఆదేశం నోడ్‌ల స్థితిని కనుగొనగలదు:

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

కుబెర్నెట్స్ కీ కాన్సెప్ట్స్

రేఖాచిత్రం GKEలో ఒక అప్లికేషన్‌ను చూపుతుంది:

ఇస్టియో కోసం అప్లికేషన్‌ను సిద్ధం చేస్తోంది

మీరు GKEలో కంటైనర్‌లను అమర్చడానికి ముందు, Kubernetes యొక్క ముఖ్య భావనలను తెలుసుకోండి. మీరు మరింత తెలుసుకోవాలనుకుంటే చివరిలో లింక్‌లు ఉన్నాయి.

  • నోడ్స్ మరియు క్లస్టర్లు. GKEలో, నోడ్ అనేది వర్చువల్ మెషీన్. ఇతర కుబెర్నెట్స్ ప్లాట్‌ఫారమ్‌లలో, నోడ్ కంప్యూటర్ లేదా వర్చువల్ మెషీన్ కావచ్చు. క్లస్టర్ అనేది నోడ్‌ల సమాహారం, ఇది మీరు కంటెయినరైజ్డ్ అప్లికేషన్‌ను అమలు చేసే ఒకే యూనిట్‌గా పరిగణించబడుతుంది.
  • పాడ్స్. В Kubernetes контейнеры запускаются в pod’ах. Pod в Kubernetes — это неделимая единица. Pod вмещает один или несколько контейнеров. Вы разворачиваете контейнеры server и లోడ్జెన్ ప్రత్యేక పాడ్లలో. పాడ్‌లో అనేక కంటైనర్‌లు ఉన్నప్పుడు (ఉదాహరణకు, అప్లికేషన్ సర్వర్ మరియు ప్రాక్సీ సర్వర్), контейнеры управляются как единый объект и совместно используют ресурсы pod’а.
  • విస్తరణలు. కుబెర్నెటెస్‌లో, విస్తరణ అనేది ఒకేలా ఉండే పాడ్‌ల సమాహారం. విస్తరణ క్లస్టర్ నోడ్‌లలో పంపిణీ చేయబడిన పాడ్‌ల బహుళ ప్రతిరూపాలను ప్రారంభించింది. విస్తరణ విఫలమైన లేదా స్పందించని పాడ్‌లను స్వయంచాలకంగా భర్తీ చేస్తుంది.
  • Сервис Kubernetes. GKEలో అప్లికేషన్ కోడ్‌ని అమలు చేస్తున్నప్పుడు, మధ్య కనెక్షన్ లోడ్జెన్ и సర్వర్. Когда вы запустили сервисы на виртуальной машине Cloud Shell или на компьютере, вы отправляли запросы к సర్వర్ వద్ద localhost: 8080. GKEకి విస్తరించిన తర్వాత, అందుబాటులో ఉన్న నోడ్‌లలో పాడ్‌లు అమలు చేయబడతాయి. డిఫాల్ట్‌గా, పాడ్ ఏ నోడ్‌లో నడుస్తుందో దానిపై మీకు నియంత్రణ ఉండదు, కాబట్టి మీరు ప్యాడ్లు శాశ్వత IP చిరునామాలు లేవు.
    కోసం IP చిరునామాను పొందేందుకు సర్వర్, మీరు పాడ్‌ల పైన నెట్‌వర్క్ సంగ్రహణను నిర్వచించాలి. అది ఏమిటి కుబెర్నెట్స్ సేవ. Сервис Kubernetes предоставляет постоянную конечную точку для набора pod’ов. Есть несколько సేవల రకాలు. సర్వర్ ఉపయోగాలు లోడ్ బ్యాలన్సర్, который предоставляет внешний IP-адрес, чтобы связаться с సర్వర్ из-за пределов кластера.
    కుబెర్నెటెస్ DNS పేర్లను కేటాయించే అంతర్నిర్మిత DNS వ్యవస్థను కూడా కలిగి ఉంది (ఉదాహరణకు, helloserver.default.cluster.local) సేవలు. దీనికి ధన్యవాదాలు, క్లస్టర్‌లోని పాడ్‌లు శాశ్వత చిరునామాలో క్లస్టర్‌లోని ఇతర పాడ్‌లతో కమ్యూనికేట్ చేస్తాయి. క్లౌడ్ షెల్‌లో లేదా కంప్యూటర్‌లో వంటి క్లస్టర్ వెలుపల DNS పేరు ఉపయోగించబడదు.

కుబెర్నెటెస్ మానిఫెస్ట్

మీరు సోర్స్ నుండి అప్లికేషన్‌ను అమలు చేసినప్పుడు, మీరు అత్యవసర ఆదేశాన్ని ఉపయోగించారు python3

server.py

Императивность подразумевает глагол: «сделай это».

Kubernetes ఉపయోగిస్తుంది డిక్లరేటివ్ మోడల్. దీని అర్థం మేము కుబెర్నెట్‌లకు ఏమి చేయాలో ఖచ్చితంగా చెప్పడం లేదు, కానీ కావలసిన స్థితిని వివరిస్తాము. ఉదాహరణకు, సిస్టమ్ యొక్క వాస్తవ స్థితి కావలసిన స్థితికి సరిపోలుతుందని నిర్ధారించుకోవడానికి కుబెర్నెటెస్ పాడ్‌లను ప్రారంభించి, ఆపివేస్తుంది.

మీరు మానిఫెస్ట్‌లు లేదా ఫైల్‌లలో కావలసిన స్థితిని సూచిస్తారు యమ్ఎల్. YAML ఫైల్ ఒకటి లేదా అంతకంటే ఎక్కువ కుబెర్నెట్స్ ఆబ్జెక్ట్‌ల కోసం స్పెసిఫికేషన్‌లను కలిగి ఉంటుంది.

В примере содержится файл YAML для సర్వర్ и లోడ్జెన్. Каждый файл YAML указывает желаемое состояние объекта развертывания и сервиса Kubernetes.

సర్వర్.యామల్

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

  • రకం указывает тип объекта.
  • metadata.name విస్తరణ పేరును నిర్దేశిస్తుంది.
  • మొదటి ఫీల్డ్ స్పెక్ కావలసిన స్థితి యొక్క వివరణను కలిగి ఉంటుంది.
  • spec.replicas కావలసిన పాడ్‌ల సంఖ్యను సూచిస్తుంది.
  • విభాగం స్పెక్.టెంప్లేట్ పాడ్ టెంప్లేట్‌ను నిర్వచిస్తుంది. పాడ్ స్పెసిఫికేషన్‌లో ఫీల్డ్ ఉంది చిత్రం, ఇది కంటైనర్ రిజిస్ట్రీ నుండి సంగ్రహించవలసిన చిత్రం పేరును నిర్దేశిస్తుంది.

Сервис определяется следующим образом:

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

  • లోడ్ బ్యాలన్సర్: క్లయింట్లు లోడ్ బ్యాలెన్సర్ యొక్క IP చిరునామాకు అభ్యర్థనలను పంపుతారు, ఇది స్థిరమైన IP చిరునామాను కలిగి ఉంటుంది మరియు క్లస్టర్ వెలుపలి నుండి అందుబాటులో ఉంటుంది.
  • టార్గెట్ పోర్ట్: మీకు గుర్తున్నట్లుగా, జట్టు EXPOSE 8080 в Dockerfile పోర్టులను అందించలేదు. మీరు పోర్ట్ అందించండి 8080, чтобы можно было связаться с контейнером సర్వర్ క్లస్టర్ వెలుపల. మా విషయంలో hellosvc.default.cluster.local:80 (చిన్న పేరు: hellosvc) соответствует порту 8080 పాడ్ IP చిరునామాలు helloserver.
  • పోర్ట్: ఇది క్లస్టర్‌లోని ఇతర సేవలు అభ్యర్థనలను పంపే పోర్ట్ నంబర్.

loadgen.yaml

Объект развертывания в loadgen.yaml లాగా ఉంటుంది సర్వర్.యామల్. వ్యత్యాసం ఏమిటంటే విస్తరణ వస్తువు ఒక విభాగాన్ని కలిగి ఉంటుంది ENV. Он определяет переменные среды, которые нужны లోడ్జెన్ మరియు మీరు సోర్స్ నుండి అప్లికేషన్‌ను రన్ చేస్తున్నప్పుడు ఇన్‌స్టాల్ చేసారు.

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) తెరవండి సర్వర్.యామల్ в текстовом редакторе.
3) Замените имя в поле చిత్రం మీ డాకర్ చిత్రం పేరుకు.

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

భర్తీ చేయండి PROJECT_ID మీ GCP ప్రాజెక్ట్ IDకి.
4) Сохраните и закройте సర్వర్.యామల్.
5) YAML ఫైల్‌ను కుబెర్నెట్స్‌కు అమలు చేయండి:

kubectl apply -f server.yaml

విజయవంతంగా పూర్తయిన తర్వాత, ఆదేశం కింది కోడ్‌ను ఉత్పత్తి చేస్తుంది:

deployment.apps/helloserver created
service/hellosvc created

6) Перейдите в каталог, где находится లోడ్జెన్:

cd ../loadgen

7) తెరవండి loadgen.yaml в текстовом редакторе.
8) Замените имя в поле చిత్రం మీ డాకర్ చిత్రం పేరుకు.

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

భర్తీ చేయండి PROJECT_ID మీ GCP ప్రాజెక్ట్ IDకి.
9) Сохраните и закройте loadgen.yaml, закройте текстовый редактор.
10) YAML ఫైల్‌ను కుబెర్నెట్స్‌కు అమలు చేయండి:

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 చిరునామాలను పొందండి hellosvc:

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) ఒక అభ్యర్థనను పంపండి hellosvc: భర్తీ EXTERNAL_IP на внешний IP-адрес hellosvc.

curl http://EXTERNAL_IP

ఇస్టియోను తీసుకుందాం

У вас уже есть приложение, развернутое в GKE. లోడ్జెన్ может использовать Kubernetes DNS (hellosvc:80) అభ్యర్థనలను పంపడానికి సర్వర్, и вы можете отправлять запросы к సర్వర్ బాహ్య IP చిరునామా ద్వారా. Kubernetes అనేక లక్షణాలను కలిగి ఉన్నప్పటికీ, సేవల గురించి కొంత సమాచారం లేదు:

  • Как взаимодействуют сервисы? సేవల మధ్య సంబంధాలు ఏమిటి? సేవల మధ్య ట్రాఫిక్ ఎలా ప్రవహిస్తుంది? అది మీకు తెలుసా లోడ్జెన్ కు అభ్యర్థనలను పంపుతుంది సర్వర్, కానీ మీకు అప్లికేషన్ గురించి ఏమీ తెలియదని ఊహించుకోండి. ఈ ప్రశ్నలకు సమాధానమివ్వడానికి, GKEలో నడుస్తున్న పాడ్‌ల జాబితాను చూద్దాం.
  • కొలమానాలు. ఎంతసేపు సర్వర్ отвечает на входящий запрос? Сколько запросов в секунду поступает на server? Он выдает сообщения об ошибках?
  • భద్రతా సమాచారం. మధ్య ట్రాఫిక్ లోడ్జెన్ и సర్వర్ కేవలం గుండా వెళుతుంది HTTP లేదా ద్వారా mTLS?

ఈ ప్రశ్నలన్నింటికీ ఇస్టియో సమాధానమిస్తుంది. దీన్ని చేయడానికి, ఇస్టియో సైడ్‌కార్ ప్రాక్సీని ఉంచుతుంది ఎన్వే ప్రతి పాడ్ లో. ఎన్వాయ్ ప్రాక్సీ అప్లికేషన్ కంటైనర్‌లకు ఇన్‌కమింగ్ మరియు అవుట్‌గోయింగ్ ట్రాఫిక్‌ను అడ్డుకుంటుంది. దాని అర్థం ఏమిటంటే సర్వర్ и లోడ్జెన్ получают по sidecar-прокси Envoy, и весь трафик от లోడ్జెన్ к సర్వర్ ఎన్వోయ్ ప్రాక్సీ ద్వారా వెళుతుంది.

ఎన్వోయ్ ప్రాక్సీల మధ్య కనెక్షన్‌లు సర్వీస్ మెష్‌ను ఏర్పరుస్తాయి. సర్వీస్ మెష్ ఆర్కిటెక్చర్ కుబెర్నెటెస్ పైన నియంత్రణ పొరను అందిస్తుంది.

ఇస్టియో కోసం అప్లికేషన్‌ను సిద్ధం చేస్తోంది

ఎన్వోయ్ ప్రాక్సీలు వారి స్వంత కంటైనర్‌లలో రన్ అవుతాయి కాబట్టి, అప్లికేషన్ కోడ్‌లో దాదాపు ఎటువంటి మార్పులు లేకుండానే GKE క్లస్టర్ పైన ఇస్టియోను ఇన్‌స్టాల్ చేయవచ్చు. కానీ మీరు మీ అప్లికేషన్‌ని ఇస్టియో ద్వారా నిర్వహించేలా చేయడానికి కొంత పని చేసారు:

  • అన్ని కంటైనర్లకు సేవలు. విస్తరణలకు సర్వర్ и లోడ్జెన్ కుబెర్నెట్స్ సేవతో ముడిపడి ఉంది. కూడా లోడ్జెన్, ఇది ఇన్‌కమింగ్ అభ్యర్థనలను స్వీకరించదు, ఒక సేవ ఉంది.
  • У портов в сервисах должны быть имена. Хотя в GKE порты сервисов можно оставлять без имени, Istio требует указать имя порта అతని ప్రోటోకాల్ ప్రకారం. YAML ఫైల్‌లో పోర్ట్ కోసం సర్వర్ అని పిలుస్తారు http, потому что server использует протокол HTTP. ఉంటే సేవ ఉపయోగించబడిన GRPC, вы бы назвали порт grpc.
  • Развертывания помечаются. Поэтому вы можете использовать функции управления трафиком Istio, например разделять трафик между версиями одного сервиса.

ఇస్టియోను ఇన్‌స్టాల్ చేస్తోంది

ఇస్టియోను ఇన్‌స్టాల్ చేయడానికి రెండు మార్గాలు ఉన్నాయి. చెయ్యవచ్చు GKE పొడిగింపుపై Istioని ప్రారంభించండి లేదా Istio యొక్క ఓపెన్ సోర్స్ వెర్షన్‌ను ఇన్‌స్టాల్ చేయండి на кластере. С Istio on GKE можно легко управлять установкой и апгрейдом Istio в рамках жизненного цикла кластера GKE. Если вам нужна самая новая версия Istio или больше контроля над конфигурацией панели управления Istio, установите опенсорс-версию вместо расширения Istio on GKE. Чтобы определиться с подходом, читайте статью నాకు GKEలో ఇస్టియో అవసరమా?.

మీ క్లస్టర్‌లో ఇస్టియోను ఇన్‌స్టాల్ చేయడానికి ఒక ఎంపికను ఎంచుకోండి, తగిన మార్గదర్శిని సమీక్షించండి మరియు సూచనలను అనుసరించండి. మీరు కొత్తగా అమలు చేసిన అప్లికేషన్‌తో Istioని ఉపయోగించాలనుకుంటే, включите внедрение sidecar’ов నేమ్‌స్పేస్ కోసం డిఫాల్ట్.

శుభ్రపరచడం

మీరు ఈ ట్యుటోరియల్‌లో ఉపయోగించిన వనరుల కోసం మీ Google క్లౌడ్ ప్లాట్‌ఫారమ్ ఖాతాకు ఛార్జ్ చేయబడకుండా ఉండటానికి, మీరు Istioని ఇన్‌స్టాల్ చేసి, నమూనా అప్లికేషన్‌తో ఆడిన తర్వాత కంటైనర్ క్లస్టర్‌ను తొలగించండి. ఇది కంప్యూట్ ఉదంతాలు, డిస్క్‌లు మరియు నెట్‌వర్క్ వనరులు వంటి అన్ని క్లస్టర్ వనరులను తీసివేస్తుంది.

తరువాత ఏమిటి?

మూలం: www.habr.com

ఒక వ్యాఖ్యను జోడించండి