ΠŸΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠ° прилоТСния для Istio

ΠŸΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠ° прилоТСния для Istio

Istio β€” это ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΉ инструмСнт для соСдинСния, Π·Π°Ρ‰ΠΈΡ‚Ρ‹ ΠΈ ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³Π° распрСдСлСнных ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. Π’ Istio ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Ρ€Π°Π·Π½Ρ‹Π΅ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ для ΠΌΠ°ΡΡˆΡ‚Π°Π±Π½ΠΎΠ³ΠΎ запуска ПО ΠΈ управлСния ΠΈΠΌ, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ для ΡƒΠΏΠ°ΠΊΠΎΠ²ΠΊΠΈ ΠΊΠΎΠ΄Π° прилоТСния ΠΈ зависимостСй для развСртывания ΠΈ Kubernetes β€” для управлСния этими ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°ΠΌΠΈ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Istio Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π·Π½Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ с нСсколькими сСрвисами Π½Π° основС этих Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π±Π΅Π· Istio. Если эти инструмСнты ΠΈ понятия Π²Π°ΠΌ ΡƒΠΆΠ΅ Π·Π½Π°ΠΊΠΎΠΌΡ‹, смСло пропускайтС это руководство ΠΈ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚Π΅ прямо ΠΊ Ρ€Π°Π·Π΄Π΅Π»Ρƒ Установка Istio Π½Π° Google Kubernetes Engine (GKE) ΠΈΠ»ΠΈ установкС Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ Istio on GKE.

Π­Ρ‚ΠΎ пошаговоС руководство, Π³Π΄Π΅ ΠΌΡ‹ рассмотрим вСсь процСсс ΠΎΡ‚ исходного ΠΊΠΎΠ΄Π° Π΄ΠΎ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° Π½Π° GKE, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ Π±Π°Π·ΠΎΠ²ΠΎΠ΅ прСдставлСниС ΠΎΠ± этих тСхнологиях Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅. Π’Π°ΠΊΠΆΠ΅ Π²Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅, ΠΊΠ°ΠΊ Istio ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ возмоТности этих Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ. ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚ΡΡ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Π½Π΅ Π·Π½Π°Π΅Ρ‚Π΅ Π½ΠΈΡ‡Π΅Π³ΠΎ ΠΎ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°Ρ…, Kubernetes, service mesh ΠΈΠ»ΠΈ 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, docker, git ΠΈ kubectl, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ, ΡƒΠΆΠ΅ установлСны.
  • Π£ вас Π½Π° Π²Ρ‹Π±ΠΎΡ€ нСсколько тСкстовых Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ΠΎΠ²:
    1. Π Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ ΠΊΠΎΠ΄Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ открываСтся Π·Π½Π°Ρ‡ΠΊΠΎΠΌ рСдактирования Π² Π²Π΅Ρ€Ρ…Π½Π΅ΠΉ части ΠΎΠΊΠ½Π° Cloud Shell.
    2. Emacs, Vim ΠΈΠ»ΠΈ Nano, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΠΈΠ· ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки Π² Cloud Shell.

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Cloud Shell:

  1. ΠŸΠ΅Ρ€Π΅ΠΉΠ΄ΠΈΡ‚Π΅ Π² консоль GCP.
  2. НаТмитС ΠΊΠ½ΠΎΠΏΠΊΡƒ Activate Cloud Shell (ΠΠΊΡ‚ΠΈΠ²ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Cloud Shell) Π² Π²Π΅Ρ€Ρ…Π½Π΅ΠΉ части ΠΎΠΊΠ½Π° консоли GCP.

ΠŸΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠ° прилоТСния для Istio

Π’ Π½ΠΈΠΆΠ½Π΅ΠΉ части консоли GCP Π² Π½ΠΎΠ²ΠΎΠΌ ΠΎΠΊΠ½Π΅ откроСтся сСанс Cloud Shell с ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строкой.

ΠŸΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠ° прилоТСния для Istio

Π’Π°Ρ€ΠΈΠ°Π½Ρ‚ Π‘: использованиС инструмСнтов ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки локально

Если Π²Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π½Π° ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅ с Linux ΠΈΠ»ΠΈ macOS, Π½ΡƒΠΆΠ½ΠΎ Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ ΠΈ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹:

  1. НастройтС срСду Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Python 3 ΠΈ Python 2.

  2. УстановитС Cloud SDK с инструмСнтом ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки gcloud.

  3. УстановитС kubectl β€” инструмСнт ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Kubernetes.

    gcloud components install kubectl

  4. УстановитС Docker Community Edition (CE). Π’Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ инструмСнт ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки docker, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΎΠ±Ρ€Π°Π·Ρ‹ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² для ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° прилоТСния.

  5. УстановитС инструмСнт контроля вСрсий Git, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ прилоТСния с GitHub.

Π—Π°Π³Ρ€ΡƒΠ·ΠΊΠ° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° ΠΊΠΎΠ΄Π°

  1. Π—Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚Π΅ исходный ΠΊΠΎΠ΄ helloserver:

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

  2. ΠŸΠ΅Ρ€Π΅ΠΉΠ΄ΠΈΡ‚Π΅ Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° ΠΊΠΎΠ΄Π°:

    cd istio-samples/sample-apps/helloserver

Π˜Π·ΡƒΡ‡Π΅Π½ΠΈΠ΅ прилоТСния с нСсколькими сСрвисами

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ прилоТСния написан Π½Π° Python ΠΈ состоит ΠΈΠ· Π΄Π²ΡƒΡ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‚ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ REST:

  • server: простой сСрвСр с ΠΎΠ΄Π½ΠΎΠΉ ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ GET, /, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ Β«hello worldΒ» Π½Π° консоли.
  • loadgen: скрипт, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ посылаСт Ρ‚Ρ€Π°Ρ„ΠΈΠΊ Π½Π° server, с настраиваСмым числом запросов Π² сСкунду.

ΠŸΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠ° прилоТСния для Istio

Запуск прилоТСния ΠΈΠ· исходного ΠΊΠΎΠ΄Π°

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ прилоТСния, запуститС Π΅Π³ΠΎ Π² Cloud Shell ΠΈΠ»ΠΈ Π½Π° ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅.
1) Π’ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ istio-samples/sample-apps/helloserver запуститС server:

python3 server/server.py

ΠŸΡ€ΠΈ запускС server отобраТаСтся ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅:

INFO:root:Starting server...

2) ΠžΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ Π΄Ρ€ΡƒΠ³ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ запросы ΠΊ server. Если Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ Cloud Shell, Π½Π°ΠΆΠΌΠΈΡ‚Π΅ Π·Π½Π°Ρ‡ΠΎΠΊ добавлСния, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΎΠΉ сСанс.
3) ΠžΡ‚ΠΏΡ€Π°Π²ΡŒΡ‚Π΅ запрос ΠΊ server:

curl http://localhost:8080

server ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚:

Hello World!

4) Из ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°, ΠΊΡƒΠ΄Π° Π²Ρ‹ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΠ»ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° ΠΊΠΎΠ΄Π°, ΠΏΠ΅Ρ€Π΅ΠΉΠ΄ΠΈΡ‚Π΅ Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ содСрТит loadgen:

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) УстановитС трСбования для loadgen:

pip3 install -r requirements.txt

9) ЗапуститС loadgen:

python3 loadgen.py

ΠŸΡ€ΠΈ запускС loadgen Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ сообщСниС:

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

Π’ Π΄Ρ€ΡƒΠ³ΠΎΠΌ ΠΎΠΊΠ½Π΅ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π° server Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ Π½Π° консоль ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ сообщСния:

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, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ запросы ΠΊ server.
10) Π§Ρ‚ΠΎΠ±Ρ‹ ΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ loadgen ΠΈ server, Π²Π²Π΅Π΄ΠΈΡ‚Π΅ Ctrl-c Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΎΠΊΠ½Π΅ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π°.
11) Π’ ΠΎΠΊΠ½Π΅ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π° loadgen Π΄Π΅Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€ΡƒΠΉΡ‚Π΅ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΡƒΡŽ срСду:

deactivate

Π£ΠΏΠ°ΠΊΠΎΠ²ΠΊΠ° прилоТСния Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹

Π§Ρ‚ΠΎΠ±Ρ‹ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π° GKE, Π½ΡƒΠΆΠ½ΠΎ ΡƒΠΏΠ°ΠΊΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ прилоТСния β€” server ΠΈ loadgen β€” Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹. ΠšΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ β€” это способ ΡƒΠΏΠ°ΠΊΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ ΠΎΡ‚ срСды.

Π§Ρ‚ΠΎΠ±Ρ‹ ΡƒΠΏΠ°ΠΊΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€, Π½ΡƒΠΆΠ΅Π½ Dockerfile. Dockerfile β€” это тСкстовый Ρ„Π°ΠΉΠ», Π³Π΄Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ для сборки исходного ΠΊΠΎΠ΄Π° прилоТСния ΠΈ Π΅Π³ΠΎ зависимостСй Π² ΠΎΠ±Ρ€Π°Π· Docker. ПослС сборки Π²Ρ‹ Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅Ρ‚Π΅ ΠΎΠ±Ρ€Π°Π· Π² рССстр ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ², Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Docker Hub ΠΈΠ»ΠΈ Container Registry.

Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΡƒΠΆΠ΅ Π΅ΡΡ‚ΡŒ Dockerfile для server ΠΈ loadgen со всСми Π½ΡƒΠΆΠ½Ρ‹ΠΌΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΠΌΠΈ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠ±Ρ€Π°Ρ‚ΡŒ ΠΎΠ±Ρ€Π°Π·Ρ‹. НиТС β€” Dockerfile для 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" ]

  • Команда FROM python:3-slim as base Π²Π΅Π»ΠΈΡ‚ Docker ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ послСдний ΠΎΠ±Ρ€Π°Π· Python 3 Π² качСствС Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ.
  • Команда COPY. . ΠΊΠΎΠΏΠΈΡ€ΡƒΠ΅Ρ‚ исходныС Ρ„Π°ΠΉΠ»Ρ‹ Π² Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ (Π² нашСм случаС Ρ‚ΠΎΠ»ΡŒΠΊΠΎ server.py) Π² Ρ„Π°ΠΉΠ»ΠΎΠ²ΡƒΡŽ систСму ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°.
  • ENTRYPOINT опрСдСляСт ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ, которая ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для запуска ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°. Π’ нашСм случаС эта ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΏΠΎΡ‡Ρ‚ΠΈ совпадаСт с Ρ‚ΠΎΠΉ, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π²Ρ‹ использовали для запуска server.py ΠΈΠ· исходного ΠΊΠΎΠ΄Π°.
  • Команда EXPOSE ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ server ΠΎΠΆΠΈΠ΄Π°Π΅Ρ‚ Π΄Π°Π½Π½Ρ‹Π΅ Ρ‡Π΅Ρ€Π΅Π· ΠΏΠΎΡ€Ρ‚ 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) Π£Π±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ сСрвис Container Registry Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ GCP.

gcloud services enable containerregistry.googleapis.com

ΠšΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈΠ·Π°Ρ†ΠΈΡ server

  1. ΠŸΠ΅Ρ€Π΅ΠΉΠ΄ΠΈΡ‚Π΅ Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³, Π³Π΄Π΅ находится ΠΏΡ€ΠΈΠΌΠ΅Ρ€ server:

    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. ΠžΡ‚ΠΏΡ€Π°Π²ΡŒΡ‚Π΅ ΠΎΠ±Ρ€Π°Π· Π² Container Registry:
    docker push gcr.io/$PROJECT_ID/$GCR_REPO/helloserver:v0.0.1

ΠšΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈΠ·Π°Ρ†ΠΈΡ loadgen

1) ΠŸΠ΅Ρ€Π΅ΠΉΠ΄ΠΈΡ‚Π΅ Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³, Π³Π΄Π΅ находится ΠΏΡ€ΠΈΠΌΠ΅Ρ€ loadgen:

cd ../loadgen

2) Π‘ΠΎΠ±Π΅Ρ€ΠΈΡ‚Π΅ ΠΎΠ±Ρ€Π°Π·:

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

3) ΠžΡ‚ΠΏΡ€Π°Π²ΡŒΡ‚Π΅ ΠΎΠ±Ρ€Π°Π· Π² Container Registry:

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

ΠŸΡ€ΠΎΡΠΌΠΎΡ‚Ρ€ списка ΠΎΠ±Ρ€Π°Π·ΠΎΠ²

ΠŸΡ€ΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΡ‚Π΅ список ΠΎΠ±Ρ€Π°Π·ΠΎΠ² Π² Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ ΠΈ ΡƒΠ±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ ΠΎΠ±Ρ€Π°Π·Ρ‹ ΠΎΡ‚ΠΏΡ€Π°Π²Π»Π΅Π½Ρ‹:

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

Команда Π²Ρ‹Π΄Π°Π΅Ρ‚ ΠΈΠΌΠ΅Π½Π° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Ρ‚ΠΎ ΠΎΡ‚ΠΏΡ€Π°Π²Π»Π΅Π½Π½Ρ‹Ρ… ΠΎΠ±Ρ€Π°Π·ΠΎΠ²:

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

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ кластСра GKE.

Π­Ρ‚ΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π±Ρ‹ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Π½Π° Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ машинС Cloud Shell ΠΈΠ»ΠΈ Π½Π° ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ docker run. Но Π² производствСнной срСдС Π½ΡƒΠΆΠ΅Π½ способ Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎ ΠΎΡ€ΠΊΠ΅ΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹. НапримСр, Π½ΡƒΠΆΠ½Π° систСма, которая слСдит, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ всСгда Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΈ, ΠΈ Π½ΡƒΠΆΠ΅Π½ способ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Ρ‚ΡŒ ΠΌΠ°ΡΡˆΡ‚Π°Π± ΠΈ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ экзСмпляры ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ², Ссли Ρ‚Ρ€Π°Ρ„ΠΈΠΊ возрастСт.

Для запуска ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π½Ρ‹Ρ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ GKE. GKE β€” это ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ° оркСстрации ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ², которая ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΠ΅Ρ‚ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠ°ΡˆΠΈΠ½Ρ‹ Π² кластСр. КаТдая Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Π°Ρ машина называСтся ΡƒΠ·Π»ΠΎΠΌ. ΠšΠ»Π°ΡΡ‚Π΅Ρ€Ρ‹ GKE основаны Π½Π° опСнсорс-систСмС управлСния кластСрами Kubernetes. 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-standard-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:

ΠŸΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠ° прилоТСния для Istio

ΠŸΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ Ρ€Π°Π·Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ Π² GKE, ΠΈΠ·ΡƒΡ‡ΠΈΡ‚Π΅ ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ понятия Kubernetes. Π’ самом ΠΊΠΎΠ½Ρ†Π΅ Π΅ΡΡ‚ΡŒ ссылки, Ссли Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΡƒΠ·Π½Π°Ρ‚ΡŒ большС.

  • Π£Π·Π»Ρ‹ ΠΈ кластСры. Π’ GKE ΡƒΠ·Π΅Π» β€” это Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Π°Ρ машина. На Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ… Kubernetes ΡƒΠ·Π»ΠΎΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ ΠΈΠ»ΠΈ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Π°Ρ машина. ΠšΠ»Π°ΡΡ‚Π΅Ρ€ β€” это Π½Π°Π±ΠΎΡ€ ΡƒΠ·Π»ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π΅Π΄ΠΈΠ½Ρ‹ΠΌ Ρ†Π΅Π»Ρ‹ΠΌ ΠΈ Π³Π΄Π΅ Π²Ρ‹ Ρ€Π°Π·Π²Π΅Ρ€Ρ‚Ρ‹Π²Π°Π΅Ρ‚Π΅ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅.
  • Pod’ы. Π’ Kubernetes ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ Π·Π°ΠΏΡƒΡΠΊΠ°ΡŽΡ‚ΡΡ Π² pod’ах. Pod Π² Kubernetes β€” это нСдСлимая Π΅Π΄ΠΈΠ½ΠΈΡ†Π°. Pod Π²ΠΌΠ΅Ρ‰Π°Π΅Ρ‚ ΠΎΠ΄ΠΈΠ½ ΠΈΠ»ΠΈ нСсколько ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ². Π’Ρ‹ Ρ€Π°Π·Π²ΠΎΡ€Π°Ρ‡ΠΈΠ²Π°Π΅Ρ‚Π΅ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ server ΠΈ loadgen Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… pod’ах. Когда Π² pod’С нСсколько ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, сСрвСр прилоТСния ΠΈ прокси-сСрвСр), ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‚ΡΡ ΠΊΠ°ΠΊ Π΅Π΄ΠΈΠ½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΈ совмСстно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ рСсурсы pod’а.
  • РазвСртывания. Π’ Kubernetes Ρ€Π°Π·Π²Π΅Ρ€Ρ‚Ρ‹Π²Π°Π½ΠΈΠ΅ β€” это ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠΉ собой Π½Π°Π±ΠΎΡ€ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½Ρ‹Ρ… pod’ов. Π Π°Π·Π²Π΅Ρ€Ρ‚Ρ‹Π²Π°Π½ΠΈΠ΅ запускаСт нСсколько Ρ€Π΅ΠΏΠ»ΠΈΠΊ pod’ов, распрСдСлСнных ΠΏΠΎ ΡƒΠ·Π»Π°ΠΌ кластСра. Π Π°Π·Π²Π΅Ρ€Ρ‚Ρ‹Π²Π°Π½ΠΈΠ΅ автоматичСски замСняСт pod’ы, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΡ‚ΠΊΠ°Π·Π°Π»ΠΈ ΠΈΠ»ΠΈ Π½Π΅ ΠΎΡ‚Π²Π΅Ρ‡Π°ΡŽΡ‚.
  • БСрвис Kubernetes. ΠŸΡ€ΠΈ запускС ΠΊΠΎΠ΄Π° прилоТСния Π² GKE мСняСтся соСдинСниС ΠΌΠ΅ΠΆΠ΄Ρƒ loadgen ΠΈ server. Когда Π²Ρ‹ запустили сСрвисы Π½Π° Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ машинС Cloud Shell ΠΈΠ»ΠΈ Π½Π° ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅, Π²Ρ‹ отправляли запросы ΠΊ server ΠΏΠΎ адрСсу localhost:8080. ПослС развСртывания Π² GKE pod’ы Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ Π½Π° доступных ΡƒΠ·Π»Π°Ρ…. По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π²Ρ‹ Π½ΠΈΠΊΠ°ΠΊ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ Ρ‚Π΅ΠΌ, Π½Π° ΠΊΠ°ΠΊΠΎΠΌ ΡƒΠ·Π»Π΅ Π·Π°ΠΏΡƒΡ‰Π΅Π½ pod, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ Ρƒ pod’ов Π½Π΅Ρ‚ постоянных IP-адрСсов.
    Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ IP-адрСс для server, Π½ΡƒΠΆΠ½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π°Π±ΡΡ‚Ρ€Π°ΠΊΡ†ΠΈΡŽ сСти ΠΏΠΎΠ²Π΅Ρ€Ρ… pod’ов. Π­Ρ‚ΠΎ ΠΈ Π΅ΡΡ‚ΡŒ сСрвис Kubernetes. БСрвис Kubernetes прСдоставляСт ΠΏΠΎΡΡ‚ΠΎΡΠ½Π½ΡƒΡŽ ΠΊΠΎΠ½Π΅Ρ‡Π½ΡƒΡŽ Ρ‚ΠΎΡ‡ΠΊΡƒ для Π½Π°Π±ΠΎΡ€Π° pod’ов. Π•ΡΡ‚ΡŒ нСсколько Ρ‚ΠΈΠΏΠΎΠ² сСрвисов. server ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ LoadBalancer, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ прСдоставляСт внСшний IP-адрСс, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠ²ΡΠ·Π°Ρ‚ΡŒΡΡ с server ΠΈΠ·-Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»ΠΎΠ² кластСра.
    Π•Ρ‰Π΅ Π² Kubernetes Π΅ΡΡ‚ΡŒ встроСнная систСма DNS, которая Π½Π°Π·Π½Π°Ρ‡Π°Π΅Ρ‚ ΠΈΠΌΠ΅Π½Π° DNS (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, helloserver.default.cluster.local) сСрвисам. Благодаря этому pod’ы Π²Π½ΡƒΡ‚Ρ€ΠΈ кластСра ΡΠ²ΡΠ·Ρ‹Π²Π°ΡŽΡ‚ΡΡ с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ pod’ами Π² кластСрС ΠΏΠΎ постоянному адрСсу. Имя DNS нСльзя ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Π°ΠΌΠΈ кластСра, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π² Cloud Shell ΠΈΠ»ΠΈ Π½Π° ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅.

ΠœΠ°Π½ΠΈΡ„Π΅ΡΡ‚Ρ‹ Kubernetes

Когда Π²Ρ‹ запускали ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈΠ· исходного ΠΊΠΎΠ΄Π°, Π²Ρ‹ использовали ΠΈΠΌΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΡƒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ python3

server.py

Π˜ΠΌΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°Π΅Ρ‚ Π³Π»Π°Π³ΠΎΠ»: «сдСлай это».

Kubernetes ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Π΄Π΅ΠΊΠ»Π°Ρ€Π°Ρ‚ΠΈΠ²Π½ΡƒΡŽ модСль. Π­Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Π½Π΅ Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌ Kubernetes, Ρ‡Ρ‚ΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ Π½ΡƒΠΆΠ½ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ, Π° описываСм ΠΆΠ΅Π»Π°Π΅ΠΌΠΎΠ΅ состояниС. НапримСр, Kubernetes запускаСт ΠΈ останавливаСт pod’ы ΠΏΠΎ ΠΌΠ΅Ρ€Π΅ нСобходимости, Ρ‡Ρ‚ΠΎΠ±Ρ‹ фактичСскоС состояниС систСмы соотвСтствовало ΠΆΠ΅Π»Π°Π΅ΠΌΠΎΠΌΡƒ.

Π–Π΅Π»Π°Π΅ΠΌΠΎΠ΅ состояниС Π²Ρ‹ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚Π΅ Π² манифСстах, ΠΈΠ»ΠΈ Ρ„Π°ΠΉΠ»Π°Ρ… YAML. Π€Π°ΠΉΠ» YAML содСрТит спСцификации для ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Kubernetes.

Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ содСрТится Ρ„Π°ΠΉΠ» YAML для server ΠΈ loadgen. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ„Π°ΠΉΠ» YAML ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΆΠ΅Π»Π°Π΅ΠΌΠΎΠ΅ состояниС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° развСртывания ΠΈ сСрвиса Kubernetes.

server.yaml

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

  • kind ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Ρ‚ΠΈΠΏ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°.
  • metadata.name ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ имя развСртывания.
  • ΠŸΠ΅Ρ€Π²ΠΎΠ΅ ΠΏΠΎΠ»Π΅ spec содСрТит описаниС ΠΆΠ΅Π»Π°Π΅ΠΌΠΎΠ³ΠΎ состояния.
  • spec.replicas ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΆΠ΅Π»Π°Π΅ΠΌΠΎΠ΅ число pod’ов.
  • Π Π°Π·Π΄Π΅Π» spec.template опрСдСляСт шаблон pod’а. Π’ спСцификации pod’ов Π΅ΡΡ‚ΡŒ ΠΏΠΎΠ»Π΅ image, Π³Π΄Π΅ указываСтся имя ΠΎΠ±Ρ€Π°Π·Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½ΡƒΠΆΠ½ΠΎ ΠΈΠ·Π²Π»Π΅Ρ‡ΡŒ ΠΈΠ· Container Registry.

БСрвис опрСдСляСтся ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

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

  • LoadBalancer: ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρ‹ ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡŽΡ‚ запросы Π½Π° IP-адрСс балансировщика Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ, Ρƒ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π΅ΡΡ‚ΡŒ постоянный IP-адрСс ΠΈ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ доступСн ΠΈΠ·-Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»ΠΎΠ² кластСра.
  • targetPort: ΠΊΠ°ΠΊ Π²Ρ‹ ΠΏΠΎΠΌΠ½ΠΈΡ‚Π΅, ΠΊΠΎΠΌΠ°Π½Π΄Π° EXPOSE 8080 Π² Dockerfile Π½Π΅ прСдоставляла ΠΏΠΎΡ€Ρ‚Ρ‹. Π’Ρ‹ прСдоставляСтС ΠΏΠΎΡ€Ρ‚ 8080, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ ΡΠ²ΡΠ·Π°Ρ‚ΡŒΡΡ с ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠΌ server снаруТи кластСра. Π’ нашСм случаС hellosvc.default.cluster.local:80 (ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΎΠ΅ имя: hellosvc) соотвСтствуСт ΠΏΠΎΡ€Ρ‚Ρƒ 8080 IP-адрСса ΠΏΠΎΠ΄Π° helloserver.
  • port: это Π½ΠΎΠΌΠ΅Ρ€ ΠΏΠΎΡ€Ρ‚Π°, ΠΊΡƒΠ΄Π° ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ сСрвисы Π² кластСрС Π±ΡƒΠ΄ΡƒΡ‚ ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ запросы.

loadgen.yaml

ΠžΠ±ΡŠΠ΅ΠΊΡ‚ развСртывания Π² loadgen.yaml ΠΏΠΎΡ…ΠΎΠΆ Π½Π° server.yaml. Π Π°Π·Π½ΠΈΡ†Π° Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ развСртывания содСрТит Ρ€Π°Π·Π΄Π΅Π» env. Он опрСдСляСт ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ срСды, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½ΡƒΠΆΠ½Ρ‹ loadgen ΠΈ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ установили ΠΏΡ€ΠΈ запускС прилоТСния ΠΈΠ· исходного ΠΊΠΎΠ΄Π°.

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

Π Π°Π· loadgen Π½Π΅ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ входящиС запросы, для поля type ΡƒΠΊΠ°Π·Π°Π½ΠΎ 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) ΠŸΠ΅Ρ€Π΅ΠΉΠ΄ΠΈΡ‚Π΅ Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³, Π³Π΄Π΅ находится ΠΏΡ€ΠΈΠΌΠ΅Ρ€ server:

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

2) ΠžΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ server.yaml Π² тСкстовом Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π΅.
3) Π—Π°ΠΌΠ΅Π½ΠΈΡ‚Π΅ имя Π² ΠΏΠΎΠ»Π΅ image Π½Π° имя вашСго ΠΎΠ±Ρ€Π°Π·Π° 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) ΠŸΠ΅Ρ€Π΅ΠΉΠ΄ΠΈΡ‚Π΅ Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³, Π³Π΄Π΅ находится loadgen:

cd ../loadgen

7) ΠžΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ loadgen.yaml Π² тСкстовом Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π΅.
8) Π—Π°ΠΌΠ΅Π½ΠΈΡ‚Π΅ имя Π² ΠΏΠΎΠ»Π΅ image Π½Π° имя вашСго ΠΎΠ±Ρ€Π°Π·Π° 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) Π˜Π·Π²Π»Π΅ΠΊΠΈΡ‚Π΅ Π»ΠΎΠ³ΠΈ прилоТСния ΠΈΠ· ΠΏΠΎΠ΄Π° loadgen. Π—Π°ΠΌΠ΅Π½ΠΈΡ‚Π΅ 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

БСрСмся Π·Π° Istio

Π£ вас ΡƒΠΆΠ΅ Π΅ΡΡ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Ρ€Π°Π·Π²Π΅Ρ€Π½ΡƒΡ‚ΠΎΠ΅ Π² GKE. loadgen ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Kubernetes DNS (hellosvc:80), Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ запросы ΠΊ server, ΠΈ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ запросы ΠΊ server ΠΏΠΎ Π²Π½Π΅ΡˆΠ½Π΅ΠΌΡƒ IP-адрСсу. Π₯отя Ρƒ Kubernetes ΠΌΠ½ΠΎΠ³ΠΎ возмоТностСй, ΠΊΠΎΠ΅-ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ сСрвисах Π½Π΅ Ρ…Π²Π°Ρ‚Π°Π΅Ρ‚:

  • Как Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‚ сСрвисы? КакиС ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρƒ сСрвисами? Как ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ Ρ‚Ρ€Π°Ρ„ΠΈΠΊ ΠΌΠ΅ΠΆΠ΄Ρƒ сСрвисами? Π’Ρ‹ Π² курсС, Ρ‡Ρ‚ΠΎ loadgen отправляСт запросы ΠΊ server, Π½ΠΎ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ Π·Π½Π°Π΅Ρ‚Π΅ ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚Π²Π΅Ρ‚ΠΈΡ‚ΡŒ Π½Π° эти вопросы, смотрим Π½Π° список Π·Π°ΠΏΡƒΡ‰Π΅Π½Π½Ρ‹Ρ… ΠΏΠΎΠ΄ΠΎΠ² Π² GKE.
  • ΠœΠ΅Ρ‚Ρ€ΠΈΠΊΠΈ. Как Π΄ΠΎΠ»Π³ΠΎ server ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π½Π° входящий запрос? Бколько запросов Π² сСкунду поступаСт Π½Π° server? Он Π²Ρ‹Π΄Π°Π΅Ρ‚ сообщСния ΠΎΠ± ΠΎΡˆΠΈΠ±ΠΊΠ°Ρ…?
  • БвСдСния ΠΎ бСзопасности. Π’Ρ€Π°Ρ„ΠΈΠΊ ΠΌΠ΅ΠΆΠ΄Ρƒ loadgen ΠΈ server ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ просто ΠΏΠΎ HTTP ΠΈΠ»ΠΈ ΠΏΠΎ mTLS?

На всС эти вопросы ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Istio. Для этого Istio ΠΏΠΎΠΌΠ΅Ρ‰Π°Π΅Ρ‚ sidecar-прокси Envoy Π² ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ pod. ΠŸΡ€ΠΎΠΊΡΠΈ Envoy ΠΏΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ вСсь входящий ΠΈ исходящий Ρ‚Ρ€Π°Ρ„ΠΈΠΊ ΠΊ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°ΠΌ прилоТСния. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ server ΠΈ loadgen ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‚ ΠΏΠΎ sidecar-прокси Envoy, ΠΈ вСсь Ρ‚Ρ€Π°Ρ„ΠΈΠΊ ΠΎΡ‚ loadgen ΠΊ server ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ Ρ‡Π΅Ρ€Π΅Π· прокси Envoy.

БоСдинСния ΠΌΠ΅ΠΆΠ΄Ρƒ прокси Envoy ΠΎΠ±Ρ€Π°Π·ΡƒΡŽΡ‚ service mesh. АрхитСктура service mesh прСдоставляСт ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ контроля ΠΏΠΎΠ²Π΅Ρ€Ρ… Kubernetes.

ΠŸΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠ° прилоТСния для Istio

Π Π°Π· прокси Envoy Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ Π² своих ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°Ρ…, Istio ΠΌΠΎΠΆΠ½ΠΎ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΏΠΎΠ²Π΅Ρ€Ρ… кластСра GKE, ΠΏΠΎΡ‡Ρ‚ΠΈ Π½Π΅ мСняя ΠΊΠΎΠ΄ прилоТСния. Но Π²Ρ‹ ΠΏΡ€ΠΎΠ΄Π΅Π»Π°Π»ΠΈ ΠΊΠΎΠ΅-ΠΊΠ°ΠΊΡƒΡŽ Ρ€Π°Π±ΠΎΡ‚Ρƒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΈΡ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΊ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΡŽ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Istio:

  • БСрвисы для всСх ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ². К развСртываниям server ΠΈ loadgen привязано ΠΏΠΎ сСрвису Kubernetes. Π”Π°ΠΆΠ΅ Ρƒ loadgen, ΠΊ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ Π½Π΅ ΠΏΠΎΡΡ‚ΡƒΠΏΠ°ΡŽΡ‚ входящиС запросы, Π΅ΡΡ‚ΡŒ сСрвис.
  • Π£ ΠΏΠΎΡ€Ρ‚ΠΎΠ² Π² сСрвисах Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΠΈΠΌΠ΅Π½Π°. Π₯отя Π² GKE ΠΏΠΎΡ€Ρ‚Ρ‹ сСрвисов ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ Π±Π΅Π· ΠΈΠΌΠ΅Π½ΠΈ, Istio Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ имя ΠΏΠΎΡ€Ρ‚Π° Π² соотвСтствии с Π΅Π³ΠΎ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»ΠΎΠΌ. Π’ Ρ„Π°ΠΉΠ»Π΅ YAML ΠΏΠΎΡ€Ρ‚ для server называСтся http, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ server ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» HTTP. Если Π±Ρ‹ service использовал gRPC, Π²Ρ‹ Π±Ρ‹ Π½Π°Π·Π²Π°Π»ΠΈ ΠΏΠΎΡ€Ρ‚ grpc.
  • РазвСртывания ΠΏΠΎΠΌΠ΅Ρ‡Π°ΡŽΡ‚ΡΡ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ управлСния Ρ‚Ρ€Π°Ρ„ΠΈΠΊΠΎΠΌ Istio, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ€Π°Π·Π΄Π΅Π»ΡΡ‚ΡŒ Ρ‚Ρ€Π°Ρ„ΠΈΠΊ ΠΌΠ΅ΠΆΠ΄Ρƒ вСрсиями ΠΎΠ΄Π½ΠΎΠ³ΠΎ сСрвиса.

Установка Istio

Π£ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Istio ΠΌΠΎΠΆΠ½ΠΎ двумя способами. МоТно Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ Istio on GKE ΠΈΠ»ΠΈ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ опСнсорс-Π²Π΅Ρ€ΡΠΈΡŽ Istio Π½Π° кластСрС. Π‘ Istio on GKE ΠΌΠΎΠΆΠ½ΠΎ Π»Π΅Π³ΠΊΠΎ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ установкой ΠΈ Π°ΠΏΠ³Ρ€Π΅ΠΉΠ΄ΠΎΠΌ Istio Π² Ρ€Π°ΠΌΠΊΠ°Ρ… ΠΆΠΈΠ·Π½Π΅Π½Π½ΠΎΠ³ΠΎ Ρ†ΠΈΠΊΠ»Π° кластСра GKE. Если Π²Π°ΠΌ Π½ΡƒΠΆΠ½Π° самая новая вСрсия Istio ΠΈΠ»ΠΈ большС контроля Π½Π°Π΄ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠ΅ΠΉ ΠΏΠ°Π½Π΅Π»ΠΈ управлСния Istio, установитС опСнсорс-Π²Π΅Ρ€ΡΠΈΡŽ вмСсто Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ Istio on GKE. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒΡΡ с ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΎΠΌ, Ρ‡ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΡΡ‚Π°Ρ‚ΡŒΡŽ НуТСн Π»ΠΈ ΠΌΠ½Π΅ Istio on GKE?.

Π’Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚, ΠΈΠ·ΡƒΡ‡ΠΈΡ‚Π΅ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π΅ руководство ΠΈ слСдуйтС инструкциям, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Istio Π½Π° кластСрС. Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Istio с Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Ρ‚ΠΎ Ρ€Π°Π·Π²Π΅Ρ€Π½ΡƒΡ‚Ρ‹ΠΌ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ, Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ Π²Π½Π΅Π΄Ρ€Π΅Π½ΠΈΠ΅ sidecar’ов для пространства ΠΈΠΌΠ΅Π½ default.

ΠžΡ‡ΠΈΡΡ‚ΠΊΠ°

Π§Ρ‚ΠΎΠ±Ρ‹ с Π°ΠΊΠΊΠ°ΡƒΠ½Ρ‚Π° Google Cloud Platform Π½Π΅ ΡΠΏΠΈΡΡ‹Π²Π°Π»Π°ΡΡŒ ΠΏΠ»Π°Ρ‚Π° Π·Π° рСсурсы, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ использовали Π² этом руководствС, ΡƒΠ΄Π°Π»ΠΈΡ‚Π΅ кластСр ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°, ΠΊΠΎΠ³Π΄Π° установитС Istio ΠΈ Π½Π°ΠΈΠ³Ρ€Π°Π΅Ρ‚Π΅ΡΡŒ с ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠΌ прилоТСния. ΠŸΡ€ΠΈ этом Π±ΡƒΠ΄ΡƒΡ‚ ΡƒΠ΄Π°Π»Π΅Π½Ρ‹ всС рСсурсы кластСра, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ экзСмпляры, диски ΠΈ сСтСвыС рСсурсы.

Π§Ρ‚ΠΎ дальшС?

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: habr.com