Вычислительный движок Google

1. Введение

Привет всем, спасибо, что пришли сегодня! Готовы изучить Google Compute Engine?

В этой лаборатории мы рассмотрим работу Compute Engine на примере приложения гостевой книги.

Вы создадите экземпляры Compute Engine, развернете nginx и, наконец, поставите на передний план балансировщик сетевой нагрузки. Экземпляр Compute Engine можно создать с помощью графической консоли или командной строки. В этой лабораторной работе вы познакомитесь с использованием командной строки.

ComputeEngine_128px.png

Google Compute Engine предлагает виртуальные машины, работающие в центрах обработки данных Google, подключенных к всемирной оптоволоконной сети. Предлагаемые инструменты и рабочий процесс позволяют масштабировать от отдельных экземпляров до глобальных облачных вычислений со сбалансированной нагрузкой.

Эти виртуальные машины загружаются быстро, оснащены постоянным дисковым хранилищем и обеспечивают стабильную производительность. Машины доступны во многих конфигурациях, включая заранее определенные размеры, а также могут быть созданы с использованием нестандартных типов машин, оптимизированных для ваших конкретных потребностей.

Наконец, виртуальные машины Compute Engine также являются технологией, используемой в ряде других продуктов Google Cloud (Kubernetes Engine, Cloud Dataproc, Cloud Dataflow и т. д.).

2. Настройка и требования

Самостоятельная настройка среды

  1. Войдите в Google Cloud Console и создайте новый проект или повторно используйте существующий. Если у вас еще нет учетной записи Gmail или Google Workspace, вам необходимо ее создать .

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • Имя проекта — это отображаемое имя для участников этого проекта. Это строка символов, не используемая API Google, и вы можете обновить ее в любое время.
  • Идентификатор проекта должен быть уникальным для всех проектов Google Cloud и неизменяемым (нельзя изменить после его установки). Cloud Console автоматически генерирует уникальную строку; обычно тебя не волнует, что это такое. В большинстве лабораторий кода вам потребуется указать идентификатор проекта (обычно он обозначается как PROJECT_ID ), поэтому, если он вам не нравится, создайте другой случайный идентификатор или попробуйте свой собственный и посмотрите, доступен ли он. Затем он «замораживается» после создания проекта.
  • Существует третье значение — номер проекта , который используют некоторые API. Подробнее обо всех трех этих значениях читайте в документации .
  1. Затем вам необходимо включить выставление счетов в Cloud Console, чтобы использовать облачные ресурсы/API. Прохождение этой лаборатории кода не должно стоить много, если вообще стоит. Чтобы отключить ресурсы и не платить за выставление счетов за пределами этого руководства, следуйте инструкциям по «очистке», которые можно найти в конце лаборатории кода. Новые пользователи Google Cloud имеют право на участие в программе бесплатной пробной версии стоимостью 300 долларов США .

Google Cloud Shell

Хотя Google Cloud и Compute Engine можно управлять удаленно с вашего ноутбука, в этой лаборатории мы будем использовать Google Cloud Shell , среду командной строки, работающую в облаке.

Эта виртуальная машина на базе Debian оснащена всеми необходимыми инструментами разработки. Он предлагает постоянный домашний каталог объемом 5 ГБ и работает в Google Cloud, что значительно повышает производительность сети и аутентификацию. Это означает, что все, что вам понадобится для этой лаборатории кода, — это браузер (да, он работает на Chromebook).

  1. Чтобы активировать Cloud Shell из Cloud Console, просто нажмите «Активировать Cloud Shell». b125d9eb26a46cc5.png (подготовка и подключение к среде займет всего несколько минут).

1067942a9a93f70.png

Снимок экрана 14.06.2017, 22.13.43.png

После подключения к Cloud Shell вы увидите, что вы уже прошли аутентификацию и что для проекта уже установлен ваш PROJECT_ID .

gcloud auth list

Вывод команды

Credentialed accounts:
 - <myaccount>@<mydomain>.com (active)
gcloud config list project

Вывод команды

[core]
project = <PROJECT_ID>

Если по какой-то причине проект не установлен, просто введите следующую команду:

gcloud config set project <PROJECT_ID>

Ищете свой PROJECT_ID ? Узнайте, какой идентификатор вы использовали на этапах настройки, или найдите его на панели управления Cloud Console:

cc3895eeac80db2c.png

Cloud Shell также по умолчанию устанавливает некоторые переменные среды, которые могут быть полезны при выполнении будущих команд.

echo $GOOGLE_CLOUD_PROJECT

Вывод команды

<PROJECT_ID>
  1. Наконец, установите зону по умолчанию и конфигурацию проекта.
gcloud config set compute/zone us-central1-f

Вы можете выбрать множество различных зон. Дополнительную информацию см. в разделе «Регионы и зоны» .

3. Создайте экземпляр Compute Engine.

Как обсуждалось ранее, в этой лаборатории мы будем использовать командную строку gcloud . Все, что здесь сделано, можно сделать с помощью консоли (доступно по адресу console.cloud.google.com ).

Давайте сначала создадим экземпляр с настройками по умолчанию:

$ gcloud compute instances create myinstance
Created [...].
NAME: myinstance
ZONE: us-central1-f
MACHINE_TYPE: n1-standard-1
PREEMPTIBLE:
INTERNAL_IP: 10.128.X.X
EXTERNAL_IP: X.X.X.X
STATUS: RUNNING

Запишите EXTERNAL_IP — это важно позже.

Экземпляр создается с использованием ряда значений по умолчанию:

  • Зона, которую вы выбираете. Все экземпляры живут в зоне . Вы можете выбрать зону во время создания экземпляра, используя флаг --zone , или можете установить зону по умолчанию (как мы это делали при первоначальной настройке) и опустить флаг --zone .
  • Последний образ Debian GNU/Linux 9 (растянутый) . Если вы используете собственное изображение , укажите здесь его имя. Например, --image my-own-image .
  • Тип машины n1-standard-1 . Вы можете выбрать другой тип машины, например n1-highmem-4 или n1-highcpu-6 . Если ни один из предопределенных типов машин не соответствует вашим потребностям, используйте собственный тип машины .
  • Корневой постоянный диск с тем же именем, что и у экземпляра; диск автоматически присоединяется к экземпляру.

Запустите gcloud compute instances create --help чтобы просмотреть все доступные параметры.

4. Включите брандмауэр для порта 80.

По умолчанию Google Cloud Platform разрешает доступ только к небольшому количеству портов. Поскольку мы скоро будем устанавливать Nginx, давайте сначала включим порт 80 в конфигурации брандмауэра.

$ gcloud compute firewall-rules create allow-80 --allow tcp:80
Created [...].
NAME: allow-80
NETWORK: default
DIRECTION: INGRESS
PRIORITY: 1000
ALLOW: tcp:80
DENY:
DISABLED: False

Это создаст правило брандмауэра с allow-80 , в котором список блоков IP-адресов по умолчанию, которым разрешено устанавливать входящие соединения ( --source-ranges ), имеет значение 0.0.0.0/0 (везде).

Запустите gcloud compute firewall-rules create --help чтобы увидеть все значения по умолчанию и все доступные параметры, включая возможность применять правила брандмауэра на основе тегов .

5. SSH в экземпляр

Чтобы подключиться к экземпляру по SSH из командной строки (все еще из Cloud Shell):

$ gcloud compute ssh myinstance
Waiting for SSH key to propagate.
Warning: Permanently added 'compute.12345' (ECDSA) to the list of known hosts.
...

yourusername@myinstance:~#

Вот и все! довольно легко. (При производстве обязательно вводите парольную фразу :)

Кроме того, вы также можете подключиться к экземпляру по SSH непосредственно из консоли ( console.cloud.google.com ), перейдя в Compute Engine > VM Instances и нажав SSH .

bfbc03997a41946e.png

6. Установите Nginx

Войдите в myinstance , недавно созданный экземпляр, и установите nginx:

$ sudo su - 
# apt update
# apt install -y nginx
# service nginx start
# exit

Проверьте, что сервер работает, используя curl из myinstance :

$ curl -s localhost | grep nginx
<title>Welcome to nginx!</title>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
<a href="http://nginx.org/">nginx.org</a>.<br/>
<a href="http://nginx.com/">nginx.com</a>.</p>
<p><em>Thank you for using nginx.</em></p>

Найдите внешний IP-адрес вашего экземпляра, указав свои экземпляры через веб-интерфейс:

dcc4e56e82ba2603.png

Обязательно выйдите из SSH и запустите эту команду из Cloud Shell :

$ gcloud compute instances list
NAME: myinstance
ZONE: us-central1-f
MACHINE_TYPE: n1-standard-1
PREEMPTIBLE:
INTERNAL_IP: 10.128.X.X
EXTERNAL_IP: X.X.X.X
STATUS: RUNNING

Затем перейдите по http://EXTERNAL_IP/ где EXTERNAL_IP — это общедоступный IP- адрес моего экземпляра , и вы сможете увидеть страницу nginx:

49b52b9354041f3b.png

7. Скрипт запуска

Вместо того, чтобы каждый раз настраивать экземпляр, вы можете использовать сценарий запуска для инициализации экземпляра при запуске.

Создайте файл startup.sh со следующим содержимым (вы можете использовать свой любимый текстовый редактор: vim , nano или emacs ):

#! /bin/bash
apt-get update
apt-get install -y nginx
service nginx start
sed -i -- 's/nginx/Google Cloud Platform - '"$HOSTNAME"'/' /var/www/html/index.nginx-debian.html

Чтобы создать новый экземпляр виртуальной машины с помощью этого сценария запуска, просто введите:

$ gcloud compute instances create nginx \
         --metadata-from-file startup-script=startup.sh 
Created [...].
NAME: nginx
ZONE: us-central1-f
MACHINE_TYPE: n1-standard-1
PREEMPTIBLE:
INTERNAL_IP: 10.128.X.X
EXTERNAL_IP: X.X.X.X
STATUS: RUNNING

Перейдите по адресу http://EXTERNAL_IP/ , и вы увидите обновленную домашнюю страницу. Если страница не отображается, повторите попытку через пару секунд, возможно, хост все еще запускает nginx.

8. Создайте кластер серверов.

Чтобы создать кластер серверов, сначала необходимо создать Шаблон экземпляра . После создания шаблона экземпляра вы можете создать группу экземпляров, чтобы управлять количеством создаваемых экземпляров.

Сначала создайте шаблон экземпляра, используя сценарий запуска:

$ gcloud compute instance-templates create nginx-template \
         --metadata-from-file startup-script=startup.sh
Created [...].
NAME: nginx-template
MACHINE_TYPE: n1-standard-1
PREEMPTIBLE:
CREATION_TIMESTAMP: 2022-03-18T15:10:37.621-07:00

Во-вторых, давайте создадим целевой пул. Целевой пул позволяет нам иметь одну точку доступа ко всем экземплярам в группе и необходим для балансировки нагрузки на будущих этапах.

$ gcloud compute target-pools create nginx-pool
Created [...].
NAME: nginx-pool
REGION: us-central1
SESSION_AFFINITY: NONE
BACKUP:
HEALTH_CHECKS:

Наконец, создайте группу экземпляров, используя шаблон:

$ gcloud compute instance-groups managed create nginx-group \
         --base-instance-name nginx \
         --size 2 \
         --template nginx-template \
         --target-pool nginx-pool
Created [...].
NAME: nginx-group
LOCATION: us-central1-f
SCOPE: zone
BASE_INSTANCE_NAME: nginx
SIZE: 0
TARGET_SIZE: 2
INSTANCE_TEMPLATE: nginx-template
AUTOSCALED: no

Это создаст два дополнительных экземпляра виртуальной машины с именами, имеющими префикс nginx- .

Теперь вы сможете увидеть все созданные экземпляры!

$ gcloud compute instances list
NAME: myinstance
ZONE: us-central1-f
MACHINE_TYPE: n1-standard-1
PREEMPTIBLE:
INTERNAL_IP: 10.128.X.X
EXTERNAL_IP: X.X.X.X
STATUS: RUNNING

NAME: nginx
ZONE: us-central1-f
MACHINE_TYPE: n1-standard-1
PREEMPTIBLE:
INTERNAL_IP: 10.128.X.X
EXTERNAL_IP: X.X.X.X
STATUS: RUNNING

NAME: nginx-frpl
ZONE: us-central1-f
MACHINE_TYPE: n1-standard-1
PREEMPTIBLE:
INTERNAL_IP: 10.128.X.X
EXTERNAL_IP: X.X.X.X
STATUS: RUNNING

NAME: nginx-ztg4
ZONE: us-central1-f
MACHINE_TYPE: n1-standard-1
PREEMPTIBLE:
INTERNAL_IP: 10.128.X.X
EXTERNAL_IP: X.X.X.X
STATUS: RUNNING

9. Создайте балансировщик сетевой нагрузки.

В Google Cloud Platform есть несколько типов балансировщиков нагрузки, в том числе:

Давайте создадим балансировщик нагрузки региональной сети, ориентированный на нашу группу экземпляров:

$ gcloud compute forwarding-rules create nginx-lb \
         --ports 80 \
         --target-pool nginx-pool
Created [...].

$ gcloud compute forwarding-rules list
NAME: nginx-lb
REGION: us-central1
IP_ADDRESS: X.X.X.X
IP_PROTOCOL: TCP
TARGET: us-central1/targetPools/nginx-pool

Затем вы можете посетить балансировщик нагрузки из браузера http://IP_ADDRESS/ где IP_ADDRESS — это адрес, показанный в результате выполнения предыдущей команды.

В связи со временем мы не будем сегодня создавать балансировщик нагрузки HTTP.

10. Очистите кластер

Не забудьте выключить кластер, иначе он будет продолжать работать и накапливать затраты. Следующие команды удалят экземпляры Google Compute Engine, группу экземпляров, группу таргетинга и балансировщик нагрузки.

$ gcloud compute forwarding-rules delete nginx-lb

$ gcloud compute instance-groups managed delete nginx-group

$ gcloud compute target-pools delete nginx-pool

$ gcloud compute instance-templates delete nginx-template

$ gcloud compute instances delete nginx

$ gcloud compute instances delete myinstance

$ gcloud compute firewall-rules delete allow-80

Каждая из приведенных выше команд должна попросить вас подтвердить удаление ресурса.

11. Что дальше?

Поздравляем, вы завершили эту лабораторную работу по написанию кода Compute Engine!

Дополнительные возможности Compute Engine

Google Compute Engine имеет богатый набор функций. Возможно, вы захотите погрузиться в некоторые из них:

Движок Google Кубернетес

Google Kubernetes Engine (GKE) — это размещенное и полностью управляемое предложение Kubernetes в Google Cloud. Существует несколько лабораторий кода, которые помогут вам начать работу с GKE. Вот хороший вариант для начала:

Оставьте нам свой отзыв

  • Пожалуйста, уделите немного времени и заполните наш очень короткий опрос.