Përgatitja e aplikacionit për Istio

Përgatitja e aplikacionit për Istio

Istio — Ă«shtĂ« njĂ« mjet i pĂ«rshtatshĂ«m pĂ«r lidhjen, mbrojtjen dhe monitorimin e aplikacioneve tĂ« shpĂ«rndara. NĂ« Istio pĂ«rdoren teknologji tĂ« ndryshme pĂ«r lançimin dhe menaxhimin masiv tĂ« software-it, duke pĂ«rfshirĂ« kontejnerĂ«t pĂ«r paketimin e kodit tĂ« aplikacionit dhe varĂ«sive pĂ«r shpĂ«rndarje dhe Kubernetes — pĂ«r menaxhimin e kĂ«tyre kontejnerĂ«ve. Prandaj, pĂ«r tĂ« punuar me Istio duhet tĂ« dini se si funksionon njĂ« aplikacion me disa shĂ«rbime duke u bazuar nĂ« kĂ«to teknologji. pa Istio. NĂ«se kĂ«to mjete dhe koncepte ju janĂ« tashmĂ« tĂ« njohura, ndihuni tĂ« lirĂ« tĂ« kaloni kĂ«tĂ« udhĂ«zues dhe tĂ« kaloni drejtpĂ«rdrejt nĂ« seksionin Instalimi i Istio nĂ« Google Kubernetes Engine (GKE) ose instalimi i shtesĂ«s Istio nĂ« GKE.

Ky udhëzues hap pas hapi do të shqyrtojë të gjithë procesin nga kodi burimor deri në kontejnerin në GKE, që të merrni një përmbledhje të bazës mbi këto teknologji përmes një shembulli. Gjithashtu do të shihni se si Istio shfrytëzon kapacitetet e këtyre teknologjive. Bëhet fjalë se nuk dini asgjë për kontejnerët, Kubernetes, service mesh ose Istio.

Detyrat

Në këtë udhëzues do të kryeni detyrat e mëposhtme:

  1. Studimi i një aplikacioni të thjeshtë hello world me disa shërbime.
  2. Ekzekutimi i aplikacionit nga kodi burimor.
  3. Paketa e aplikacionit në kontejnerë.
  4. Krijimi i një klasteri Kubernetes.
  5. Zhvillimi i kontejnerëve në klaster.

Para se të filloni

Ndiqni udhëzimet për të aktivizuar API-në e Kubernetes Engine:

  1. Shkoni në faqen e Kubernetes Engine në konsolën Google Cloud Platform.
  2. Krijoni ose zgjidhni një projekt.
  3. Prisni derisa API-ja dhe shërbimet e lidhura të aktivizohen. Kjo mund të zgjasë disa minuta.
  4. Sigurohuni që faturimi për projektin Google Cloud Platform është i aktivizuar. Mësoni si të aktivizoni faturimin.

Në këtë udhëzues, mund të përdorni Cloud Shell, i cili përgatit një makinë virtuale g1-small në Google Compute Engine me Linux të bazuar në Debian, ose një kompjuter me Linux ose macOS.

Opsioni A: përdorimi i Cloud Shell

Përfitimet e përdorimit të Cloud Shell:

  • Mjediset e zhvillimit pĂ«r Python 2 dhe Python 3 (pĂ«rfshirĂ« virtualenv) janĂ« plotĂ«sisht tĂ« konfigurueshme.
  • Veglat e komandĂ«s gcloud, docker, git dhe kubectl, tĂ« cilat do tĂ« pĂ«rdorim, janĂ« tashmĂ« tĂ« instaluara.
  • Keni disa editorĂ« teksti:
    1. Editori i kodit, i cili hapet me ikonën e redaktimit në majën e dritares Cloud Shell.
    2. Emacs, Vim ose Nano, që hapen nga linja e komandës në Cloud Shell.

Për të përdorur Cloud Shell:

  1. Shkoni në konsolën GCP.
  2. Klikoni butonin Aktivizo Cloud Shell (Aktivizoni Cloud Shell) në pjesën e sipërme të dritares së konsolës GCP.

Përgatitja e aplikacionit për Istio

Në fund të konsolës GCP në një dritare të re do të hapet një seancë Cloud Shell me komandën.

Përgatitja e aplikacionit për Istio

Mënyra B: përdorimi i mjeteve të komandave lokal

Nëse do të punoni në një kompjuter me Linux ose macOS, duhet të konfiguroni dhe instaloni komponentët e mëposhtëm:

  1. Konfiguroni mjedisin e zhvillimit Python 3 dhe Python 2.

  2. Instaloni Cloud SDK me mjetin e komandës gcloud.

  3. Instaloni kubectl — mjeti i komandĂ«s pĂ«r tĂ« punuar me Kubernetes.

    gcloud components install kubectl

  4. Instaloni Docker Community Edition (CE). Do të përdorni mjetin e komandës docker, për të krijuar imazhe kontejnerësh për shembull aplikacioni.

  5. Instaloni mjetin e kontrollit të verzionit Git, për të marrë shembullin e aplikacionit nga GitHub.

Shkarkimi i shembullit të kodit

  1. Shkarkoni kodin burimor helloserver:

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

  2. Shkoni në katalogun e shembullit të kodit:

    cd istio-samples/sample-apps/helloserver

Studimi i aplikacionit me disa shërbime

Shembulli i aplikacionit është shkruar në Python dhe përbëhet nga dy komponentë, të cilët ndyhmojnë përmes REST:

  • server: njĂ« server i thjeshtĂ« me njĂ« pikĂ«fund GET, /, i cili nxjerr "hello world" nĂ« konsolĂ«.
  • loadgen: skripti qĂ« dĂ«rgon trafikun nĂ« server, me numrin e personalizuar tĂ« kĂ«rkesave nĂ« sekondĂ«.

Përgatitja e aplikacionit për Istio

Fillimi i aplikacionit nga kodi burimor

Për të studiuar shembujt e aplikacionit, filloni atë në Cloud Shell ose në kompjuterin tuaj.
1) NĂ« katalg istio-samples/sample-apps/helloserver ekzekutoni server:

python3 server/server.py

Kur të filloni, server shfaqet si më poshtë:

INFO:root:Po fillon serverin...

2) Hapni një dritare tjetër terminali për të dërguar kërkesa tek server. Nëse po përdorni Cloud Shell, klikoni në ikonën e shtimit për të hapur një seancë tjetër.
3) Dërgoni kërkesë te server:

curl http://localhost:8080

serveri përgjigjet:

Përshëndetje Botë!

4) Nga katalgu ku ngarkuat shembujt e kodit, shkoni në katalgun që përmban loadgen:

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

5) Krijoni këto variabla mjedisi:

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

6) Filloni virtualenv:

virtualenv --python python3 env

7) Aktivizoni mjedisin virtual:

source env/bin/activate

8) Installoni kërkesat për loadgen:

pip3 install -r requirements.txt

9) Filloni loadgen:

python3 loadgen.py

Kur të filloni, loadgen shfaq mesazhin afërsisht si më poshtë:

Duke nisur loadgen: 2019-05-20 10:44:12.448415
5 kërkes(a) e përfunduara tek http://localhost:8080

Në një dritare tjetër terminali server shfaq mesazhe afërsisht si më poshtë në konsolë:

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

Nga pikëpamja e rrjetit, të gjithë aplikacioni funksionon në një host të vetëm (kompjuteri lokal ose makinë virtuale Cloud Shell). Prandaj, mund të përdorni localhost, për të dërguar kërkesa në server.
10) Për të ndaluar loadgen dhe server, shkruani Ctrl-c në çdo dritare terminali.
11) Në dritaren e terminalit loadgen çaktivizoni mjedisin virtual:

deactivate

Paketa e aplikacionit në kontejnerë

PĂ«r tĂ« nisur aplikacionin nĂ« GKE, duhet tĂ« paketoni shembullin e aplikacionit — server dhe loadgen — nĂ« kontejnerĂ«. Konteineri Ă«shtĂ« njĂ« mĂ«nyrĂ« pĂ«r tĂ« paketuar aplikacionin, pĂ«r ta izoluar atĂ« nga mjedisi.

PĂ«r tĂ« paketuar aplikacionin nĂ« konteiner, nevojitet Dockerfile. Dockerfile — ky Ă«shtĂ« njĂ« skedar tekstual, ku pĂ«rcaktohen komandat pĂ«r ndĂ«rtimin e kodit burimor tĂ« aplikacionit dhe varĂ«sive tĂ« tij nĂ« imazhin Docker. Pas ndĂ«rtimit, e ngarkoni imazhin nĂ« regjistrin e kontejnerĂ«ve, siç Ă«shtĂ« Docker Hub ose Container Registry.

Shembulli tashmĂ« ka Dockerfile pĂ«r server dhe loadgen me tĂ« gjitha komandat e nevojshme pĂ«r tĂ« ndĂ«rtuar imazhet. MĂ« poshtĂ« — Dockerfile pĂ«r server:

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

# Aktivizoni regjistrimin pa tampon
FROM base as final
ENV PYTHONUNBUFFERED=1

RUN apt-get -qq update 
    && apt-get install -y --no-install-recommends 
        wget

WORKDIR /helloserver

# Merrni paketat nga ndërtuesi
COPY --from=builder /usr/local/lib/python3.7/ /usr/local/lib/python3.7/

# Shtoni aplikacionin
COPY . .

EXPOSE 8080
ENTRYPOINT [ "python", "server.py" ]

  • Ekipa FROM python:3-slim as base kĂ«rkon qĂ« Docker tĂ« pĂ«rdorĂ« tĂ« fundit imazhi Python 3 si bazĂ«.
  • Ekipa COPY . . kopjon skedaret burimore nĂ« katalogun aktual tĂ« punĂ«s (nĂ« rastin tonĂ« vetĂ«m server.py) nĂ« sistemin e skedarĂ«ve tĂ« kontejnerit.
  • ENTRYPOINT pĂ«rcakton komandĂ«n qĂ« pĂ«rdoret pĂ«r tĂ« nisur kontejnerin. NĂ« rastin tonĂ« kjo komandĂ« thuajse pĂ«rputhet me atĂ« qĂ« keni pĂ«rdorur pĂ«r tĂ« nisur server.py nga kodi burimor.
  • Ekipa EXPOSE tregon se server pritet tĂ« marrin tĂ« dhĂ«na pĂ«rmes portit 8080. Kjo komandĂ« nuk ofron porte. ËshtĂ« diçka si dokumentimi qĂ« nevojitet pĂ«r tĂ« hapur portin 8080 kur filloni kontejnerin.

Përgatitja për konteinerizimin e aplikacionit

1) Vendosni variablat e mëposhtëm të mjedisit. Zëvendësoni PROJECT_ID me identifikuesin e projektit tuaj GCP.

export PROJECT_ID="PROJECT_ID"

export GCR_REPO="preparing-istio"

Me vlerat PROJECT_ID dhe GCR_REPO Ju shënoni imazhin Docker kur e ndërroni dhe e dërgoni atë në Container Registry privat.

2) Caktoni projektin GCP si parazgjedhje për mjetin e komandave gcloud.

gcloud config set project $PROJECT_ID

3) Caktoni zonën si parazgjedhje për mjetin e komandave gcloud.

gcloud config set compute/zone us-central1-b

4) Sigurohuni që shërbimi Container Registry të jetë aktiv në projektin GCP.

gcloud services enable containerregistry.googleapis.com

Kontrakta server

  1. Shkoni në katalogun ku ndodhet shembulli server:

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

  2. Ndërtoni imazhin duke përdorur Dockerfile dhe variablat e mjedisit që keni përcaktuar më parë:

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

Parametri -t përfaqëson etiketën Docker. Kjo është emri i imazhit që përdorni kur zhvilloni kontejnerin.

  1. Dërgoni imazhin në Container Registry:
    docker push gcr.io/$PROJECT_ID/$GCR_REPO/helloserver:v0.0.1

Kontrakta loadgen

1) Shkoni në katalogun ku ndodhet shembulli loadgen:

cd ../loadgen

2) Ndërtoni imazhin:

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

3) Dërgoni imazhin në Container Registry:

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

Shikoni listën e imagjëve

Shikoni listën e imagjëve në depotheke dhe sigurohuni që imazhet janë dërguar:

gcloud container images list --repository gcr.io/$PROJECT_ID/preparing-istio

Ekipa jep emrat e imazheve që sapo janë dërguar:

EMRI
gcr.io/PROJECT_ID/preparing-istio/helloserver
gcr.io/PROJECT_ID/preparing-istio/loadgen

Krijimi i një klasteri GKE.

Këto kontejnerë mund të nisin në një makinë virtuale Cloud Shell ose në një kompjuter me komandën docker run. Por në mjedisin e prodhimit, nevojitet një mënyrë për të orkestruar kontejnerët në mënyrë qendrore. Për shembull, nevojitet një sistem që siguron se kontejnerët punojnë gjithmonë, dhe nevojitet një mënyrë për të rritur shkallën dhe për të nisur ekzemplarë shtesë kontejnerësh nëse ngarkesa rritet.

PĂ«r tĂ« nisur aplikacionet kontejner, mund tĂ« pĂ«rdoret GKE. GKE Ă«shtĂ« njĂ« platformĂ« pĂ«r orkestrimin e kontejnerĂ«ve qĂ« bashkon makinat virtuale nĂ« njĂ« klaster. Çdo makinĂ« virtuale quhet nyje. Klasteret GKE bazohen nĂ« sistemin e menaxhimit tĂ« klasterĂ«ve me kod tĂ« hapur Kubernetes. Kubernetes ofron mekanizma pĂ«r ndĂ«rveprimin me klasterin.

Krijimi i një klasteri GKE:

1) Krijoni klasterin:

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

Ekipa gcloud krijon klasterin istioready në projektin GCP dhe zonën e parazgjedhur që keni specifikuar. Për të nisur Istio, rekomandohet të keni të paktën 4 nyje dhe një makinë virtuale. n1-standard-2.

Ekipi krijon një klaster për disa minuta. Kur klasteri të jetë gati, ekipi jep diçka si mesazhi.

2) Specifikoni informacionin e qasjes në mjetin e komandës kubectl, për ta përdorur atë për të menaxhuar klasterin:

gcloud container clusters get-credentials istioready

3) Tani mund të komunikoni me Kubernetes përmes kubectl. Për shembull, me komandën e mëposhtme mund të mësoni statusin e nyjeve:

kubectl get nodes

Komanda jep një listë nyjesh:

EMRI                                       STATUS   ROLET    MOSHA    VERSION
 gke-istoready-default-pool-dbeb23dc-1vg0   Gati    <asgjë>   99s    v1.13.6-gke.13
gke-istoready-default-pool-dbeb23dc-36z5   Gati    <asgjë>   100s   v1.13.6-gke.13
gke-istoready-default-pool-dbeb23dc-fj7s   Gati    <asgjë>   99s    v1.13.6-gke.13
gke-istoready-default-pool-dbeb23dc-wbjw   Gati    <asgjë>   99s    v1.13.6-gke.13

Koncepte kyçe të Kubernetes

Në diagram tregohet aplikacioni në GKE:

Përgatitja e aplikacionit për Istio

Para se të vendosni kontejnerët në GKE, studioni konceptet kyçe të Kubernetes. Në fund ka lidhje, nëse dëshironi të mësoni më shumë.

  • Nyjet dhe klasterĂ«t. NĂ« GKE, njĂ« nyje Ă«shtĂ« njĂ« makinĂ« virtuale. NĂ« platforma tĂ« tjera, njĂ« nyje Kubernetes mund tĂ« jetĂ« njĂ« kompjuter ose njĂ« makinĂ« virtuale. NjĂ« klaster Ă«shtĂ« njĂ« grup nyjesh qĂ« mund tĂ« konsiderohen si njĂ« tĂ«rĂ«si dhe ku vendosni aplikacionin e kontejnerizuar.
  • Pod’ët. NĂ« Kubernetes, kontejnerĂ«t ekzekutohen nĂ« pod'Ă«. Pod nĂ« Kubernetes Ă«shtĂ« njĂ« njĂ«si e pandashme. Pod'i pĂ«rmban njĂ« ose mĂ« shumĂ« kontejnerĂ«. Ju zhvilloni kontejnerĂ«t server dhe loadgen nĂ« pod'e tĂ« veçantĂ«. Kur nĂ« njĂ« pod ka disa kontejnerĂ« (pĂ«r shembull, serveri i aplikacionit dhe proxy), kontejnerĂ«t menaxhohen si njĂ« objekt i vetĂ«m dhe ndajnĂ« burimet e pod'it.
  • Zhvillime. NĂ« Kubernetes, zhvillimi Ă«shtĂ« njĂ« objekt qĂ« pĂ«rfaqĂ«son njĂ« grup pod'esh identik. Zhvillimi nis disa replika pod'esh, tĂ« shpĂ«rndara nĂ« nyje tĂ« klasterit. Zhvillimi automatikisht zĂ«vendĂ«son pod'Ă«t qĂ« kanĂ« dĂ«shtuar ose qĂ« nuk pĂ«rgjigjen.
  • ShĂ«rbimi Kubernetes. Kur ekzekutoni kodin e aplikacionit nĂ« GKE, lidhja midis loadgen dhe server. Kur keni nisur shĂ«rbimet nĂ« makinat virtuale Cloud Shell ose nĂ« kompjuter, keni dĂ«rguar kĂ«rkesa nĂ« server nĂ« adresĂ«n localhost:8080. Pas zhvillimit nĂ« GKE, pod'Ă«t ekzekutohen nĂ« nyjet e disponueshme. NĂ« mĂ«nyrĂ« standarde, nuk mund tĂ« menaxhoni se nĂ« cilĂ«n nyje Ă«shtĂ« nisur pod'i, kĂ«shtu qĂ« pod'Ă«t nuk kanĂ« adresa IP tĂ« pĂ«rhershme.
    PĂ«r tĂ« marrĂ« njĂ« adresĂ« IP pĂ«r server, duhet tĂ« pĂ«rcaktoni njĂ« abstraksion rrjeti mbi pod'Ă«t. Kjo Ă«shtĂ« shĂ«rbimi Kubernetes. ShĂ«rbimi Kubernetes ofron njĂ« pikĂ« tĂ« vazhdueshme lidhĂ«se pĂ«r njĂ« grup pod’esh. Ka disa lloj shĂ«rbimesh. server pĂ«rdor LoadBalancer, i cili ofron njĂ« adresĂ« IP publike pĂ«r t'u lidhur me server jashtĂ« grupit.
    Po ashtu, Kubernetes ka njĂ« sistem tĂ« integruar DNS, qĂ« i jep emra DNS (p.sh., helloserver.default.cluster.local) shĂ«rbimeve. KĂ«shtu, pod’ët brenda grupit lidhen me pod’ë tĂ« tjerĂ« brenda grupit me njĂ« adresĂ« tĂ« vazhdueshme. Emri DNS nuk mund tĂ« pĂ«rdoret jashtĂ« grupit, p.sh. nĂ« Cloud Shell ose nĂ« kompjuter.

Manifestet e Kubernetes

Kur keni regjistruar aplikacionin nga kodi burimor, keni përdorur komandën imperative python3

server.py

Imperativiteti nënkupton një folje: «bëj këtë».

Kubernetes pĂ«rdor modelin deklarativ. Kjo do tĂ« thotĂ« se ne nuk i themi Kubernetesit se çfarĂ« tĂ« bĂ«jĂ«, por pĂ«rshkruajmĂ« gjendjen e dĂ«shiruar. PĂ«r shembull, Kubernetes aktivizon dhe ndalon pod’ët sipas nevojĂ«s, nĂ« mĂ«nyrĂ« qĂ« gjendja aktuale e sistemit tĂ« korrespondonte me atĂ« tĂ« dĂ«shiruar.

Gjendja e dëshiruar e përcaktoni në manifestet, ose skedarët YAML. Skedari YAML përmban specifikimet për një ose disa objekte Kubernetes.

NĂ« shembull pĂ«rfshihet njĂ« skedar YAML pĂ«r server dhe loadgen. Çdo skedar YAML tregon gjendjen e dĂ«shiruar tĂ« objektit tĂ« implementimit dhe shĂ«rbimit 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 tregon llojin e objektit.
  • metadata.name tregon emrin e implementimit.
  • Fusha e parĂ« spec pĂ«rmban pĂ«rshkrimin e gjendjes sĂ« dĂ«shiruar.
  • spec.replicas tregon numrin e dĂ«shiruar tĂ« pod’ëve.
  • Pjesa spec.template shton modelin e pod’it. NĂ« specifikimin e pod’ëve ka njĂ« fushĂ« image, ku tregohet emri i imazhit qĂ« duhet tĂ« tĂ«rhiqet nga Container Registry.

Shërbimi përcaktohet si më poshtë:

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

  • LoadBalancer: klientĂ«t dĂ«rgojnĂ« kĂ«rkesa nĂ« IP-nĂ« e balancuesit tĂ« ngarkesĂ«s, i cili ka njĂ« IP tĂ« pĂ«rhershme dhe Ă«shtĂ« i disponueshĂ«m jashtĂ« klasterit.
  • targetPort: siç e mbani mend, komanda EXPOSE 8080 nĂ« Dockerfile nuk ofronte porte. Ju ofroni portin 8080, pĂ«r t’u lidhur me kontejnerin server jashtĂ« klasterit. NĂ« rastin tonĂ« hellosvc.default.cluster.local:80 (emri i shkurtĂ«r: hellosvc) pĂ«rputhet me portin 8080 IP-adresa e pods helloserver.
  • port: kjo Ă«shtĂ« numri i portit ku shĂ«rbimet e tjera nĂ« klaster do tĂ« dĂ«rgojnĂ« kĂ«rkesa.

loadgen.yaml

Objekti i deploy-it në loadgen.yaml ngjason me server.yaml. Dallimi është se objekti i deploy-it përmban seksionin env. Ai përcakton variablat e mjedisit që nevojiten loadgen dhe që ju keni vendosur gjatë nisjes së aplikacionit nga kodi burimor.

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

Një herë loadgen nuk pranon kërkesa hyrëse, për fushën type është specifikuar ClusterIP. Ky tip ofron një IP të përhershme që mund të përdorin shërbimet në klaster, por kjo IP nuk i ofrohet klientëve të jashtëm.

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

Deployimi i kontejnerëve në GKE

1) Shkoni në katalogun ku ndodhet shembulli server:

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

2) Hapni server.yaml në një redaktues teksti.
3) Ndryshoni emrin në fushën image në emrin e imazhit tuaj Docker.

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

Zëvendësoni PROJECT_ID në identifikuesin e projektit tuaj GCP.
4) Ruani dhe mbyllni server.yaml.
5) Implementoni skedarin YAML në Kubernetes:

kubectl apply -f server.yaml

Pas përfundimit të suksesshëm, ekipi jep kodin e mëposhtëm:

deployment.apps/helloserver created
service/hellosvc created

6) Shkoni në katalogun ku ndodhet loadgen:

cd ../loadgen

7) Hapni loadgen.yaml në një redaktues teksti.
8) Ndryshoni emrin në fushën image në emrin e imazhit tuaj Docker.

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

Zëvendësoni PROJECT_ID në identifikuesin e projektit tuaj GCP.
9) Ruani dhe mbyllni loadgen.yaml, mbyllni editorin e tekstit.
10) Implementoni skedarin YAML në Kubernetes:

kubectl apply -f loadgen.yaml

Pas përfundimit të suksesshëm, ekipi jep kodin e mëposhtëm:

deployment.apps/loadgenerator created
service/loadgensvc created

11) Kontrolloni statusin e pod-ëve:

kubectl get pods

Komanda tregon statusin:

NAME                             READY   STATUS    RESTARTS   AGE
helloserver-69b9576d96-mwtcj     1/1     Running   0          58s
loadgenerator-774dbc46fb-gpbrz   1/1     Running   0          57s

12) Nxirrni logët e aplikacionit nga poda loadgen. Zëvendësoni POD_ID në identifikuesin nga përgjigjja e mëparshme.

kubectl logs loadgenerator-POD_ID

13) Merrni adresat IP të jashtme hellosvc:

kubectl get service

Përgjigja e komandës duket kështu:

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                443/TCP        93m
loadgensvc   ClusterIP      10.81.15.155             80/TCP         4m52s

14) Dërgoni një kërkesë në hellosvc: ndërroni EXTERNAL_IP në IP-në e jashtme hellosvc.

curl http://EXTERNAL_IP

TĂ« merremi me Istio

Ju tashmë keni një aplikacion të vendosur në GKE. loadgen mund të përdorë DNS-in e Kubernetes (hellosvc:80), për të dërguar kërkesa në server, dhe ju mund të dërgoni kërkesa në server në IP-në e jashtme. Edhe pse Kubernetes ka shumë mundësi, disa informacione për shërbimet mungojnë:

  • Si ndĂ«rveprojnĂ« shĂ«rbimet? Cilat janĂ« marrĂ«dhĂ«niet mes shĂ«rbimeve? Si kalon trafiku mes shĂ«rbimeve? A jeni nĂ« dijeni se loadgen dĂ«rgon kĂ«rkesa nĂ« server, por imagjinoni se nuk dini asgjĂ« pĂ«r aplikacionin. PĂ«r tĂ« pĂ«rgjigjur nĂ« kĂ«to pyetje, shikoni listĂ«n e konteinerĂ«ve tĂ« vendosur nĂ« GKE.
  • Metricat. Sa kohĂ« server pĂ«rgjigjet nĂ« njĂ« kĂ«rkesĂ« tĂ« ardhur? Sa kĂ«rkesa nĂ« sekondĂ« mbĂ«rrijnĂ« nĂ« server? A jep mesazhe gabimi?
  • Informacione mbi sigurinĂ«. Trafiku midis loadgen dhe server kalon thjesht pĂ«rmes HTTP ose pĂ«rmes mTLS?

I gjithë ky informacion jepet nga Istio. Për këtë, Istio vendos një proxy sidecar Envoy në çdo pod. Proxy Envoy kap të gjithë trafikun e ardhshëm dhe të dalë në konteinerët e aplikacionit. Kjo do të thotë që server dhe loadgen merrni përmes proxy sidecar Envoy, dhe gjithë trafiku nga loadgen për server kalon përmes proxy Envoy.

Lidhjet midis proxy-t Envoy formojnë një service mesh. Arkitektura e service mesh ofron një nivel kontrolli mbi Kubernetes.

Përgatitja e aplikacionit për Istio

Pasi proxy-t Envoy ekzekutohen në kontejnerët e tyre, Istio mund të instalohet mbi klasterin GKE, pothuajse pa ndryshuar kodin e aplikacionit. Por keni bërë disa përgatitje për të menaxhuar aplikacionin me ndihmën e Istio:

  • ShĂ«rbime pĂ«r tĂ« gjitha kontejnerĂ«t. Me implementimet server dhe loadgen janĂ« tĂ« lidhura sipas shĂ«rbimit Kubernetes. Edhe ai loadgen, pĂ«r tĂ« cilin nuk vijnĂ« kĂ«rkesa hyrĂ«se, ka njĂ« shĂ«rbim.
  • Portat nĂ« shĂ«rbime duhet tĂ« kenĂ« emra. MegjithĂ«se nĂ« GKE portet e shĂ«rbimeve mund tĂ« lihen pa emĂ«r, Istio kĂ«rkon qĂ« emri i portit tĂ« pĂ«rputhet me protokollin e tij. NĂ« skedarin YAML, porta pĂ«r server quhet http, sepse serveri pĂ«rdor protokollin HTTP. Po tĂ« service pĂ«rdorte gRPC, do ta kishit quajtur portĂ«n grpc.
  • Implementimet etiketohen. Prandaj, mund tĂ« pĂ«rdorni funksionet e menaxhimit tĂ« trafikut tĂ« Istio, pĂ«r shembull, pĂ«r tĂ« ndarĂ« trafikun midis versioneve tĂ« njĂ« shĂ«rbimi.

Instalimi i Istio

Istio mund të instalohet në dy mënyra. Mund të aktivizoni zgjerimin Istio on GKE ose apo të instaloni versionin open-source të Istio në klastra. Me Istio on GKE, mund të menaxhoni lehtësisht instalimin dhe përditësimin e Istio brenda ciklit të jetës së klastra GKE. Nëse ju nevojitet versioni më i ri i Istio ose më shumë kontroll mbi konfigurimin e panelit të kontrollit të Istio, instaloni versionin open-source në vend të zgjerimit Istio on GKE. Për të vendosur qasjen, lexoni artikullin Më duhet Istio on GKE?.

Zgjidhni një mundësi, studio udhëzimin përkatës dhe ndiqni udhëzimet për të instaluar Istio në klastra. Nëse dëshironi të përdorni Istio me një aplikacion të sapo vendosur, aktivizoni implementimin e sidecar për hapësirat e emrave default.

Pastrimi

Për të mos u ngarkuar për burimet që keni përdorur në këtë udhëzim nga llogaria Google Cloud Platform, fshini klastrin e kontejnerit kur të keni instaluar Istio dhe të keni luajtur me shembullin e aplikacionit. Kështu do të fshihen të gjitha burimet e klastri, si instancat e llogaritjes, diskët dhe burimet rrjetit.

ÇfarĂ« ndodh mĂ« tej?

Burimi: habr.com

Bli njĂ« hosting tĂ« besueshĂ«m pĂ«r faqet me mbrojtje DDoS, VPS VDS serverĂ« đŸ”„ Bli njĂ« hosting tĂ« besueshĂ«m pĂ«r faqet me mbrojtje DDoS, VPS VDS serverĂ« | ProHoster