Προετοιμασία αίτησης για το Ιστιο

Προετοιμασία αίτησης για το Ιστιο

Το Istio είναι ένα βολικό εργαλείο για τη σύνδεση, την ασφάλιση και την παρακολούθηση κατανεμημένων εφαρμογών. Το Istio χρησιμοποιεί μια ποικιλία τεχνολογιών για την εκτέλεση και τη διαχείριση λογισμικού σε κλίμακα, συμπεριλαμβανομένων κοντέινερ για τη συσκευασία κώδικα εφαρμογής και εξαρτήσεων για ανάπτυξη, και το Kubernetes για τη διαχείριση αυτών των κοντέινερ. Επομένως, για να δουλέψετε με το Istio πρέπει να γνωρίζετε πώς λειτουργεί μια εφαρμογή με πολλαπλές υπηρεσίες που βασίζονται σε αυτές τις τεχνολογίες χωρίς Ιστιο. Εάν αυτά τα εργαλεία και οι έννοιες είναι ήδη γνωστά σε εσάς, μη διστάσετε να παραλείψετε αυτό το σεμινάριο και να μεταβείτε κατευθείαν στην ενότητα Εγκατάσταση του Istio στο Google Kubernetes Engine (GKE) ή εγκατάσταση επέκτασης Ιστιο επί ΓΚΕ.

Αυτός είναι ένας οδηγός βήμα προς βήμα όπου θα ακολουθήσουμε ολόκληρη τη διαδικασία από τον πηγαίο κώδικα έως το κοντέινερ GKE για να σας δώσουμε μια βασική κατανόηση αυτών των τεχνολογιών μέσω ενός παραδείγματος. Θα δείτε επίσης πώς το Istio αξιοποιεί τη δύναμη αυτών των τεχνολογιών. Αυτό προϋποθέτει ότι δεν γνωρίζετε τίποτα για τα κοντέινερ, τα Kubernetes, τα πλέγματα εξυπηρέτησης ή το Istio.

εργασίες

Σε αυτό το σεμινάριο, θα ολοκληρώσετε τις ακόλουθες εργασίες:

  1. Εκμάθηση μιας απλής εφαρμογής hello world με πολλαπλές υπηρεσίες.
  2. Εκτελέστε την εφαρμογή από τον πηγαίο κώδικα.
  3. Συσκευασία της εφαρμογής σε δοχεία.
  4. Δημιουργία συμπλέγματος Kubernetes.
  5. Ανάπτυξη κοντέινερ σε ένα σύμπλεγμα.

Πριν ξεκινήσετε

Ακολουθήστε τις οδηγίες για να ενεργοποιήσετε το Kubernetes Engine API:

  1. Πηγαίνετε στο Σελίδα Kubernetes Engine στην κονσόλα Google Cloud Platform.
  2. Δημιουργήστε ή επιλέξτε ένα έργο.
  3. Περιμένετε μέχρι να ενεργοποιηθούν το API και οι σχετικές υπηρεσίες. Αυτό μπορεί να διαρκέσει μερικά λεπτά.
  4. Βεβαιωθείτε ότι η χρέωση έχει ρυθμιστεί για το έργο σας στο Google Cloud Platform. Μάθετε πώς μπορείτε να ενεργοποιήσετε τη χρέωση.

Σε αυτό το σεμινάριο, μπορείτε να χρησιμοποιήσετε το Cloud Shell, το οποίο προετοιμάζει την εικονική μηχανή g1-small στο Google Compute Engine με Linux που βασίζεται σε Debian ή υπολογιστή Linux ή macOS.

Επιλογή Α: Χρήση του Cloud Shell

Οφέλη από τη χρήση του Cloud Shell:

  • Περιβάλλοντα ανάπτυξης Python 2 και Python 3 (συμπεριλαμβανομένων virtualenv) έχουν διαμορφωθεί πλήρως.
  • Εργαλεία γραμμής εντολών gcloud, λιμενεργάτης, πηγαίνω и kubectl, που θα χρησιμοποιήσουμε είναι ήδη εγκατεστημένα.
  • Έχετε πολλά να διαλέξετε συντάκτες κειμένου:
    1. Πρόγραμμα επεξεργασίας κώδικα, το οποίο ανοίγει με το εικονίδιο επεξεργασίας στο επάνω μέρος του παραθύρου του Cloud Shell.
    2. Emacs, Vim ή Nano, που ανοίγουν από τη γραμμή εντολών στο Cloud Shell.

Χρησιμοποιώ Cloud Shell:

  1. Μεταβείτε στην κονσόλα GCP.
  2. Κάντε κλικ στο κουμπί Ενεργοποιήστε το Cloud Shell (Ενεργοποίηση Cloud Shell) στο επάνω μέρος του παραθύρου της κονσόλας GCP.

Προετοιμασία αίτησης για το Ιστιο

Στο κάτω μέρος Κονσόλα GCP Μια περίοδος λειτουργίας Cloud Shell με γραμμή εντολών θα ανοίξει σε νέο παράθυρο.

Προετοιμασία αίτησης για το Ιστιο

Επιλογή Β: Τοπική χρήση εργαλείων γραμμής εντολών

Εάν εργάζεστε σε υπολογιστή με Linux ή macOS, θα χρειαστεί να διαμορφώσετε και να εγκαταστήσετε τα ακόλουθα στοιχεία:

  1. Προσαρμογή Περιβάλλον ανάπτυξης Python 3 και Python 2.

  2. Εγκαταστήστε το Cloud SDK με το εργαλείο γραμμής εντολών gcloud.

  3. Σετ kubectl - εργαλείο γραμμής εντολών για εργασία με Kubernetes.

    gcloud components install kubectl

  4. Σετ Docker Community Edition (CE). Θα χρησιμοποιήσετε το εργαλείο γραμμής εντολών λιμενεργάτηςγια να δημιουργήσετε εικόνες κοντέινερ για το δείγμα εφαρμογής.

  5. Εγκαταστήστε το εργαλείο Έλεγχος έκδοσης Gitγια να λάβετε το δείγμα εφαρμογής από το GitHub.

Λήψη δείγματος κώδικα

  1. Κατεβάστε τον πηγαίο κώδικα helloserver:

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

  2. Μεταβείτε στον κατάλογο του παραδείγματος κώδικα:

    cd istio-samples/sample-apps/helloserver

Εξερεύνηση μιας εφαρμογής με πολλαπλές υπηρεσίες

Το δείγμα εφαρμογής είναι γραμμένο σε Python και αποτελείται από δύο στοιχεία που αλληλεπιδρούν χρησιμοποιώντας ΠΕΡΙΦΕΡΕΙΑ:

  • διακομιστής: απλός διακομιστής με ένα τελικό σημείο ΠΑΡΕ, /, το οποίο εκτυπώνει στην κονσόλα "hello world".
  • φορτωτής: σενάριο που στέλνει κίνηση σε διακομιστής, με διαμορφώσιμο αριθμό αιτημάτων ανά δευτερόλεπτο.

Προετοιμασία αίτησης για το Ιστιο

Εκτέλεση μιας εφαρμογής από τον πηγαίο κώδικα

Για να εξερευνήσετε το δείγμα εφαρμογής, εκτελέστε το στο 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:

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, πρέπει να συσκευάσετε το παράδειγμα εφαρμογής − διακομιστής и φορτωτής - στις Εμπορευματοκιβώτια. Ένα κοντέινερ είναι ένας τρόπος συσκευασίας μιας εφαρμογής για την απομόνωσή της από το περιβάλλον της.

Για να συσκευάσετε μια εφαρμογή σε ένα δοχείο, χρειάζεστε Dockerfile. Dockerfile είναι ένα αρχείο κειμένου που ορίζει εντολές για τη δημιουργία του πηγαίου κώδικα της εφαρμογής και των εξαρτήσεών του Εικόνα Docker. Μόλις κατασκευαστεί, ανεβάζετε την εικόνα σε ένα μητρώο κοντέινερ όπως το 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" ]

  • Ομάδα ΑΠΟ python:3-slim ως βάση λέει στον Docker να χρησιμοποιήσει το πιο πρόσφατο Εικόνα Python 3 ως βάση.
  • Ομάδα ΑΝΤΙΓΡΑΦΟ. . αντιγράφει τα αρχεία προέλευσης στον τρέχοντα κατάλογο εργασίας (μόνο στην περίπτωσή μας server.py) στο σύστημα αρχείων του κοντέινερ.
  • ΣΗΜΕΙΟ ΕΙΣΟΔΟΥ ορίζει την εντολή που χρησιμοποιείται για την εκκίνηση του κοντέινερ. Στην περίπτωσή μας, αυτή η εντολή είναι σχεδόν ίδια με αυτήν που εκτελούσατε server.py από τον πηγαίο κώδικα.
  • Ομάδα ΕΚΘΕΣΕΙ δείχνει ότι διακομιστής περιμένει για δεδομένα μέσω της θύρας 8080. Αυτή η ομάδα δεν είναι παρέχει λιμάνια. Αυτό είναι κάποιο είδος τεκμηρίωσης που απαιτείται για το άνοιγμα της θύρας 8080 κατά την εκκίνηση του δοχείου.

Προετοιμασία για τη συσκευασία της αίτησής σας

1) Ορίστε τις ακόλουθες μεταβλητές περιβάλλοντος. Αντικαθιστώ PROJECT_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) Βεβαιωθείτε ότι η υπηρεσία Container Registry είναι ενεργοποιημένη στο έργο 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 αντιπροσωπεύει την ετικέτα 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

Δημιουργία συμπλέγματος ΓΚΕ.

Αυτά τα κοντέινερ θα μπορούσαν να εκτελεστούν σε μια εικονική μηχανή 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 δημιουργεί ένα istioready cluster στο έργο 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

Βασικές Έννοιες Kubernetes

Το διάγραμμα δείχνει μια εφαρμογή στο ΓΚΕ:

Προετοιμασία αίτησης για το Ιστιο

Πριν αναπτύξετε κοντέινερ στο GKE, μάθετε τις βασικές έννοιες του Kubernetes. Υπάρχουν σύνδεσμοι στο τέλος εάν θέλετε να μάθετε περισσότερα.

  • Κόμβοι και συστάδες. Στο ΓΚΕ, ένας κόμβος είναι μια εικονική μηχανή. Σε άλλες πλατφόρμες Kubernetes, ένας κόμβος μπορεί να είναι ένας υπολογιστής ή μια εικονική μηχανή. Ένα σύμπλεγμα είναι μια συλλογή κόμβων που μπορεί να θεωρηθεί ως μια ενιαία μονάδα όπου αναπτύσσετε μια εφαρμογή με κοντέινερ.
  • Pods. Στο Kubernetes, τα δοχεία λειτουργούν σε λοβούς. Ένα Pod στο Kubernetes είναι μια αδιαίρετη μονάδα. Ένα Pod χωρά ένα ή περισσότερα δοχεία. Αναπτύσσετε κοντέινερ διακομιστή και φορτωτής σε ξεχωριστούς λοβούς. Όταν υπάρχουν πολλά κοντέινερ σε ένα pod (για παράδειγμα, ένας διακομιστής εφαρμογών και διακομιστή μεσολάβησης), τα κοντέινερ διαχειρίζονται ως ενιαία οντότητα και μοιράζονται πόρους pod.
  • Αναπτύξεις. Στο Kubernetes, μια ανάπτυξη είναι ένα αντικείμενο που είναι μια συλλογή από πανομοιότυπα pods. Το Deployment εκκινεί πολλαπλά αντίγραφα pods που διανέμονται σε κόμβους συμπλέγματος. Η ανάπτυξη αντικαθιστά αυτόματα τις ομάδες που απέτυχαν ή δεν ανταποκρίνονται.
  • Υπηρεσία Kubernetes. Κατά την εκτέλεση κώδικα εφαρμογής στο ΓΚΕ, η σύνδεση μεταξύ φορτωτής и διακομιστής. Όταν ξεκινήσατε τις υπηρεσίες σε μια εικονική μηχανή ή επιτραπέζιο υπολογιστή Cloud Shell, στείλατε αιτήματα σε διακομιστής στο localhost: 8080. Μόλις αναπτυχθούν στο GKE, τα pods εκτελούνται σε διαθέσιμους κόμβους. Από προεπιλογή, δεν έχετε κανέναν έλεγχο σε ποιον κόμβο εκτελείται το pod, επομένως εσείς λοβοί χωρίς μόνιμες διευθύνσεις IP.
    Για να αποκτήσετε μια διεύθυνση IP για διακομιστής, πρέπει να ορίσετε μια αφαίρεση δικτύου πάνω από τα pod. Αυτό είναι Υπηρεσία Kubernetes. Η υπηρεσία Kubernetes παρέχει ένα μόνιμο τελικό σημείο για ένα σύνολο ομάδων ομάδων. Υπάρχουν λίγα είδη υπηρεσιών. διακομιστής χρήσεις LoadBalancer, το οποίο παρέχει μια εξωτερική διεύθυνση IP για επικοινωνία διακομιστής έξω από το σύμπλεγμα.
    Το Kubernetes διαθέτει επίσης ένα ενσωματωμένο σύστημα DNS που εκχωρεί ονόματα DNS (για παράδειγμα, helloserver.default.cluster.local) Υπηρεσίες. Χάρη σε αυτό, τα pods εντός του συμπλέγματος επικοινωνούν με άλλα pods του συμπλέγματος σε μια σταθερή διεύθυνση. Το όνομα DNS δεν μπορεί να χρησιμοποιηθεί εκτός του συμπλέγματος, όπως στο Cloud Shell ή σε υπολογιστή.

Ο Kubernetes εκδηλώνεται

Όταν εκτελούσατε την εφαρμογή από την πηγή, χρησιμοποιούσατε την επιτακτική εντολή python3

server.py

Το Imperative υποδηλώνει ένα ρήμα: "κάνω αυτό".

Χρήσεις Kubernetes δηλωτικό μοντέλο. Αυτό σημαίνει ότι δεν λέμε στον Kubernetes τι ακριβώς να κάνει, αλλά μάλλον περιγράφουμε την επιθυμητή κατάσταση. Για παράδειγμα, το Kubernetes ξεκινά και σταματά τα pods όπως απαιτείται για να διατηρήσει την πραγματική κατάσταση του συστήματος συνεπή με την επιθυμητή κατάσταση.

Υποδεικνύετε την επιθυμητή κατάσταση σε μανιφέστα ή αρχεία ΓΙΑΜΛ. Ένα αρχείο 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

  • είδος υποδεικνύει τον τύπο του αντικειμένου.
  • μεταδεδομένα.όνομα καθορίζει το όνομα ανάπτυξης.
  • Πρώτο πεδίο Spec περιέχει μια περιγραφή της επιθυμητής κατάστασης.
  • spec.αντίγραφα υποδεικνύει τον επιθυμητό αριθμό λοβών.
  • Τμήμα 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 και είναι προσβάσιμη εκτός του συμπλέγματος.
  • targetPort: όπως θυμάστε, η ομάδα ΕΚΘΕΣΗ 8080 в Dockerfile δεν παρείχε λιμάνια. Παρέχετε το λιμάνι 8080ώστε να μπορείτε να έρθετε σε επαφή με το δοχείο διακομιστής έξω από το σύμπλεγμα. Στην περίπτωσή μας hellosvc.default.cluster.local:80 (μικρό όνομα: hellosvc) αντιστοιχεί στο λιμάνι 8080 Διευθύνσεις IP pod helloserver.
  • λιμάνι: Αυτός είναι ο αριθμός θύρας όπου άλλες υπηρεσίες στο σύμπλεγμα θα στείλουν αιτήματα.

loadgen.yaml

Αντικείμενο ανάπτυξης σε loadgen.yaml μοιάζει server.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

Ανάπτυξη Containers στο ΓΚΕ

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 στο αναγνωριστικό του έργου σας 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 στο αναγνωριστικό του έργου σας 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 φορτωτής. Αντικαθιστώ 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

Ας πάρουμε το Ιστιο

Έχετε ήδη μια εφαρμογή αναπτυγμένη στο ΓΚΕ. φορτωτής μπορεί να χρησιμοποιήσει Kubernetes DNS (hellosvc:80) για αποστολή αιτημάτων σε διακομιστήςκαι μπορείτε να στείλετε αιτήματα σε διακομιστής με εξωτερική διεύθυνση IP. Αν και το Kubernetes έχει πολλές δυνατότητες, λείπουν ορισμένες πληροφορίες σχετικά με τις υπηρεσίες:

  • Πώς αλληλεπιδρούν οι υπηρεσίες; Ποιες είναι οι σχέσεις μεταξύ των υπηρεσιών; Πώς ρέει η κίνηση μεταξύ των υπηρεσιών; Γνωρίζετε ότι φορτωτής στέλνει αιτήματα σε διακομιστής, αλλά φανταστείτε ότι δεν γνωρίζετε τίποτα για την εφαρμογή. Για να απαντήσουμε σε αυτές τις ερωτήσεις, ας δούμε τη λίστα με τα τρέχοντα pod στο GKE.
  • Μετρήσεις. Πόσο καιρό διακομιστής απαντά σε ένα εισερχόμενο αίτημα; Πόσα αιτήματα ανά δευτερόλεπτο λαμβάνονται από τον διακομιστή; Δίνει μηνύματα λάθους;
  • Πληροφορίες Ασφαλείας. Κυκλοφορία μεταξύ φορτωτής и διακομιστής απλώς περνάει HTTP ή από mTLS?

Ο Istio απαντά σε όλα αυτά τα ερωτήματα. Για να γίνει αυτό, το Istio τοποθετεί ένα sidecar proxy Απεσταλμένος σε κάθε λοβό. Ο διακομιστής μεσολάβησης Envoy παρεμποδίζει όλη την εισερχόμενη και εξερχόμενη κίνηση προς τα κοντέινερ εφαρμογών. Αυτό σημαίνει ότι διακομιστής и φορτωτής λάβετε μέσω του sidecar proxy Envoy και όλη την κίνηση από φορτωτής к διακομιστής περνά από τον πληρεξούσιο του Απεσταλμένου.

Οι συνδέσεις μεταξύ διαμεσολαβητών Envoy σχηματίζουν ένα πλέγμα υπηρεσίας. Η αρχιτεκτονική πλέγματος υπηρεσιών παρέχει ένα επίπεδο ελέγχου πάνω από το Kubernetes.

Προετοιμασία αίτησης για το Ιστιο

Εφόσον οι πληρεξούσιοι Envoy εκτελούνται στα δικά τους κοντέινερ, το Istio μπορεί να εγκατασταθεί πάνω από ένα σύμπλεγμα GKE χωρίς σχεδόν καμία αλλαγή στον κώδικα εφαρμογής. Αλλά έχετε κάνει κάποια δουλειά για να ετοιμάσετε την εφαρμογή σας για διαχείριση από το Istio:

  • Υπηρεσίες για όλα τα κοντέινερ. Σε αναπτύξεις διακομιστής и φορτωτής συνδέεται με την υπηρεσία Kubernetes. Ακόμη και φορτωτής, που δεν λαμβάνει εισερχόμενα αιτήματα, υπάρχει υπηρεσία.
  • Οι θύρες στις υπηρεσίες πρέπει να έχουν ονόματα. Αν και οι θύρες υπηρεσίας μπορούν να παραμείνουν χωρίς όνομα στο GKE, το Istio απαιτεί να καθορίσετε όνομα λιμένα σύμφωνα με το πρωτόκολλό του. Στο αρχείο YAML η θύρα για διακομιστής καλείται httpεπειδή ο διακομιστής χρησιμοποιεί το πρωτόκολλο HTTP. Αν υπηρεσία χρησιμοποιούνται gRPC, θα ονομάζατε το λιμάνι grpc.
  • Οι αναπτύξεις επισημαίνονται. Επομένως, μπορείτε να χρησιμοποιήσετε τις δυνατότητες διαχείρισης κυκλοφορίας του Istio, όπως ο διαχωρισμός της κυκλοφορίας μεταξύ εκδόσεων της ίδιας υπηρεσίας.

Εγκατάσταση

Υπάρχουν δύο τρόποι εγκατάστασης του Istio. Μπορώ ενεργοποιήστε την επέκταση Istio στο GKE ή εγκαταστήστε την έκδοση ανοιχτού κώδικα του Istio στο σύμπλεγμα. Με το Istio στο GKE, μπορείτε εύκολα να διαχειριστείτε τις εγκαταστάσεις και τις αναβαθμίσεις του Istio σε όλο τον κύκλο ζωής του συμπλέγματος GKE. Εάν θέλετε την πιο πρόσφατη έκδοση του Istio ή περισσότερο έλεγχο στη διαμόρφωση του πίνακα ελέγχου Istio, εγκαταστήστε την έκδοση ανοιχτού κώδικα αντί για την επέκταση Istio on GKE. Για να αποφασίσετε για την προσέγγιση, διαβάστε το άρθρο Χρειάζομαι Istio στο ΓΚΕ;.

Επιλέξτε μια επιλογή, διαβάστε τον κατάλληλο οδηγό και ακολουθήστε τις οδηγίες για να εγκαταστήσετε το Istio στο σύμπλεγμα σας. Εάν θέλετε να χρησιμοποιήσετε το Istio με την εφαρμογή που αναπτύξατε πρόσφατα, ενεργοποιήστε την υλοποίηση sidecar για τον χώρο ονομάτων αθέτηση.

Καθαρισμός

Για να αποφύγετε τη χρέωση στον λογαριασμό σας στο Google Cloud Platform για τους πόρους που χρησιμοποιήσατε σε αυτόν τον οδηγό, διαγράψτε το σύμπλεγμα κοντέινερ μόλις εγκαταστήσετε το Istio και παίξετε με το δείγμα εφαρμογής. Αυτό θα καταργήσει όλους τους πόρους συμπλέγματος, όπως περιπτώσεις υπολογιστών, δίσκους και πόρους δικτύου.

Ποιο είναι το επόμενο;

Πηγή: www.habr.com

Προσθέστε ένα σχόλιο