1. Введение
Привет всем, спасибо, что пришли сегодня! Готовы изучить Google Compute Engine?
В этой лаборатории мы рассмотрим работу Compute Engine на примере приложения гостевой книги.
Вы создадите экземпляры Compute Engine, развернете nginx и, наконец, поставите на передний план балансировщик сетевой нагрузки. Экземпляр Compute Engine можно создать с помощью графической консоли или командной строки. В этой лабораторной работе вы познакомитесь с использованием командной строки.
Google Compute Engine предлагает виртуальные машины, работающие в центрах обработки данных Google, подключенных к всемирной оптоволоконной сети. Предлагаемые инструменты и рабочий процесс позволяют масштабировать от отдельных экземпляров до глобальных облачных вычислений со сбалансированной нагрузкой.
Эти виртуальные машины загружаются быстро, оснащены постоянным дисковым хранилищем и обеспечивают стабильную производительность. Машины доступны во многих конфигурациях, включая заранее определенные размеры, а также могут быть созданы с использованием нестандартных типов машин, оптимизированных для ваших конкретных потребностей.
Наконец, виртуальные машины Compute Engine также являются технологией, используемой в ряде других продуктов Google Cloud (Kubernetes Engine, Cloud Dataproc, Cloud Dataflow и т. д.).
2. Настройка и требования
Самостоятельная настройка среды
- Войдите в Google Cloud Console и создайте новый проект или повторно используйте существующий. Если у вас еще нет учетной записи Gmail или Google Workspace, вам необходимо ее создать .
- Имя проекта — это отображаемое имя для участников этого проекта. Это строка символов, не используемая API Google, и вы можете обновить ее в любое время.
- Идентификатор проекта должен быть уникальным для всех проектов Google Cloud и неизменяемым (нельзя изменить после его установки). Cloud Console автоматически генерирует уникальную строку; обычно тебя не волнует, что это такое. В большинстве лабораторий кода вам потребуется указать идентификатор проекта (обычно он обозначается как
PROJECT_ID
), поэтому, если он вам не нравится, создайте другой случайный идентификатор или попробуйте свой собственный и посмотрите, доступен ли он. Затем он «замораживается» после создания проекта. - Существует третье значение — номер проекта , который используют некоторые API. Подробнее обо всех трех этих значениях читайте в документации .
- Затем вам необходимо включить выставление счетов в Cloud Console, чтобы использовать облачные ресурсы/API. Прохождение этой лаборатории кода не должно стоить много, если вообще стоит. Чтобы отключить ресурсы и не платить за выставление счетов за пределами этого руководства, следуйте инструкциям по «очистке», которые можно найти в конце лаборатории кода. Новые пользователи Google Cloud имеют право на участие в программе бесплатной пробной версии стоимостью 300 долларов США .
Google Cloud Shell
Хотя Google Cloud и Compute Engine можно управлять удаленно с вашего ноутбука, в этой лаборатории мы будем использовать Google Cloud Shell , среду командной строки, работающую в облаке.
Эта виртуальная машина на базе Debian оснащена всеми необходимыми инструментами разработки. Он предлагает постоянный домашний каталог объемом 5 ГБ и работает в Google Cloud, что значительно повышает производительность сети и аутентификацию. Это означает, что все, что вам понадобится для этой лаборатории кода, — это браузер (да, он работает на Chromebook).
- Чтобы активировать Cloud Shell из Cloud Console, просто нажмите «Активировать Cloud Shell». (подготовка и подключение к среде займет всего несколько минут).
После подключения к 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:
Cloud Shell также по умолчанию устанавливает некоторые переменные среды, которые могут быть полезны при выполнении будущих команд.
echo $GOOGLE_CLOUD_PROJECT
Вывод команды
<PROJECT_ID>
- Наконец, установите зону по умолчанию и конфигурацию проекта.
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 .
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-адрес вашего экземпляра, указав свои экземпляры через веб-интерфейс:
Обязательно выйдите из 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:
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 имеет богатый набор функций. Возможно, вы захотите погрузиться в некоторые из них:
- Вытесняемые виртуальные машины – https://cloud.google.com/compute/docs/instances/create-start-preemptible-instance .
- Единоличные узлы – https://cloud.google.com/compute/docs/nodes/create-nodes .
- Графические процессоры и TPU – https://cloud.google.com/compute/docs/gpus/add-gpus .
- Экземпляры Windows – https://cloud.google.com/compute/docs/instances/windows/creating-managing-windows-instances .
- Ресурсы для маркировки — https://cloud.google.com/compute/docs/labeling-resources .
- Миграция виртуальных машин в Compute Engine – https://cloud.google.com/compute/docs/vm-migration/.
Движок Google Кубернетес
Google Kubernetes Engine (GKE) — это размещенное и полностью управляемое предложение Kubernetes в Google Cloud. Существует несколько лабораторий кода, которые помогут вам начать работу с GKE. Вот хороший вариант для начала:
- Лаборатория кода Google Kubernetes Engine — https://codelabs.developers.google.com/codelabs/cloud-gke-workshop-v2
Оставьте нам свой отзыв
- Пожалуйста, уделите немного времени и заполните наш очень короткий опрос.