Вычислительный движок 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 и создайте новый проект или используйте существующий. Если у вас еще нет учетной записи Gmail или Google Workspace, вам необходимо ее создать .

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

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

Google Cloud Shell

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

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

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

1067942a9a93f70.png

Screen Shot 2017-06-14 at 10.13.43 PM.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 ? Проверьте, какой 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 (stretch) . Если вы используете собственный образ , укажите здесь его имя. Например, --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 из моего экземпляра :

$ 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 Kubernetes Engine

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

Оставьте свой отзыв.

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