Praeparans applicationem Istio

Praeparans applicationem Istio

Istio est instrumentum opportunum ad applicationes applicandi, impetrandi et vigilantiae distribuendi. Istio variis technologiarum utitur ut programmata in scala currat et disponat, incluso vasis ad involucrum codicillis applicationis et clientelas instruendi, et Kubernetes ad illas continentia regendas. Propterea laborare cum Istio debes scire quomodo applicatio multiplicibus officiis in his technologiarum operibus fundata sine Istio. Si haec instrumenta notionesque iam tibi nota sunt, libenter senties hanc discessionem transilire et ad sectionem pergere Istio installans in Google Engine Kubernetes (GKE) an installing extensio Istio on GKE.

Hoc gradatim dux est quo perambulabimus totum processum a codice fonte ad GKE continens ut tibi harum technologiarum per exemplum fundamentale cognoscatur. Videbis etiam quomodo Istio leves harum technologiarum potestatem habeat. Hoc te de vasis, Kubernetes, reticulis, aut Istio nihil scis.

tasks

In hoc doceo, sequentia perficies opera:

  1. Discens simplex salve mundi applicatione multiplicibus officiis.
  2. Applicationem a fonte currunt codice.
  3. Applicatio packaging in vasis.
  4. Botrus condens Kubernetes.
  5. Vasa disponis in botrum.

Ante vos satus

Sequere mandata ut Engine Kubernetes API:

  1. Ite ad Kubernetes Engine page in Google Cloud Rostra consolatorium.
  2. Create an eligere project.
  3. Exspecta donec API et officia cognata valeant. Hoc paucis minutis capere potest.
  4. Fac exosculatio pro Google Cloud Platform project. Disce quomodo exosculatio.

In hoc consequat, Cloud Testa uti potes, quae virtualem machinam praeparat g1-parvum in Google Computo Engine cum Debian-substructio Linux, vel Linux vel macOS computatorium.

Option A: Using Cloud Testa

Beneficia Cloud Testa utendi:

  • Python 2 and Python 3 development ambitus (including virtualenv) Plene configuratur.
  • Mandatum Versus Tools gcloud, Docker, ad и kubectlquibus utemur iam institutis.
  • Habes multa eligere ex text editors:
    1. Code editorquae aperit cum icone in summitate fenestrae Cloud Testae.
    2. Emacs, Vim vel Nano, quae aperta sunt ex praecepto in Cloud Shell.

Uti Nubes Testa:

  1. Vade ad consolatorium GCP.
  2. torcular Activate Cloud Testa (Activate Cloud Testa) in summitate GCP fenestra consolatorium.

Praeparans applicationem Istio

In inferiore parte GCP consolatorium Cloud Shel sessionem cum linea mandatorum in fenestra nova aperiet.

Praeparans applicationem Istio

Option B: Using order Line Tools Locally

Si opus erit in currenti computatrali Linux vel macOS, configurare debes et sequentia membra instituere:

  1. Mos Python 3 and Python 2 development.

  2. Install nubes SDK order versus instrumentum gcloud.

  3. install kubectl - order versus instrumentum ad operandum Kubernetes.

    gcloud components install kubectl

  4. install Docker Community Edition (CE). Uteris to order versus instrumentum Dockercreare continens imagines ad specimen application.

  5. Instrumentum install Git version imperiumut specimen applicationis a GitHub.

Download sample codice

  1. Download fons codice salver:

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

  2. Vade ad exemplum directorium codicis:

    cd istio-samples/sample-apps/helloserver

Explorans applicationem cum multa officia

Exemplum applicationis in Pythone scriptum est et in duobus consistit quae inter se occurrunt OTIUM:

  • Server: Simplex servo uno endpoint ADVENIO, /qui ad consolatorium procer "salve mundi".
  • loadgen: Scriptum qui misit negotiationis est Servercum figurabili numero petitionum secundarum.

Praeparans applicationem Istio

Currentem applicationem a fonte codice

Ad specimen applicationis explorandum, in Cloud Testa vel in computatorio tuo currendum est.
I) in catalogo istio-exempla / exempla-apps / helloserver Curre Server:

python3 server/server.py

Quando vos satus Server sequenti monstratur;

INFO:root:Starting server...

II) Aperi alium terminum fenestras mittere petitiones Server. Si Nube Testa uteris, iconem addendi preme ut sessionem aliam aperias.
III) mitte rogationem Server:

curl http://localhost:8080

servo respondet:

Hello World!

4) Ex indice ubi exemplar codicem detraxisti, vade ad indicem continentem loadgen:

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

V) hoc amet variabiles crea:

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

6) Launch virtualenv:

virtualenv --python python3 env

VII) Activate environment virtualis:

source env/bin/activate

VIII) constitue requisita loadgen:

pip3 install -r requirements.txt

9) Launch loadgen:

python3 loadgen.py

Quando vos satus loadgen ostendit aliquid simile sequenti nuntio:

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

In alio termino fenestra Server sequentes nuntios ad consolatorium outputs:

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

Ex prospectu network retis, tota applicatio in unum exercitum decurrit (locus computatorius vel Cloud Testa machinae virtualis). Ergo uti potes localhostut petitiones Server.
X) Ut prohibere loadgen и Server, intra Ctrl-c* in omni termino fenestra.
XI) in termino fenestra loadgen deactivate virtualis environment:

deactivate

Packaging applicationem in vasis

Currere applicationes GKE, exemplum applicationis sarcina opus est Server и loadgen - in disrumpit. Continens est via ad sarcinam applicatio ad eam recludet a ambitu suo.

Ad sarcina applicationem in utre, opus est Dockerfile. Dockerfile fasciculus textus est qui praecepta definit ad aedificationem applicationis fontem codicem eiusque clientelas in Docker imaginem. Postquam aedificatum est, imaginem in vase registro imposuisti sicut Docker Hub vel Continens Subcriptio.

Exemplum iam Dockerfile ad Server и loadgen cum omnibus necessariis mandatis ad imagines colligendas. Infra - Dockerfile ad 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/*

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

  • bigas FROM Python: III, gracili pro basi narrat Docker ut tardus Python 3 image ut turpe.
  • bigas EXEMPLUM. . effingo fons lima ad hodiernam operandi Directory (in nostro casu tantum server.py) Ad ratio lima continens.
  • ENTRYPOINT definit imperativum, quod adhibetur exordium continens. In nobis, hoc praeceptum idem fere est ac currebatis server.py ex fonte codice.
  • bigas EXPOSITIO indicat Server notitia observat per portum 8080. Hic dolor non est praebet portuum. Haec documenta quaedam sunt quae ad portum aperiendum necesse est 8080 continens incipiens.

Praeparans ad applicationem tuam continens

1) Pone sequentes variabiles environment. Restituo PROJECT_ID ad GCP project ID.

export PROJECT_ID="PROJECT_ID"

export GCR_REPO="preparing-istio"

Per values PROJECT_ID и GCR_REPO you tag the Docker image when you build it and push it to a private Container Registry.

II) constitue per default GCP instrumentum ad imperium linea gcloud.

gcloud config set project $PROJECT_ID

III) constitue per default zonam ad imperium linea instrumentum gcloud.

gcloud config set compute/zone us-central1-b

4) Fac ut Servitium Continens Subcriptio in GCP project possit.

gcloud services enable containerregistry.googleapis.com

Containerization servo

  1. Vade ad indicem ubi exemplum sita est Server:

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

  2. Imago per congrega Dockerfile ac elit variabilium quae antea definiebantur:

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

parametri -t significat Docker tag. Hoc est nomen imaginis quo uteris explicando continens.

  1. Continens subcriptio ad upload imaginem:
    docker push gcr.io/$PROJECT_ID/$GCR_REPO/helloserver:v0.0.1

Containerization of loadgen

1) Perge ad indicem ubi exemplum positum est loadgen:

cd ../loadgen

2) Colligere imaginem;

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

III) Index continens Subcriptio imaginem:

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

View a album imaginum

Imaginum in promptuario recognoscere et cognoscere imagines in promptuario sunt:

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

Praeceptum demonstrat nomina imaginum recentium imaginum impressarum:

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

Botrus creans GKE.

Haec vasa in nubem testam virtualem machinam currere potuerunt vel in computatrali mandato currere Docker. Sed in ambitu productionis via opus est ad continentes centrales orchestratos. Exempli gratia, ratio indigetis quae certos continentes semper currentes facit, et via opus est ut conscendat ac traheret instantiae additae instantiae, si negotiatio augeatur.

Ad current applicationes continentis uti potes G.K.E.. GKE est suggestus continens orchestrationem quae virtualis machinis in botrum aggregatur. Quaelibet machina virtualis nodi dicitur. Racemi GKE in aperto fonte Kubernetes botri administratione rationi fundantur. Kubernetes machinationes commercium cum botro praebet.

Botrus creans GKE;

I) Botrus crea:

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

bigas gcloud creates istioready botrum in GCP project et default zonam quae dedisti aequant. Currere Istio, commendamus habere saltem 4 nodos et machinam virtualem n1-vexillum-2.

Turma botrum in paucis minutis creat. Cum paratus est botrus, aliquid tale mandatum outputs сообщение.

II) videte in to order versus instrumentum documentorum kubectluti botro regendo;

gcloud container clusters get-credentials istioready

3) Nunc communicare potes cum Kubernetibus via kubectl. Exempli gratia: mandatum sequens nodis statum invenire potest.

kubectl get nodes

Praeceptum nodis indicem gignit;

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 Key Conceptus

Tabula ostendit applicationem in GKE:

Praeparans applicationem Istio

Antequam vasa in GKE explicas, notiones praecipuorum Kubernetensium disce. Sunt nexus in ipso fine si plura discere vis.

  • Nodi et clusters. In GKE, nodi machina virtualis est. In aliis suggestis Kubernetes, nodi potest esse machina computatralis vel virtualis. Botrus est collectio nodi quae considerari potest una unitas ubi applicationem continentis explicas.
  • Siliquae. In Kubernetes, vascula in siliquis currunt. Podex in Kubernetes indivisibilis unitas est. Vasculum unum vel plura continentia tenet. Explicas servo continentia et loadgen siliquis distinctis. Cum multa vasa in vasculo exstant (exempli gratia, applicatio servo ac ineundo servo) , continentia ut unum ens tractata et vasculum opum communicans.
  • Deployments. In Kubernetes, instruere obiectum est collectio siliquarum identicarum. Instruere multas replicationes siliquae per nodos racemos distributas movet. Instruere automatice reponit siliquas quae defecerunt vel male gratus sunt.
  • Kubernetes service. Cum applicatione codicis in GKE currit, nexus inter loadgen и Server. Cum officia virtualis apparatus vel desktop in Cloud Testa coepisti, petitiones misistis Server apud localhost: 8080. Olim ad GKE direxerunt, legumina in nodis promptis exercentur. Defalta, nullam habes potestatem cui vasculum currit, sic tu siliquae IP oratio nulla permanens.
    Adipisci IP oratio pro Server, debes abstractionem retis super siliquis definire. Id quod est Kubernetes service. Ministerium Kubernetes pertinaciter punctum pro siliquis statuto praebet. Pauci sunt genera officia. Server usus LoadBalancerquae externam IP ad contactum praebet Server ab extra botrum.
    Kubernetes etiam systema in DNS constructum habet nomina quae DNS assignat (exempli gratia: helloserver.default.cluster.local) officia. Propter hoc, siliquae intra botrum communicant cum aliis leguminis in botro assidua inscriptione. Nomen DNS extra botrum adhiberi non potest, ut in Cloud Testa vel in computatorio.

Kubernetes manifestat

Cum applicatione a fonte cucurreris, imperativum imperium usus es python3

server.py

Imperativus verbum importat: "hoc facite."

Kubernetes usus declarativum exemplar. Hoc significat nos Kubernetes non prorsus quid faciendum sit, sed potius de re publica desiderata describentes. Exempli gratia, Kubernetes incipit ac siliquas siliquas continet, prout opus est servare statum actualem systematis cum optato statui congruentem.

Desideratum statum in manifestat vel files indicant te YAML. Fasciculus YAML continet specificationes pro objectis vel pluribus Kubernetibus.

Exemplum continet fasciculi YAML for Server и loadgen. Quaelibet fasciculus YAML designat desideratum statum instituti rei et servitutis 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

  • genus indicat rationem obiecti.
  • metadata.name cificat instruere nomen.
  • Primum agri spec desiderati status descriptionem continet.
  • spec.replicas indicat siliquas desideratas numerus.
  • sectioni spec.template definit vasculum template. Est ager in legumen speciem imagoquae nomen imaginis de Continentis Registro eliciendum cificat.

Ministerium sic definitur:

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

  • LoadBalancer: Clientes mittunt petitiones ad librarium IP oneris, quod assiduum IP inscriptionem habet et ab extra botrum accessibilis est.
  • targetPort: ut meministi, theam DENUNTIO 8080 в Dockerfile non portubus. Praestare portum 8080ut contactum vos can contact Server extra botrum. In nobis hellosvc.default.cluster.local:80 (nomen breve: hellosvc) Respondet ad portum 8080 Pod IP oratio salver.
  • portum: Portus hic est numerus, ubi alia officia in botro petitiones mittent.

loadgen.yaml

Instruere objectum loadgen.yaml vultus amo server.yaml. Discrimen est quod instruere res continet sectionem env. Ambituum variabilium definit, quae necessaria sunt loadgen et quod a fonte currens instituisti.

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

Cum loadgen advenientis petitiones non accipit, pro agro genus incognita ClusterIP. Hoc genus IP oratio assidua praebet quae officia in botro uti possunt, sed haec IP oratio externis clientibus non exponitur.

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

Disciplinae in GKE

1) Perge ad indicem ubi exemplum positum est Server:

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

I) Open server.yaml in textu editore.
III) Repone nomen in agro imago nomini tuo Docker imaginem.

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

Restituo PROJECT_ID ad GCP project ID.
IV) salvum ac prope server.yaml.
5) tabellam YAML ad Kubernetes explica:

kubectl apply -f server.yaml

Post feliciter expletum, sequentis codicis praeceptum producit:

deployment.apps/helloserver created
service/hellosvc created

6) Ite in indicem ubi loadgen:

cd ../loadgen

I) Open loadgen.yaml in textu editore.
III) Repone nomen in agro imago nomini tuo Docker imaginem.

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

Restituo PROJECT_ID ad GCP project ID.
IV) salvum ac prope loadgen.yaml, textum editorem claude.
10) tabellam YAML ad Kubernetes explica:

kubectl apply -f loadgen.yaml

Post feliciter expletum, sequentis codicis praeceptum producit:

deployment.apps/loadgenerator created
service/loadgensvc created

11) Perscriptio siliquae status:

kubectl get pods

Praeceptum ostendit statum;

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

12) Tigna applicationis extractum ex legumen loadgen. Restituo POD_ID identifier ad priorem responsum a.

kubectl logs loadgenerator-POD_ID

XIII) externum IP oratio hellosvc:

kubectl get service

Praeceptum responsionis simile quiddam spectat:

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

III) mitte rogationem hellosvc: repone EXTERNAL_IP IP ad externum hellosvc.

curl http://EXTERNAL_IP

Induamus Istio

Iam applicatio ad GKE direxit. loadgen potest uti Kubernetes DNS (hellosvc: 80) Ad petitiones mittere Serveret mittere potes petitiones Server externa IP. Etsi Kubernetes multas notas habet, nonnulla de officiis desunt;

  • Quomodo officia penitus? Quae sunt relationes inter officia? Quomodo commercium inter officia fluit? Scisne loadgen petit to Serversed finge nescias quid de applicatione. Ad has quaestiones solvendas, inspiciamus siliquae indicem GKE currentium.
  • Metrics. Quousque? Server Respondet advenientis petitionem? Quot petitiones secundae a servo accipiuntur? An error mandata dat?
  • Securitatis Information. Negotiationis inter loadgen и Server sicut transit per HTTP aut * mTLS'?

Istio omnibus his quaestionibus respondet. Ad hoc Istio locat procuratorem sidecar envoy in unoquoque vasculo. Procurator Procurator omnes advenientes et exitu mercaturas ad applicationes continentia intercipit. Hoc est quod Server и loadgen recipiat per procuratorem sidecar Procuratorem et omnia negotiatio a loadgen к Server it per procuratorem legatum.

Nexus inter Legatos procuratores reticulum serviendum faciunt. Ministerium architectura reticulatum accumsan regiminis super Kubernetes praebet.

Praeparans applicationem Istio

Cum Legatus procuratores in suis vasis currunt, Istio super glomerum GKE institui potest nullis fere mutationibus ad codicem applicandum. Sed aliquid operati es opus ut tua applicatione parata ab Istio curanda sint:

  • Officia pro omnibus vasis. Ad deployments Server и loadgen ad Kubernetes servitio devinctum. Etiam loadgenquae advenientes petitiones non recipit, obsequium est.
  • Portus in servitiis nomina habere debent. Etsi opera portus in GKE nominari possunt, Istio te requirit ut definias portum nomen ex eius protocollo. In YAML file portum for Server quod dicitur httpquia servo utitur protocol HTTP. Si obsequium usus est gRPC, portum nominare grpc.
  • Instructiones languescunt. Ideo negotia administrationis Istio uti potes, ut commercium inter versiones eiusdem servitii scindendo.

installing Istio

Dupliciter institutionem Istio. Can enable Istio in GKE extensionem aut install fons aperta versio Istio in botro. Cum Istio in GKE, Istio officinas et upgrades per GKE vitae cyclos facile administrare potes. Si vis novissimam versionem Istio vel potius potestatem tuam configurationis tabulae Istio regere, aperi fontem apertum versionis loco Istio in GKE extensionem. Decernere in accessu, legere articulum Quid opus est Istio GKE?.

Elige optionem, ducem convenientem recense, et instructiones sequere ut Istio in botro tuo instituatur. Si vis uti Istio, cum tua nuper instruxit applicatione; enable sidecar implementation nam spatio nominali default.

dictum

Ad ne in Google Cloud Platform rationem ob facultates quas in hoc doceo tuo mandaris, dele vas botrum semel Istio instituisti et cum applicatione specimen lusisti. Hoc omnes facultates glomeras removebunt, ut instantiae computatae, orbis, et retis facultates.

Quid deinde?

Source: www.habr.com

Add a comment